From b46a701f7d137a7d638f11a14d9f26707868075b Mon Sep 17 00:00:00 2001 From: Asher Date: Sun, 6 Jul 2025 17:11:35 +0100 Subject: [PATCH] Added webassembly --- rng/rng/bindings.cpp | 11 + rng/rng/build_wasm.sh | 6 + rng/rng/generators/LCG/lehmer.cpp | 2 +- rng/rng/generators/mt19937.cpp | 194 +- rng/rng/generators/mt19937.h | 29 + rng/rng/main.cpp | 4 +- rng/rng/main.o | Bin 431640 -> 431848 bytes rng/rng/readme.md | 13 +- rng/rng/rng.h | 3 +- rng/rng/web/.gitignore | 24 + rng/rng/web/README.md | 12 + rng/rng/web/eslint.config.js | 29 + rng/rng/web/index.html | 14 + rng/rng/web/package-lock.json | 3365 ++++++++++++++++++++++++++ rng/rng/web/package.json | 29 + rng/rng/web/public/libs/splat.js | 3595 ++++++++++++++++++++++++++++ rng/rng/web/public/libs/splat.wasm | Bin 0 -> 44479 bytes rng/rng/web/src/App.jsx | 48 + rng/rng/web/src/assets/react.svg | 1 + rng/rng/web/src/index.css | 1 + rng/rng/web/src/main.jsx | 10 + rng/rng/web/vite.config.js | 8 + 22 files changed, 7310 insertions(+), 88 deletions(-) create mode 100644 rng/rng/bindings.cpp create mode 100755 rng/rng/build_wasm.sh create mode 100644 rng/rng/generators/mt19937.h create mode 100644 rng/rng/web/.gitignore create mode 100644 rng/rng/web/README.md create mode 100644 rng/rng/web/eslint.config.js create mode 100644 rng/rng/web/index.html create mode 100644 rng/rng/web/package-lock.json create mode 100644 rng/rng/web/package.json create mode 100644 rng/rng/web/public/libs/splat.js create mode 100755 rng/rng/web/public/libs/splat.wasm create mode 100644 rng/rng/web/src/App.jsx create mode 100644 rng/rng/web/src/assets/react.svg create mode 100644 rng/rng/web/src/index.css create mode 100644 rng/rng/web/src/main.jsx create mode 100644 rng/rng/web/vite.config.js diff --git a/rng/rng/bindings.cpp b/rng/rng/bindings.cpp new file mode 100644 index 0000000..ce178e6 --- /dev/null +++ b/rng/rng/bindings.cpp @@ -0,0 +1,11 @@ +#include +#include "generators/mt19937.h" + +using namespace emscripten; + +EMSCRIPTEN_BINDINGS(mersenne_twist){ + class_("mt19937") + .constructor() + .function("generate", &splat::mt19937_generator::generate) + .function("getName", &splat::mt19937_generator::getName); +} \ No newline at end of file diff --git a/rng/rng/build_wasm.sh b/rng/rng/build_wasm.sh new file mode 100755 index 0000000..994741b --- /dev/null +++ b/rng/rng/build_wasm.sh @@ -0,0 +1,6 @@ +emcc generators/mt19937.cpp bindings.cpp \ + -o web/public/libs/splat.js \ + -s WASM=1 \ + -s MODULARIZE=1 \ + -s EXPORT_NAME='createModule' \ + --bind \ No newline at end of file diff --git a/rng/rng/generators/LCG/lehmer.cpp b/rng/rng/generators/LCG/lehmer.cpp index c99a218..25c94ff 100644 --- a/rng/rng/generators/LCG/lehmer.cpp +++ b/rng/rng/generators/LCG/lehmer.cpp @@ -19,7 +19,7 @@ namespace splat { } uint32_t generate() override { seed = (a * seed) % m; - return seed >> 32; + return seed; } std::string getName() override { return "lehmer"; diff --git a/rng/rng/generators/mt19937.cpp b/rng/rng/generators/mt19937.cpp index 4d5a653..082b588 100644 --- a/rng/rng/generators/mt19937.cpp +++ b/rng/rng/generators/mt19937.cpp @@ -1,96 +1,126 @@ #include "../rng.h" -#include "./generator.h" +#include "mt19937.h" // more specifically this will be mt19937 - 32 bit -std::array mt19937_init(uint32_t seed){ - - std::array state; - - state[0] = seed; - - for(int i=1; i<624; i++){ - state[i]= 1812433253*(state[i-1] ^ (state[i-1] >> 30)) + i; - } - - return state; -} - -std::array mt19937_twist(std::array state){ - - std::array newstate; - - for(int i=0; i<624; i++){ - uint32_t x; - - // concating the MSB and LSB from next - if(i+1<624){ - x = (state[i] & 0x80000000) | (state[(i+1)] & 0x7FFFFFFF); - }else{ - x = (state[i] & 0x80000000) | (newstate[(i+1)%624] & 0x7FFFFFFF); - } - - // does the *A part - if(x&1){ - x = (x>>1) ^ 0x9908B0DFUL; - }else{ - x=x>>1; - } - - uint32_t y; - if(i+397<624){ - y = state[i+397] ^ x; - }else{ - y = newstate[(i+397) % 624] ^ x; - } - newstate[i] = y; - } - - return newstate; -} - -std::array mt19937_temper(std::array state){ - std::array tempered; - - for(int i=0; i<624; i++){ - - uint32_t y = state[i]; - y = y ^ (y >> 11); - y = y ^ ((y << 7) & 0x9D2C5680UL); - y = y ^ ((y << 15) & 0xEFC60000UL); - tempered[i] = y ^ (y >> 18); - } - - return tempered; -} namespace splat { - class mt19937_generator : public PRNG { - public: - mt19937_generator(uint32_t genSeed) : PRNG(genSeed) { + + std::array mt19937_init(uint32_t seed){ + + std::array state; + + state[0] = seed; + + for(int i=1; i<624; i++){ + state[i]= 1812433253*(state[i-1] ^ (state[i-1] >> 30)) + i; + } + + return state; + } + + std::array mt19937_twist(const std::array& state){ + + std::array newstate; + + for(int i=0; i<624; i++){ + uint32_t x; + + // concating the MSB and LSB from next + if(i+1<624){ + x = (state[i] & 0x80000000) | (state[(i+1)] & 0x7FFFFFFF); + }else{ + x = (state[i] & 0x80000000) | (newstate[(i+1)%624] & 0x7FFFFFFF); + } + + // does the *A part + if(x&1){ + x = (x>>1) ^ 0x9908B0DFUL; + }else{ + x=x>>1; + } + + uint32_t y; + if(i+397<624){ + y = state[i+397] ^ x; + }else{ + y = newstate[(i+397) % 624] ^ x; + } + newstate[i] = y; + } + + return newstate; + } + + std::array mt19937_temper(const std::array& state){ + std::array tempered; + + for(int i=0; i<624; i++){ + + uint32_t y = state[i]; + y = y ^ (y >> 11); + y = y ^ ((y << 7) & 0x9D2C5680UL); + y = y ^ ((y << 15) & 0xEFC60000UL); + tempered[i] = y ^ (y >> 18); + } + + return tempered; + } + + + mt19937_generator::mt19937_generator(uint32_t genSeed) : PRNG(genSeed) { state = mt19937_init(seed); nextblock(); - } - uint32_t generate() override { + } + + void mt19937_generator::nextblock() { + state = mt19937_twist(state); + random_values = mt19937_temper(state); + position = 0; + } + + uint32_t mt19937_generator::generate() { uint32_t generated = random_values[position]; position++; if(position>=624){ nextblock(); } return generated; - } - std::string getName() override { - return "mt19937-32"; - } - private: - std::array state; - std::array random_values; - int position; - // goes to next block of 624 values - void nextblock() { - state = mt19937_twist(state); - random_values = mt19937_temper(state); - position = 0; - } - }; -} \ No newline at end of file + } + + std::string mt19937_generator::getName() { + return "mt19937-32 test"; + } + +} + +// namespace splat { +// class mt19937_generator : public PRNG { +// public: +// mt19937_generator(uint32_t genSeed) : PRNG(genSeed) { +// state = mt19937_init(seed); +// nextblock(); +// } +// uint32_t generate() override { +// uint32_t generated = random_values[position]; +// position++; +// if(position>=624){ +// nextblock(); +// } +// return generated; +// } +// std::string getName() override { +// return "mt19937-32"; +// } +// private: +// std::array state; +// std::array random_values; +// int position; +// // goes to next block of 624 values +// void nextblock() { +// state = mt19937_twist(state); +// random_values = mt19937_temper(state); +// position = 0; +// } +// }; +// } \ No newline at end of file diff --git a/rng/rng/generators/mt19937.h b/rng/rng/generators/mt19937.h new file mode 100644 index 0000000..c7e374a --- /dev/null +++ b/rng/rng/generators/mt19937.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include +#include +#include "generator.h" + + +namespace splat { + + std::array mt19937_init(uint32_t seed); + std::array mt19937_twist(const std::array& state); + std::array mt19937_temper(const std::array& state); + + + class mt19937_generator : public PRNG { + public: + explicit mt19937_generator(uint32_t seed); + uint32_t generate(); + std::string getName(); + + private: + std::array state; + std::array random_values; + size_t position = 624; + + void nextblock(); + }; +} \ No newline at end of file diff --git a/rng/rng/main.cpp b/rng/rng/main.cpp index c943570..24904b5 100644 --- a/rng/rng/main.cpp +++ b/rng/rng/main.cpp @@ -57,7 +57,7 @@ namespace splat { int main(int argc, const char * argv[]) { - int seed = 235211213; + int seed = 13928981231238123; int blocksgenerated = 1000000; std::vector> generators = splat::getAllGenerators(1238124); @@ -76,7 +76,7 @@ int main(int argc, const char * argv[]) { while(namestr.length() < 30){ namestr.append(" "); } - std::cout << " - " << namestr << " = " << (test->passed()?"PASS":"FAIL") << " ("<< std::fixed << std::setprecision(8) << test->value() <<")\n"; + std::cout << " - " << namestr << " = " << (test->passed()?"✅ PASS":"❌ FAIL") << " ("<< std::fixed << std::setprecision(8) << test->value() <<")\n"; } } diff --git a/rng/rng/main.o b/rng/rng/main.o index 3691112252b63aaff2476672f99b0a2e97bc0f31..e7aef3974a4ff07f15ecb8db55d1f46e4026594e 100755 GIT binary patch delta 54598 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 be(z)6ecRgaHEWHgy!rO2kyStC_d5RvMkt^P diff --git a/rng/rng/readme.md b/rng/rng/readme.md index e5b5843..7b0005c 100644 --- a/rng/rng/readme.md +++ b/rng/rng/readme.md @@ -1,2 +1,11 @@ -🫟 Splatter -c++ rng library with generators and tests \ No newline at end of file +🫟 Splat +c++ rng library with generators and tests + + + +todo: + [] add all nist tests + [] add all diehard(er) tests + [] add all TestUO1 tests + [] implement hashing algorithms and more complex generators + [] make it multi threaded \ No newline at end of file diff --git a/rng/rng/rng.h b/rng/rng/rng.h index ca4b9d5..521bd4b 100644 --- a/rng/rng/rng.h +++ b/rng/rng/rng.h @@ -14,4 +14,5 @@ #include #include #include -#include \ No newline at end of file +#include +#include \ No newline at end of file diff --git a/rng/rng/web/.gitignore b/rng/rng/web/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/rng/rng/web/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/rng/rng/web/README.md b/rng/rng/web/README.md new file mode 100644 index 0000000..7059a96 --- /dev/null +++ b/rng/rng/web/README.md @@ -0,0 +1,12 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. diff --git a/rng/rng/web/eslint.config.js b/rng/rng/web/eslint.config.js new file mode 100644 index 0000000..cee1e2c --- /dev/null +++ b/rng/rng/web/eslint.config.js @@ -0,0 +1,29 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{js,jsx}'], + extends: [ + js.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + rules: { + 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], + }, + }, +]) diff --git a/rng/rng/web/index.html b/rng/rng/web/index.html new file mode 100644 index 0000000..19e0028 --- /dev/null +++ b/rng/rng/web/index.html @@ -0,0 +1,14 @@ + + + + + + + 🫟 Splat + + +
+ + + + diff --git a/rng/rng/web/package-lock.json b/rng/rng/web/package-lock.json new file mode 100644 index 0000000..73e810a --- /dev/null +++ b/rng/rng/web/package-lock.json @@ -0,0 +1,3365 @@ +{ + "name": "web", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web", + "version": "0.0.0", + "dependencies": { + "@tailwindcss/vite": "^4.1.11", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "tailwindcss": "^4.1.11" + }, + "devDependencies": { + "@eslint/js": "^9.29.0", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.5.2", + "eslint": "^9.29.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.2.0", + "vite": "^7.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz", + "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz", + "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz", + "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", + "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz", + "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz", + "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz", + "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz", + "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz", + "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz", + "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz", + "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz", + "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz", + "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz", + "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz", + "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz", + "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz", + "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz", + "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz", + "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz", + "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz", + "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz", + "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz", + "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz", + "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", + "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz", + "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-x64": "4.1.11", + "@tailwindcss/oxide-freebsd-x64": "4.1.11", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-x64-musl": "4.1.11", + "@tailwindcss/oxide-wasm32-wasi": "4.1.11", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz", + "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz", + "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz", + "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz", + "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz", + "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz", + "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz", + "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz", + "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz", + "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz", + "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@emnapi/wasi-threads": "^1.0.2", + "@napi-rs/wasm-runtime": "^0.2.11", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz", + "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz", + "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.11.tgz", + "integrity": "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.11", + "@tailwindcss/oxide": "4.1.11", + "tailwindcss": "4.1.11" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.1.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", + "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", + "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.6.0.tgz", + "integrity": "sha512-5Kgff+m8e2PB+9j51eGHEpn5kUzRKH2Ry0qGoe8ItJg7pqnkPrYPkDQZGgGmTa0EGarHrkjLvOdU3b1fzI8otQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.19", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001726", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz", + "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.179", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.179.tgz", + "integrity": "sha512-UWKi/EbBopgfFsc5k61wFpV7WrnnSlSzW/e2XcBmS6qKYTivZlLtoll5/rdqRTxGglGHkmkW0j0pFNJG10EUIQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz", + "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.30.1", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.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, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "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==", + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "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==", + "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==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz", + "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.44.2", + "@rollup/rollup-android-arm64": "4.44.2", + "@rollup/rollup-darwin-arm64": "4.44.2", + "@rollup/rollup-darwin-x64": "4.44.2", + "@rollup/rollup-freebsd-arm64": "4.44.2", + "@rollup/rollup-freebsd-x64": "4.44.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.44.2", + "@rollup/rollup-linux-arm-musleabihf": "4.44.2", + "@rollup/rollup-linux-arm64-gnu": "4.44.2", + "@rollup/rollup-linux-arm64-musl": "4.44.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.44.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-musl": "4.44.2", + "@rollup/rollup-linux-s390x-gnu": "4.44.2", + "@rollup/rollup-linux-x64-gnu": "4.44.2", + "@rollup/rollup-linux-x64-musl": "4.44.2", + "@rollup/rollup-win32-arm64-msvc": "4.44.2", + "@rollup/rollup-win32-ia32-msvc": "4.44.2", + "@rollup/rollup-win32-x64-msvc": "4.44.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", + "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.2.tgz", + "integrity": "sha512-hxdyZDY1CM6SNpKI4w4lcUc3Mtkd9ej4ECWVHSMrOdSinVc2zYOAppHeGc/hzmRo3pxM5blMzkuWHOJA/3NiFw==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.2", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "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/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/rng/rng/web/package.json b/rng/rng/web/package.json new file mode 100644 index 0000000..37f4cfa --- /dev/null +++ b/rng/rng/web/package.json @@ -0,0 +1,29 @@ +{ + "name": "web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@tailwindcss/vite": "^4.1.11", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "tailwindcss": "^4.1.11" + }, + "devDependencies": { + "@eslint/js": "^9.29.0", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.5.2", + "eslint": "^9.29.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.2.0", + "vite": "^7.0.0" + } +} diff --git a/rng/rng/web/public/libs/splat.js b/rng/rng/web/public/libs/splat.js new file mode 100644 index 0000000..a3aac84 --- /dev/null +++ b/rng/rng/web/public/libs/splat.js @@ -0,0 +1,3595 @@ +var createModule = (() => { + var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined; + return ( +async function(moduleArg = {}) { + var moduleRtn; + +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = moduleArg; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && process.versions?.node && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +if (typeof __filename != 'undefined') { // Node + _scriptName = __filename; +} else +if (ENVIRONMENT_IS_WORKER) { + _scriptName = self.location.href; +} + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + const isNode = typeof process == 'object' && process.versions?.node && process.type != 'renderer'; + if (!isNode) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + const isNode = typeof process == 'object' && process.versions?.node && process.type != 'renderer'; + if (isNode || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + try { + scriptDirectory = new URL('.', _scriptName).href; // includes trailing slash + } catch { + // Must be a `blob:` or `data:` URL (e.g. `blob:http://site.com/etc/etc`), we cannot + // infer anything from them. + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = console.log.bind(console); +var err = console.error.bind(console); + +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +// perform assertions in shell.js after we set up out() and err(), as otherwise +// if an assertion fails it cannot print the message + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary; + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_common.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} + +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function makeInvalidEarlyAccess(name) { + return () => assert(false, `call to '${name}' via reference taken before Wasm module initialization`); + +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + // In MODULARIZE mode the generated code runs inside a function scope and not + // the global scope, and JavaScript does not provide access to function scopes + // so we cannot dynamically modify the scrope using `defineProperty` in this + // case. + // + // In this mode we simply ignore requests for `hookGlobalSymbolAccess`. Since + // this is a debug-only feature, skipping it is not major issue. +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +// end include: runtime_debug.js +var readyPromiseResolve, readyPromiseReject; + +// Memory management + +var wasmMemory; + +var +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/** @type {!Float64Array} */ + HEAPF64; + +// BigInt64Array type is not correctly defined in closure +var +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-@type {!BigUint64Array} */ + HEAPU64; + +var runtimeInitialized = false; + + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + HEAP8 = new Int8Array(b); + HEAP16 = new Int16Array(b); + HEAPU8 = new Uint8Array(b); + HEAPU16 = new Uint16Array(b); + HEAP32 = new Int32Array(b); + HEAPU32 = new Uint32Array(b); + HEAPF32 = new Float32Array(b); + HEAPF64 = new Float64Array(b); + HEAP64 = new BigInt64Array(b); + HEAPU64 = new BigUint64Array(b); +} + +// include: memoryprofiler.js +// end include: memoryprofiler.js +// end include: runtime_common.js +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + // Begin ATPRERUNS hooks + callRuntimeCallbacks(onPreRuns); + // End ATPRERUNS hooks +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + // No ATINITS hooks + + wasmExports['__wasm_call_ctors'](); + + // No ATPOSTCTORS hooks +} + +function postRun() { + checkStackCookie(); + // PThreads reuse the runtime from the main thread. + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + // Begin ATPOSTRUNS hooks + callRuntimeCallbacks(onPostRuns); + // End ATPOSTRUNS hooks +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + readyPromiseReject?.(e); + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +// show errors on likely calls to FS when it was not included +var FS = { + error() { + abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM'); + }, + init() { FS.error() }, + createDataFile() { FS.error() }, + createPreloadedFile() { FS.error() }, + createLazyFile() { FS.error() }, + open() { FS.error() }, + mkdev() { FS.error() }, + registerDevice() { FS.error() }, + analyzePath() { FS.error() }, + + ErrnoError() { FS.error() }, +}; + + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('splat.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + wasmTable = wasmExports['__indirect_function_table']; + + assert(wasmTable, 'table not found in wasm exports'); + + assignWasmExports(wasmExports); + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + resolve(receiveInstance(mod, inst)); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.push(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.push(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + var __abort_js = () => + abort('native code called abort()'); + + var AsciiToString = (ptr) => { + var str = ''; + while (1) { + var ch = HEAPU8[ptr++]; + if (!ch) return str; + str += String.fromCharCode(ch); + } + }; + + var awaitingDependencies = { + }; + + var registeredTypes = { + }; + + var typeDependencies = { + }; + + var BindingError = class BindingError extends Error { constructor(message) { super(message); this.name = 'BindingError'; }}; + var throwBindingError = (message) => { throw new BindingError(message); }; + /** @param {Object=} options */ + function sharedRegisterType(rawType, registeredInstance, options = {}) { + var name = registeredInstance.name; + if (!rawType) { + throwBindingError(`type "${name}" must have a positive integer typeid pointer`); + } + if (registeredTypes.hasOwnProperty(rawType)) { + if (options.ignoreDuplicateRegistrations) { + return; + } else { + throwBindingError(`Cannot register type '${name}' twice`); + } + } + + registeredTypes[rawType] = registeredInstance; + delete typeDependencies[rawType]; + + if (awaitingDependencies.hasOwnProperty(rawType)) { + var callbacks = awaitingDependencies[rawType]; + delete awaitingDependencies[rawType]; + callbacks.forEach((cb) => cb()); + } + } + /** @param {Object=} options */ + function registerType(rawType, registeredInstance, options = {}) { + if (registeredInstance.argPackAdvance === undefined) { + throw new TypeError('registerType registeredInstance requires argPackAdvance'); + } + return sharedRegisterType(rawType, registeredInstance, options); + } + + var integerReadValueFromPointer = (name, width, signed) => { + // integers are quite common, so generate very specialized functions + switch (width) { + case 1: return signed ? + (pointer) => HEAP8[pointer] : + (pointer) => HEAPU8[pointer]; + case 2: return signed ? + (pointer) => HEAP16[((pointer)>>1)] : + (pointer) => HEAPU16[((pointer)>>1)] + case 4: return signed ? + (pointer) => HEAP32[((pointer)>>2)] : + (pointer) => HEAPU32[((pointer)>>2)] + case 8: return signed ? + (pointer) => HEAP64[((pointer)>>3)] : + (pointer) => HEAPU64[((pointer)>>3)] + default: + throw new TypeError(`invalid integer width (${width}): ${name}`); + } + }; + + var embindRepr = (v) => { + if (v === null) { + return 'null'; + } + var t = typeof v; + if (t === 'object' || t === 'array' || t === 'function') { + return v.toString(); + } else { + return '' + v; + } + }; + + var assertIntegerRange = (typeName, value, minRange, maxRange) => { + if (value < minRange || value > maxRange) { + throw new TypeError(`Passing a number "${embindRepr(value)}" from JS side to C/C++ side to an argument of type "${typeName}", which is outside the valid range [${minRange}, ${maxRange}]!`); + } + }; + /** @suppress {globalThis} */ + var __embind_register_bigint = (primitiveType, name, size, minRange, maxRange) => { + name = AsciiToString(name); + + const isUnsignedType = minRange === 0n; + + let fromWireType = (value) => value; + if (isUnsignedType) { + // uint64 get converted to int64 in ABI, fix them up like we do for 32-bit integers. + const bitSize = size * 8; + fromWireType = (value) => { + return BigInt.asUintN(bitSize, value); + } + maxRange = fromWireType(maxRange); + } + + registerType(primitiveType, { + name, + 'fromWireType': fromWireType, + 'toWireType': (destructors, value) => { + if (typeof value == "number") { + value = BigInt(value); + } + else if (typeof value != "bigint") { + throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${this.name}`); + } + assertIntegerRange(name, value, minRange, maxRange); + return value; + }, + argPackAdvance: GenericWireTypeSize, + 'readValueFromPointer': integerReadValueFromPointer(name, size, !isUnsignedType), + destructorFunction: null, // This type does not need a destructor + }); + }; + + + + var GenericWireTypeSize = 8; + /** @suppress {globalThis} */ + var __embind_register_bool = (rawType, name, trueValue, falseValue) => { + name = AsciiToString(name); + registerType(rawType, { + name, + 'fromWireType': function(wt) { + // ambiguous emscripten ABI: sometimes return values are + // true or false, and sometimes integers (0 or 1) + return !!wt; + }, + 'toWireType': function(destructors, o) { + return o ? trueValue : falseValue; + }, + argPackAdvance: GenericWireTypeSize, + 'readValueFromPointer': function(pointer) { + return this['fromWireType'](HEAPU8[pointer]); + }, + destructorFunction: null, // This type does not need a destructor + }); + }; + + + + var shallowCopyInternalPointer = (o) => { + return { + count: o.count, + deleteScheduled: o.deleteScheduled, + preservePointerOnDelete: o.preservePointerOnDelete, + ptr: o.ptr, + ptrType: o.ptrType, + smartPtr: o.smartPtr, + smartPtrType: o.smartPtrType, + }; + }; + + var throwInstanceAlreadyDeleted = (obj) => { + function getInstanceTypeName(handle) { + return handle.$$.ptrType.registeredClass.name; + } + throwBindingError(getInstanceTypeName(obj) + ' instance already deleted'); + }; + + var finalizationRegistry = false; + + var detachFinalizer = (handle) => {}; + + var runDestructor = ($$) => { + if ($$.smartPtr) { + $$.smartPtrType.rawDestructor($$.smartPtr); + } else { + $$.ptrType.registeredClass.rawDestructor($$.ptr); + } + }; + var releaseClassHandle = ($$) => { + $$.count.value -= 1; + var toDelete = 0 === $$.count.value; + if (toDelete) { + runDestructor($$); + } + }; + + var downcastPointer = (ptr, ptrClass, desiredClass) => { + if (ptrClass === desiredClass) { + return ptr; + } + if (undefined === desiredClass.baseClass) { + return null; // no conversion + } + + var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass); + if (rv === null) { + return null; + } + return desiredClass.downcast(rv); + }; + + var registeredPointers = { + }; + + var registeredInstances = { + }; + + var getBasestPointer = (class_, ptr) => { + if (ptr === undefined) { + throwBindingError('ptr should not be undefined'); + } + while (class_.baseClass) { + ptr = class_.upcast(ptr); + class_ = class_.baseClass; + } + return ptr; + }; + var getInheritedInstance = (class_, ptr) => { + ptr = getBasestPointer(class_, ptr); + return registeredInstances[ptr]; + }; + + var InternalError = class InternalError extends Error { constructor(message) { super(message); this.name = 'InternalError'; }}; + var throwInternalError = (message) => { throw new InternalError(message); }; + + var makeClassHandle = (prototype, record) => { + if (!record.ptrType || !record.ptr) { + throwInternalError('makeClassHandle requires ptr and ptrType'); + } + var hasSmartPtrType = !!record.smartPtrType; + var hasSmartPtr = !!record.smartPtr; + if (hasSmartPtrType !== hasSmartPtr) { + throwInternalError('Both smartPtrType and smartPtr must be specified'); + } + record.count = { value: 1 }; + return attachFinalizer(Object.create(prototype, { + $$: { + value: record, + writable: true, + }, + })); + }; + /** @suppress {globalThis} */ + function RegisteredPointer_fromWireType(ptr) { + // ptr is a raw pointer (or a raw smartpointer) + + // rawPointer is a maybe-null raw pointer + var rawPointer = this.getPointee(ptr); + if (!rawPointer) { + this.destructor(ptr); + return null; + } + + var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer); + if (undefined !== registeredInstance) { + // JS object has been neutered, time to repopulate it + if (0 === registeredInstance.$$.count.value) { + registeredInstance.$$.ptr = rawPointer; + registeredInstance.$$.smartPtr = ptr; + return registeredInstance['clone'](); + } else { + // else, just increment reference count on existing object + // it already has a reference to the smart pointer + var rv = registeredInstance['clone'](); + this.destructor(ptr); + return rv; + } + } + + function makeDefaultHandle() { + if (this.isSmartPointer) { + return makeClassHandle(this.registeredClass.instancePrototype, { + ptrType: this.pointeeType, + ptr: rawPointer, + smartPtrType: this, + smartPtr: ptr, + }); + } else { + return makeClassHandle(this.registeredClass.instancePrototype, { + ptrType: this, + ptr, + }); + } + } + + var actualType = this.registeredClass.getActualType(rawPointer); + var registeredPointerRecord = registeredPointers[actualType]; + if (!registeredPointerRecord) { + return makeDefaultHandle.call(this); + } + + var toType; + if (this.isConst) { + toType = registeredPointerRecord.constPointerType; + } else { + toType = registeredPointerRecord.pointerType; + } + var dp = downcastPointer( + rawPointer, + this.registeredClass, + toType.registeredClass); + if (dp === null) { + return makeDefaultHandle.call(this); + } + if (this.isSmartPointer) { + return makeClassHandle(toType.registeredClass.instancePrototype, { + ptrType: toType, + ptr: dp, + smartPtrType: this, + smartPtr: ptr, + }); + } else { + return makeClassHandle(toType.registeredClass.instancePrototype, { + ptrType: toType, + ptr: dp, + }); + } + } + var attachFinalizer = (handle) => { + if ('undefined' === typeof FinalizationRegistry) { + attachFinalizer = (handle) => handle; + return handle; + } + // If the running environment has a FinalizationRegistry (see + // https://github.com/tc39/proposal-weakrefs), then attach finalizers + // for class handles. We check for the presence of FinalizationRegistry + // at run-time, not build-time. + finalizationRegistry = new FinalizationRegistry((info) => { + console.warn(info.leakWarning); + releaseClassHandle(info.$$); + }); + attachFinalizer = (handle) => { + var $$ = handle.$$; + var hasSmartPtr = !!$$.smartPtr; + if (hasSmartPtr) { + // We should not call the destructor on raw pointers in case other code expects the pointee to live + var info = { $$: $$ }; + // Create a warning as an Error instance in advance so that we can store + // the current stacktrace and point to it when / if a leak is detected. + // This is more useful than the empty stacktrace of `FinalizationRegistry` + // callback. + var cls = $$.ptrType.registeredClass; + var err = new Error(`Embind found a leaked C++ instance ${cls.name} <${ptrToString($$.ptr)}>.\n` + + "We'll free it automatically in this case, but this functionality is not reliable across various environments.\n" + + "Make sure to invoke .delete() manually once you're done with the instance instead.\n" + + "Originally allocated"); // `.stack` will add "at ..." after this sentence + if ('captureStackTrace' in Error) { + Error.captureStackTrace(err, RegisteredPointer_fromWireType); + } + info.leakWarning = err.stack.replace(/^Error: /, ''); + finalizationRegistry.register(handle, info, handle); + } + return handle; + }; + detachFinalizer = (handle) => finalizationRegistry.unregister(handle); + return attachFinalizer(handle); + }; + + + + + var deletionQueue = []; + var flushPendingDeletes = () => { + while (deletionQueue.length) { + var obj = deletionQueue.pop(); + obj.$$.deleteScheduled = false; + obj['delete'](); + } + }; + + var delayFunction; + var init_ClassHandle = () => { + let proto = ClassHandle.prototype; + + Object.assign(proto, { + "isAliasOf"(other) { + if (!(this instanceof ClassHandle)) { + return false; + } + if (!(other instanceof ClassHandle)) { + return false; + } + + var leftClass = this.$$.ptrType.registeredClass; + var left = this.$$.ptr; + other.$$ = /** @type {Object} */ (other.$$); + var rightClass = other.$$.ptrType.registeredClass; + var right = other.$$.ptr; + + while (leftClass.baseClass) { + left = leftClass.upcast(left); + leftClass = leftClass.baseClass; + } + + while (rightClass.baseClass) { + right = rightClass.upcast(right); + rightClass = rightClass.baseClass; + } + + return leftClass === rightClass && left === right; + }, + + "clone"() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this); + } + + if (this.$$.preservePointerOnDelete) { + this.$$.count.value += 1; + return this; + } else { + var clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), { + $$: { + value: shallowCopyInternalPointer(this.$$), + } + })); + + clone.$$.count.value += 1; + clone.$$.deleteScheduled = false; + return clone; + } + }, + + "delete"() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this); + } + + if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { + throwBindingError('Object already scheduled for deletion'); + } + + detachFinalizer(this); + releaseClassHandle(this.$$); + + if (!this.$$.preservePointerOnDelete) { + this.$$.smartPtr = undefined; + this.$$.ptr = undefined; + } + }, + + "isDeleted"() { + return !this.$$.ptr; + }, + + "deleteLater"() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this); + } + if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { + throwBindingError('Object already scheduled for deletion'); + } + deletionQueue.push(this); + if (deletionQueue.length === 1 && delayFunction) { + delayFunction(flushPendingDeletes); + } + this.$$.deleteScheduled = true; + return this; + }, + }); + + // Support `using ...` from https://github.com/tc39/proposal-explicit-resource-management. + const symbolDispose = Symbol.dispose; + if (symbolDispose) { + proto[symbolDispose] = proto['delete']; + } + }; + /** @constructor */ + function ClassHandle() { + } + + var createNamedFunction = (name, func) => Object.defineProperty(func, 'name', { value: name }); + + + var ensureOverloadTable = (proto, methodName, humanName) => { + if (undefined === proto[methodName].overloadTable) { + var prevFunc = proto[methodName]; + // Inject an overload resolver function that routes to the appropriate overload based on the number of arguments. + proto[methodName] = function(...args) { + // TODO This check can be removed in -O3 level "unsafe" optimizations. + if (!proto[methodName].overloadTable.hasOwnProperty(args.length)) { + throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`); + } + return proto[methodName].overloadTable[args.length].apply(this, args); + }; + // Move the previous function into the overload table. + proto[methodName].overloadTable = []; + proto[methodName].overloadTable[prevFunc.argCount] = prevFunc; + } + }; + + /** @param {number=} numArguments */ + var exposePublicSymbol = (name, value, numArguments) => { + if (Module.hasOwnProperty(name)) { + if (undefined === numArguments || (undefined !== Module[name].overloadTable && undefined !== Module[name].overloadTable[numArguments])) { + throwBindingError(`Cannot register public name '${name}' twice`); + } + + // We are exposing a function with the same name as an existing function. Create an overload table and a function selector + // that routes between the two. + ensureOverloadTable(Module, name, name); + if (Module[name].overloadTable.hasOwnProperty(numArguments)) { + throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`); + } + // Add the new function into the overload table. + Module[name].overloadTable[numArguments] = value; + } else { + Module[name] = value; + Module[name].argCount = numArguments; + } + }; + + var char_0 = 48; + + var char_9 = 57; + var makeLegalFunctionName = (name) => { + assert(typeof name === 'string'); + name = name.replace(/[^a-zA-Z0-9_]/g, '$'); + var f = name.charCodeAt(0); + if (f >= char_0 && f <= char_9) { + return `_${name}`; + } + return name; + }; + + + /** @constructor */ + function RegisteredClass(name, + constructor, + instancePrototype, + rawDestructor, + baseClass, + getActualType, + upcast, + downcast) { + this.name = name; + this.constructor = constructor; + this.instancePrototype = instancePrototype; + this.rawDestructor = rawDestructor; + this.baseClass = baseClass; + this.getActualType = getActualType; + this.upcast = upcast; + this.downcast = downcast; + this.pureVirtualFunctions = []; + } + + + var upcastPointer = (ptr, ptrClass, desiredClass) => { + while (ptrClass !== desiredClass) { + if (!ptrClass.upcast) { + throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`); + } + ptr = ptrClass.upcast(ptr); + ptrClass = ptrClass.baseClass; + } + return ptr; + }; + + /** @suppress {globalThis} */ + function constNoSmartPtrRawPointerToWireType(destructors, handle) { + if (handle === null) { + if (this.isReference) { + throwBindingError(`null is not a valid ${this.name}`); + } + return 0; + } + + if (!handle.$$) { + throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`); + } + if (!handle.$$.ptr) { + throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`); + } + var handleClass = handle.$$.ptrType.registeredClass; + var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + return ptr; + } + + + /** @suppress {globalThis} */ + function genericPointerToWireType(destructors, handle) { + var ptr; + if (handle === null) { + if (this.isReference) { + throwBindingError(`null is not a valid ${this.name}`); + } + + if (this.isSmartPointer) { + ptr = this.rawConstructor(); + if (destructors !== null) { + destructors.push(this.rawDestructor, ptr); + } + return ptr; + } else { + return 0; + } + } + + if (!handle || !handle.$$) { + throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`); + } + if (!handle.$$.ptr) { + throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`); + } + if (!this.isConst && handle.$$.ptrType.isConst) { + throwBindingError(`Cannot convert argument of type ${(handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name)} to parameter type ${this.name}`); + } + var handleClass = handle.$$.ptrType.registeredClass; + ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + + if (this.isSmartPointer) { + // TODO: this is not strictly true + // We could support BY_EMVAL conversions from raw pointers to smart pointers + // because the smart pointer can hold a reference to the handle + if (undefined === handle.$$.smartPtr) { + throwBindingError('Passing raw pointer to smart pointer is illegal'); + } + + switch (this.sharingPolicy) { + case 0: // NONE + // no upcasting + if (handle.$$.smartPtrType === this) { + ptr = handle.$$.smartPtr; + } else { + throwBindingError(`Cannot convert argument of type ${(handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name)} to parameter type ${this.name}`); + } + break; + + case 1: // INTRUSIVE + ptr = handle.$$.smartPtr; + break; + + case 2: // BY_EMVAL + if (handle.$$.smartPtrType === this) { + ptr = handle.$$.smartPtr; + } else { + var clonedHandle = handle['clone'](); + ptr = this.rawShare( + ptr, + Emval.toHandle(() => clonedHandle['delete']()) + ); + if (destructors !== null) { + destructors.push(this.rawDestructor, ptr); + } + } + break; + + default: + throwBindingError('Unsupporting sharing policy'); + } + } + return ptr; + } + + + + /** @suppress {globalThis} */ + function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) { + if (handle === null) { + if (this.isReference) { + throwBindingError(`null is not a valid ${this.name}`); + } + return 0; + } + + if (!handle.$$) { + throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`); + } + if (!handle.$$.ptr) { + throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`); + } + if (handle.$$.ptrType.isConst) { + throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`); + } + var handleClass = handle.$$.ptrType.registeredClass; + var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + return ptr; + } + + + /** @suppress {globalThis} */ + function readPointer(pointer) { + return this['fromWireType'](HEAPU32[((pointer)>>2)]); + } + + + var init_RegisteredPointer = () => { + Object.assign(RegisteredPointer.prototype, { + getPointee(ptr) { + if (this.rawGetPointee) { + ptr = this.rawGetPointee(ptr); + } + return ptr; + }, + destructor(ptr) { + this.rawDestructor?.(ptr); + }, + argPackAdvance: GenericWireTypeSize, + 'readValueFromPointer': readPointer, + 'fromWireType': RegisteredPointer_fromWireType, + }); + }; + /** @constructor + @param {*=} pointeeType, + @param {*=} sharingPolicy, + @param {*=} rawGetPointee, + @param {*=} rawConstructor, + @param {*=} rawShare, + @param {*=} rawDestructor, + */ + function RegisteredPointer( + name, + registeredClass, + isReference, + isConst, + + // smart pointer properties + isSmartPointer, + pointeeType, + sharingPolicy, + rawGetPointee, + rawConstructor, + rawShare, + rawDestructor + ) { + this.name = name; + this.registeredClass = registeredClass; + this.isReference = isReference; + this.isConst = isConst; + + // smart pointer properties + this.isSmartPointer = isSmartPointer; + this.pointeeType = pointeeType; + this.sharingPolicy = sharingPolicy; + this.rawGetPointee = rawGetPointee; + this.rawConstructor = rawConstructor; + this.rawShare = rawShare; + this.rawDestructor = rawDestructor; + + if (!isSmartPointer && registeredClass.baseClass === undefined) { + if (isConst) { + this['toWireType'] = constNoSmartPtrRawPointerToWireType; + this.destructorFunction = null; + } else { + this['toWireType'] = nonConstNoSmartPtrRawPointerToWireType; + this.destructorFunction = null; + } + } else { + this['toWireType'] = genericPointerToWireType; + // Here we must leave this.destructorFunction undefined, since whether genericPointerToWireType returns + // a pointer that needs to be freed up is runtime-dependent, and cannot be evaluated at registration time. + // TODO: Create an alternative mechanism that allows removing the use of var destructors = []; array in + // craftInvokerFunction altogether. + } + } + + /** @param {number=} numArguments */ + var replacePublicSymbol = (name, value, numArguments) => { + if (!Module.hasOwnProperty(name)) { + throwInternalError('Replacing nonexistent public symbol'); + } + // If there's an overload table for this symbol, replace the symbol in the overload table instead. + if (undefined !== Module[name].overloadTable && undefined !== numArguments) { + Module[name].overloadTable[numArguments] = value; + } else { + Module[name] = value; + Module[name].argCount = numArguments; + } + }; + + + + var wasmTableMirror = []; + + /** @type {WebAssembly.Table} */ + var wasmTable; + var getWasmTableEntry = (funcPtr) => { + var func = wasmTableMirror[funcPtr]; + if (!func) { + /** @suppress {checkTypes} */ + wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr); + } + /** @suppress {checkTypes} */ + assert(wasmTable.get(funcPtr) == func, 'JavaScript-side Wasm function table mirror is out of date!'); + return func; + }; + var embind__requireFunction = (signature, rawFunction, isAsync = false) => { + assert(!isAsync, 'Async bindings are only supported with JSPI.'); + + signature = AsciiToString(signature); + + function makeDynCaller() { + var rtn = getWasmTableEntry(rawFunction); + return rtn; + } + + var fp = makeDynCaller(); + if (typeof fp != 'function') { + throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`); + } + return fp; + }; + + + + class UnboundTypeError extends Error {} + + + + var getTypeName = (type) => { + var ptr = ___getTypeName(type); + var rv = AsciiToString(ptr); + _free(ptr); + return rv; + }; + var throwUnboundTypeError = (message, types) => { + var unboundTypes = []; + var seen = {}; + function visit(type) { + if (seen[type]) { + return; + } + if (registeredTypes[type]) { + return; + } + if (typeDependencies[type]) { + typeDependencies[type].forEach(visit); + return; + } + unboundTypes.push(type); + seen[type] = true; + } + types.forEach(visit); + + throw new UnboundTypeError(`${message}: ` + unboundTypes.map(getTypeName).join([', '])); + }; + + + + + var whenDependentTypesAreResolved = (myTypes, dependentTypes, getTypeConverters) => { + myTypes.forEach((type) => typeDependencies[type] = dependentTypes); + + function onComplete(typeConverters) { + var myTypeConverters = getTypeConverters(typeConverters); + if (myTypeConverters.length !== myTypes.length) { + throwInternalError('Mismatched type converter count'); + } + for (var i = 0; i < myTypes.length; ++i) { + registerType(myTypes[i], myTypeConverters[i]); + } + } + + var typeConverters = new Array(dependentTypes.length); + var unregisteredTypes = []; + var registered = 0; + dependentTypes.forEach((dt, i) => { + if (registeredTypes.hasOwnProperty(dt)) { + typeConverters[i] = registeredTypes[dt]; + } else { + unregisteredTypes.push(dt); + if (!awaitingDependencies.hasOwnProperty(dt)) { + awaitingDependencies[dt] = []; + } + awaitingDependencies[dt].push(() => { + typeConverters[i] = registeredTypes[dt]; + ++registered; + if (registered === unregisteredTypes.length) { + onComplete(typeConverters); + } + }); + } + }); + if (0 === unregisteredTypes.length) { + onComplete(typeConverters); + } + }; + var __embind_register_class = (rawType, + rawPointerType, + rawConstPointerType, + baseClassRawType, + getActualTypeSignature, + getActualType, + upcastSignature, + upcast, + downcastSignature, + downcast, + name, + destructorSignature, + rawDestructor) => { + name = AsciiToString(name); + getActualType = embind__requireFunction(getActualTypeSignature, getActualType); + upcast &&= embind__requireFunction(upcastSignature, upcast); + downcast &&= embind__requireFunction(downcastSignature, downcast); + rawDestructor = embind__requireFunction(destructorSignature, rawDestructor); + var legalFunctionName = makeLegalFunctionName(name); + + exposePublicSymbol(legalFunctionName, function() { + // this code cannot run if baseClassRawType is zero + throwUnboundTypeError(`Cannot construct ${name} due to unbound types`, [baseClassRawType]); + }); + + whenDependentTypesAreResolved( + [rawType, rawPointerType, rawConstPointerType], + baseClassRawType ? [baseClassRawType] : [], + (base) => { + base = base[0]; + + var baseClass; + var basePrototype; + if (baseClassRawType) { + baseClass = base.registeredClass; + basePrototype = baseClass.instancePrototype; + } else { + basePrototype = ClassHandle.prototype; + } + + var constructor = createNamedFunction(name, function(...args) { + if (Object.getPrototypeOf(this) !== instancePrototype) { + throw new BindingError(`Use 'new' to construct ${name}`); + } + if (undefined === registeredClass.constructor_body) { + throw new BindingError(`${name} has no accessible constructor`); + } + var body = registeredClass.constructor_body[args.length]; + if (undefined === body) { + throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`); + } + return body.apply(this, args); + }); + + var instancePrototype = Object.create(basePrototype, { + constructor: { value: constructor }, + }); + + constructor.prototype = instancePrototype; + + var registeredClass = new RegisteredClass(name, + constructor, + instancePrototype, + rawDestructor, + baseClass, + getActualType, + upcast, + downcast); + + if (registeredClass.baseClass) { + // Keep track of class hierarchy. Used to allow sub-classes to inherit class functions. + registeredClass.baseClass.__derivedClasses ??= []; + + registeredClass.baseClass.__derivedClasses.push(registeredClass); + } + + var referenceConverter = new RegisteredPointer(name, + registeredClass, + true, + false, + false); + + var pointerConverter = new RegisteredPointer(name + '*', + registeredClass, + false, + false, + false); + + var constPointerConverter = new RegisteredPointer(name + ' const*', + registeredClass, + false, + true, + false); + + registeredPointers[rawType] = { + pointerType: pointerConverter, + constPointerType: constPointerConverter + }; + + replacePublicSymbol(legalFunctionName, constructor); + + return [referenceConverter, pointerConverter, constPointerConverter]; + } + ); + }; + + var heap32VectorToArray = (count, firstElement) => { + var array = []; + for (var i = 0; i < count; i++) { + // TODO(https://github.com/emscripten-core/emscripten/issues/17310): + // Find a way to hoist the `>> 2` or `>> 3` out of this loop. + array.push(HEAPU32[(((firstElement)+(i * 4))>>2)]); + } + return array; + }; + + + + + var runDestructors = (destructors) => { + while (destructors.length) { + var ptr = destructors.pop(); + var del = destructors.pop(); + del(ptr); + } + }; + + + function usesDestructorStack(argTypes) { + // Skip return value at index 0 - it's not deleted here. + for (var i = 1; i < argTypes.length; ++i) { + // The type does not define a destructor function - must use dynamic stack + if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) { + return true; + } + } + return false; + } + + + function checkArgCount(numArgs, minArgs, maxArgs, humanName, throwBindingError) { + if (numArgs < minArgs || numArgs > maxArgs) { + var argCountMessage = minArgs == maxArgs ? minArgs : `${minArgs} to ${maxArgs}`; + throwBindingError(`function ${humanName} called with ${numArgs} arguments, expected ${argCountMessage}`); + } + } + function createJsInvoker(argTypes, isClassMethodFunc, returns, isAsync) { + var needsDestructorStack = usesDestructorStack(argTypes); + var argCount = argTypes.length - 2; + var argsList = []; + var argsListWired = ['fn']; + if (isClassMethodFunc) { + argsListWired.push('thisWired'); + } + for (var i = 0; i < argCount; ++i) { + argsList.push(`arg${i}`) + argsListWired.push(`arg${i}Wired`) + } + argsList = argsList.join(',') + argsListWired = argsListWired.join(',') + + var invokerFnBody = `return function (${argsList}) {\n`; + + invokerFnBody += "checkArgCount(arguments.length, minArgs, maxArgs, humanName, throwBindingError);\n"; + + if (needsDestructorStack) { + invokerFnBody += "var destructors = [];\n"; + } + + var dtorStack = needsDestructorStack ? "destructors" : "null"; + var args1 = ["humanName", "throwBindingError", "invoker", "fn", "runDestructors", "retType", "classParam"]; + + if (isClassMethodFunc) { + invokerFnBody += `var thisWired = classParam['toWireType'](${dtorStack}, this);\n`; + } + + for (var i = 0; i < argCount; ++i) { + invokerFnBody += `var arg${i}Wired = argType${i}['toWireType'](${dtorStack}, arg${i});\n`; + args1.push(`argType${i}`); + } + + invokerFnBody += (returns || isAsync ? "var rv = ":"") + `invoker(${argsListWired});\n`; + + var returnVal = returns ? "rv" : ""; + + if (needsDestructorStack) { + invokerFnBody += "runDestructors(destructors);\n"; + } else { + for (var i = isClassMethodFunc?1:2; i < argTypes.length; ++i) { // Skip return value at index 0 - it's not deleted here. Also skip class type if not a method. + var paramName = (i === 1 ? "thisWired" : ("arg"+(i - 2)+"Wired")); + if (argTypes[i].destructorFunction !== null) { + invokerFnBody += `${paramName}_dtor(${paramName});\n`; + args1.push(`${paramName}_dtor`); + } + } + } + + if (returns) { + invokerFnBody += "var ret = retType['fromWireType'](rv);\n" + + "return ret;\n"; + } else { + } + + invokerFnBody += "}\n"; + + args1.push('checkArgCount', 'minArgs', 'maxArgs'); + invokerFnBody = `if (arguments.length !== ${args1.length}){ throw new Error(humanName + "Expected ${args1.length} closure arguments " + arguments.length + " given."); }\n${invokerFnBody}`; + return [args1, invokerFnBody]; + } + + function getRequiredArgCount(argTypes) { + var requiredArgCount = argTypes.length - 2; + for (var i = argTypes.length - 1; i >= 2; --i) { + if (!argTypes[i].optional) { + break; + } + requiredArgCount--; + } + return requiredArgCount; + } + + function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc, /** boolean= */ isAsync) { + // humanName: a human-readable string name for the function to be generated. + // argTypes: An array that contains the embind type objects for all types in the function signature. + // argTypes[0] is the type object for the function return value. + // argTypes[1] is the type object for function this object/class type, or null if not crafting an invoker for a class method. + // argTypes[2...] are the actual function parameters. + // classType: The embind type object for the class to be bound, or null if this is not a method of a class. + // cppInvokerFunc: JS Function object to the C++-side function that interops into C++ code. + // cppTargetFunc: Function pointer (an integer to FUNCTION_TABLE) to the target C++ function the cppInvokerFunc will end up calling. + // isAsync: Optional. If true, returns an async function. Async bindings are only supported with JSPI. + var argCount = argTypes.length; + + if (argCount < 2) { + throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!"); + } + + assert(!isAsync, 'Async bindings are only supported with JSPI.'); + var isClassMethodFunc = (argTypes[1] !== null && classType !== null); + + // Free functions with signature "void function()" do not need an invoker that marshalls between wire types. + // TODO: This omits argument count check - enable only at -O3 or similar. + // if (ENABLE_UNSAFE_OPTS && argCount == 2 && argTypes[0].name == "void" && !isClassMethodFunc) { + // return FUNCTION_TABLE[fn]; + // } + + // Determine if we need to use a dynamic stack to store the destructors for the function parameters. + // TODO: Remove this completely once all function invokers are being dynamically generated. + var needsDestructorStack = usesDestructorStack(argTypes); + + var returns = (argTypes[0].name !== 'void'); + + var expectedArgCount = argCount - 2; + var minArgs = getRequiredArgCount(argTypes); + // Builld the arguments that will be passed into the closure around the invoker + // function. + var closureArgs = [humanName, throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]]; + for (var i = 0; i < argCount - 2; ++i) { + closureArgs.push(argTypes[i+2]); + } + if (!needsDestructorStack) { + // Skip return value at index 0 - it's not deleted here. Also skip class type if not a method. + for (var i = isClassMethodFunc?1:2; i < argTypes.length; ++i) { + if (argTypes[i].destructorFunction !== null) { + closureArgs.push(argTypes[i].destructorFunction); + } + } + } + closureArgs.push(checkArgCount, minArgs, expectedArgCount); + + let [args, invokerFnBody] = createJsInvoker(argTypes, isClassMethodFunc, returns, isAsync); + var invokerFn = new Function(...args, invokerFnBody)(...closureArgs); + return createNamedFunction(humanName, invokerFn); + } + var __embind_register_class_constructor = ( + rawClassType, + argCount, + rawArgTypesAddr, + invokerSignature, + invoker, + rawConstructor + ) => { + assert(argCount > 0); + var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + invoker = embind__requireFunction(invokerSignature, invoker); + var args = [rawConstructor]; + var destructors = []; + + whenDependentTypesAreResolved([], [rawClassType], (classType) => { + classType = classType[0]; + var humanName = `constructor ${classType.name}`; + + if (undefined === classType.registeredClass.constructor_body) { + classType.registeredClass.constructor_body = []; + } + if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) { + throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount-1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`); + } + classType.registeredClass.constructor_body[argCount - 1] = () => { + throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`, rawArgTypes); + }; + + whenDependentTypesAreResolved([], rawArgTypes, (argTypes) => { + // Insert empty slot for context type (argTypes[1]). + argTypes.splice(1, 0, null); + classType.registeredClass.constructor_body[argCount - 1] = craftInvokerFunction(humanName, argTypes, null, invoker, rawConstructor); + return []; + }); + return []; + }); + }; + + + + + + + + var getFunctionName = (signature) => { + signature = signature.trim(); + const argsIndex = signature.indexOf("("); + if (argsIndex === -1) return signature; + assert(signature.endsWith(")"), "Parentheses for argument names should match."); + return signature.slice(0, argsIndex); + }; + var __embind_register_class_function = (rawClassType, + methodName, + argCount, + rawArgTypesAddr, // [ReturnType, ThisType, Args...] + invokerSignature, + rawInvoker, + context, + isPureVirtual, + isAsync, + isNonnullReturn) => { + var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + methodName = AsciiToString(methodName); + methodName = getFunctionName(methodName); + rawInvoker = embind__requireFunction(invokerSignature, rawInvoker, isAsync); + + whenDependentTypesAreResolved([], [rawClassType], (classType) => { + classType = classType[0]; + var humanName = `${classType.name}.${methodName}`; + + if (methodName.startsWith("@@")) { + methodName = Symbol[methodName.substring(2)]; + } + + if (isPureVirtual) { + classType.registeredClass.pureVirtualFunctions.push(methodName); + } + + function unboundTypesHandler() { + throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`, rawArgTypes); + } + + var proto = classType.registeredClass.instancePrototype; + var method = proto[methodName]; + if (undefined === method || (undefined === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2)) { + // This is the first overload to be registered, OR we are replacing a + // function in the base class with a function in the derived class. + unboundTypesHandler.argCount = argCount - 2; + unboundTypesHandler.className = classType.name; + proto[methodName] = unboundTypesHandler; + } else { + // There was an existing function with the same name registered. Set up + // a function overload routing table. + ensureOverloadTable(proto, methodName, humanName); + proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler; + } + + whenDependentTypesAreResolved([], rawArgTypes, (argTypes) => { + var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context, isAsync); + + // Replace the initial unbound-handler-stub function with the + // appropriate member function, now that all types are resolved. If + // multiple overloads are registered for this function, the function + // goes into an overload table. + if (undefined === proto[methodName].overloadTable) { + // Set argCount in case an overload is registered later + memberFunction.argCount = argCount - 2; + proto[methodName] = memberFunction; + } else { + proto[methodName].overloadTable[argCount - 2] = memberFunction; + } + + return []; + }); + return []; + }); + }; + + + var emval_freelist = []; + + var emval_handles = [0,1,,1,null,1,true,1,false,1]; + var __emval_decref = (handle) => { + if (handle > 9 && 0 === --emval_handles[handle + 1]) { + assert(emval_handles[handle] !== undefined, `Decref for unallocated handle.`); + emval_handles[handle] = undefined; + emval_freelist.push(handle); + } + }; + + + + var Emval = { + toValue:(handle) => { + if (!handle) { + throwBindingError(`Cannot use deleted val. handle = ${handle}`); + } + // handle 2 is supposed to be `undefined`. + assert(handle === 2 || emval_handles[handle] !== undefined && handle % 2 === 0, `invalid handle: ${handle}`); + return emval_handles[handle]; + }, + toHandle:(value) => { + switch (value) { + case undefined: return 2; + case null: return 4; + case true: return 6; + case false: return 8; + default:{ + const handle = emval_freelist.pop() || emval_handles.length; + emval_handles[handle] = value; + emval_handles[handle + 1] = 1; + return handle; + } + } + }, + }; + + + var EmValType = { + name: 'emscripten::val', + 'fromWireType': (handle) => { + var rv = Emval.toValue(handle); + __emval_decref(handle); + return rv; + }, + 'toWireType': (destructors, value) => Emval.toHandle(value), + argPackAdvance: GenericWireTypeSize, + 'readValueFromPointer': readPointer, + destructorFunction: null, // This type does not need a destructor + + // TODO: do we need a deleteObject here? write a test where + // emval is passed into JS via an interface + }; + var __embind_register_emval = (rawType) => registerType(rawType, EmValType); + + var floatReadValueFromPointer = (name, width) => { + switch (width) { + case 4: return function(pointer) { + return this['fromWireType'](HEAPF32[((pointer)>>2)]); + }; + case 8: return function(pointer) { + return this['fromWireType'](HEAPF64[((pointer)>>3)]); + }; + default: + throw new TypeError(`invalid float width (${width}): ${name}`); + } + }; + + + + var __embind_register_float = (rawType, name, size) => { + name = AsciiToString(name); + registerType(rawType, { + name, + 'fromWireType': (value) => value, + 'toWireType': (destructors, value) => { + if (typeof value != "number" && typeof value != "boolean") { + throw new TypeError(`Cannot convert ${embindRepr(value)} to ${this.name}`); + } + // The VM will perform JS to Wasm value conversion, according to the spec: + // https://www.w3.org/TR/wasm-js-api-1/#towebassemblyvalue + return value; + }, + argPackAdvance: GenericWireTypeSize, + 'readValueFromPointer': floatReadValueFromPointer(name, size), + destructorFunction: null, // This type does not need a destructor + }); + }; + + + + + + /** @suppress {globalThis} */ + var __embind_register_integer = (primitiveType, name, size, minRange, maxRange) => { + name = AsciiToString(name); + + const isUnsignedType = minRange === 0; + + let fromWireType = (value) => value; + if (isUnsignedType) { + var bitshift = 32 - 8*size; + fromWireType = (value) => (value << bitshift) >>> bitshift; + maxRange = fromWireType(maxRange); + } + + registerType(primitiveType, { + name, + 'fromWireType': fromWireType, + 'toWireType': (destructors, value) => { + if (typeof value != "number" && typeof value != "boolean") { + throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${name}`); + } + assertIntegerRange(name, value, minRange, maxRange); + // The VM will perform JS to Wasm value conversion, according to the spec: + // https://www.w3.org/TR/wasm-js-api-1/#towebassemblyvalue + return value; + }, + argPackAdvance: GenericWireTypeSize, + 'readValueFromPointer': integerReadValueFromPointer(name, size, minRange !== 0), + destructorFunction: null, // This type does not need a destructor + }); + }; + + + var __embind_register_memory_view = (rawType, dataTypeIndex, name) => { + var typeMapping = [ + Int8Array, + Uint8Array, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array, + BigInt64Array, + BigUint64Array, + ]; + + var TA = typeMapping[dataTypeIndex]; + + function decodeMemoryView(handle) { + var size = HEAPU32[((handle)>>2)]; + var data = HEAPU32[(((handle)+(4))>>2)]; + return new TA(HEAP8.buffer, data, size); + } + + name = AsciiToString(name); + registerType(rawType, { + name, + 'fromWireType': decodeMemoryView, + argPackAdvance: GenericWireTypeSize, + 'readValueFromPointer': decodeMemoryView, + }, { + ignoreDuplicateRegistrations: true, + }); + }; + + + + + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.codePointAt(i); + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + // Gotcha: if codePoint is over 0xFFFF, it is represented as a surrogate pair in UTF-16. + // We need to manually skip over the second code unit for correct iteration. + i++; + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + // When using conditional TextDecoder, skip it for short strings as the overhead of the native call is not worth it. + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + var __embind_register_std_string = (rawType, name) => { + name = AsciiToString(name); + var stdStringIsUTF8 + = true; + + registerType(rawType, { + name, + // For some method names we use string keys here since they are part of + // the public/external API and/or used by the runtime-generated code. + 'fromWireType'(value) { + var length = HEAPU32[((value)>>2)]; + var payload = value + 4; + + var str; + if (stdStringIsUTF8) { + var decodeStartPtr = payload; + // Looping here to support possible embedded '0' bytes + for (var i = 0; i <= length; ++i) { + var currentBytePtr = payload + i; + if (i == length || HEAPU8[currentBytePtr] == 0) { + var maxRead = currentBytePtr - decodeStartPtr; + var stringSegment = UTF8ToString(decodeStartPtr, maxRead); + if (str === undefined) { + str = stringSegment; + } else { + str += String.fromCharCode(0); + str += stringSegment; + } + decodeStartPtr = currentBytePtr + 1; + } + } + } else { + var a = new Array(length); + for (var i = 0; i < length; ++i) { + a[i] = String.fromCharCode(HEAPU8[payload + i]); + } + str = a.join(''); + } + + _free(value); + + return str; + }, + 'toWireType'(destructors, value) { + if (value instanceof ArrayBuffer) { + value = new Uint8Array(value); + } + + var length; + var valueIsOfTypeString = (typeof value == 'string'); + + // We accept `string` or array views with single byte elements + if (!(valueIsOfTypeString || (ArrayBuffer.isView(value) && value.BYTES_PER_ELEMENT == 1))) { + throwBindingError('Cannot pass non-string to std::string'); + } + if (stdStringIsUTF8 && valueIsOfTypeString) { + length = lengthBytesUTF8(value); + } else { + length = value.length; + } + + // assumes POINTER_SIZE alignment + var base = _malloc(4 + length + 1); + var ptr = base + 4; + HEAPU32[((base)>>2)] = length; + if (valueIsOfTypeString) { + if (stdStringIsUTF8) { + stringToUTF8(value, ptr, length + 1); + } else { + for (var i = 0; i < length; ++i) { + var charCode = value.charCodeAt(i); + if (charCode > 255) { + _free(base); + throwBindingError('String has UTF-16 code units that do not fit in 8 bits'); + } + HEAPU8[ptr + i] = charCode; + } + } + } else { + HEAPU8.set(value, ptr); + } + + if (destructors !== null) { + destructors.push(_free, base); + } + return base; + }, + argPackAdvance: GenericWireTypeSize, + 'readValueFromPointer': readPointer, + destructorFunction(ptr) { + _free(ptr); + }, + }); + }; + + + + + var UTF16Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder('utf-16le') : undefined;; + var UTF16ToString = (ptr, maxBytesToRead) => { + assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!'); + var idx = ((ptr)>>1); + var maxIdx = idx + maxBytesToRead / 2; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. + // Also, use the length info to avoid running tiny strings through + // TextDecoder, since .subarray() allocates garbage. + var endIdx = idx; + // If maxBytesToRead is not passed explicitly, it will be undefined, and this + // will always evaluate to true. This saves on code size. + while (!(endIdx >= maxIdx) && HEAPU16[endIdx]) ++endIdx; + + if (endIdx - idx > 16 && UTF16Decoder) + return UTF16Decoder.decode(HEAPU16.subarray(idx, endIdx)); + + // Fallback: decode without UTF16Decoder + var str = ''; + + // If maxBytesToRead is not passed explicitly, it will be undefined, and the + // for-loop's condition will always evaluate to true. The loop is then + // terminated on the first null char. + for (var i = idx; !(i >= maxIdx); ++i) { + var codeUnit = HEAPU16[i]; + if (codeUnit == 0) break; + // fromCharCode constructs a character from a UTF-16 code unit, so we can + // pass the UTF16 string right through. + str += String.fromCharCode(codeUnit); + } + + return str; + }; + + var stringToUTF16 = (str, outPtr, maxBytesToWrite) => { + assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!'); + assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + maxBytesToWrite ??= 0x7FFFFFFF; + if (maxBytesToWrite < 2) return 0; + maxBytesToWrite -= 2; // Null terminator. + var startPtr = outPtr; + var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length; + for (var i = 0; i < numCharsToWrite; ++i) { + // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + HEAP16[((outPtr)>>1)] = codeUnit; + outPtr += 2; + } + // Null-terminate the pointer to the HEAP. + HEAP16[((outPtr)>>1)] = 0; + return outPtr - startPtr; + }; + + var lengthBytesUTF16 = (str) => str.length*2; + + var UTF32ToString = (ptr, maxBytesToRead) => { + assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!'); + var str = ''; + // If maxBytesToRead is not passed explicitly, it will be undefined, and this + // will always evaluate to true. This saves on code size. + for (var i = 0; !(i >= maxBytesToRead / 4); i++) { + var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; + if (!utf32) break; + str += String.fromCodePoint(utf32); + } + return str; + }; + + var stringToUTF32 = (str, outPtr, maxBytesToWrite) => { + assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!'); + assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + maxBytesToWrite ??= 0x7FFFFFFF; + if (maxBytesToWrite < 4) return 0; + var startPtr = outPtr; + var endPtr = startPtr + maxBytesToWrite - 4; + for (var i = 0; i < str.length; ++i) { + var codePoint = str.codePointAt(i); + // Gotcha: if codePoint is over 0xFFFF, it is represented as a surrogate pair in UTF-16. + // We need to manually skip over the second code unit for correct iteration. + if (codePoint > 0xFFFF) { + i++; + } + HEAP32[((outPtr)>>2)] = codePoint; + outPtr += 4; + if (outPtr + 4 > endPtr) break; + } + // Null-terminate the pointer to the HEAP. + HEAP32[((outPtr)>>2)] = 0; + return outPtr - startPtr; + }; + + var lengthBytesUTF32 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var codePoint = str.codePointAt(i); + // Gotcha: if codePoint is over 0xFFFF, it is represented as a surrogate pair in UTF-16. + // We need to manually skip over the second code unit for correct iteration. + if (codePoint > 0xFFFF) { + i++; + } + len += 4; + } + + return len; + }; + var __embind_register_std_wstring = (rawType, charSize, name) => { + name = AsciiToString(name); + var decodeString, encodeString, readCharAt, lengthBytesUTF; + if (charSize === 2) { + decodeString = UTF16ToString; + encodeString = stringToUTF16; + lengthBytesUTF = lengthBytesUTF16; + readCharAt = (pointer) => HEAPU16[((pointer)>>1)]; + } else if (charSize === 4) { + decodeString = UTF32ToString; + encodeString = stringToUTF32; + lengthBytesUTF = lengthBytesUTF32; + readCharAt = (pointer) => HEAPU32[((pointer)>>2)]; + } + registerType(rawType, { + name, + 'fromWireType': (value) => { + // Code mostly taken from _embind_register_std_string fromWireType + var length = HEAPU32[((value)>>2)]; + var str; + + var decodeStartPtr = value + 4; + // Looping here to support possible embedded '0' bytes + for (var i = 0; i <= length; ++i) { + var currentBytePtr = value + 4 + i * charSize; + if (i == length || readCharAt(currentBytePtr) == 0) { + var maxReadBytes = currentBytePtr - decodeStartPtr; + var stringSegment = decodeString(decodeStartPtr, maxReadBytes); + if (str === undefined) { + str = stringSegment; + } else { + str += String.fromCharCode(0); + str += stringSegment; + } + decodeStartPtr = currentBytePtr + charSize; + } + } + + _free(value); + + return str; + }, + 'toWireType': (destructors, value) => { + if (!(typeof value == 'string')) { + throwBindingError(`Cannot pass non-string to C++ string type ${name}`); + } + + // assumes POINTER_SIZE alignment + var length = lengthBytesUTF(value); + var ptr = _malloc(4 + length + charSize); + HEAPU32[((ptr)>>2)] = length / charSize; + + encodeString(value, ptr + 4, length + charSize); + + if (destructors !== null) { + destructors.push(_free, ptr); + } + return ptr; + }, + argPackAdvance: GenericWireTypeSize, + 'readValueFromPointer': readPointer, + destructorFunction(ptr) { + _free(ptr); + } + }); + }; + + + var __embind_register_void = (rawType, name) => { + name = AsciiToString(name); + registerType(rawType, { + isVoid: true, // void return values can be optimized out sometimes + name, + argPackAdvance: 0, + 'fromWireType': () => undefined, + // TODO: assert if anything else is given? + 'toWireType': (destructors, o) => undefined, + }); + }; + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + var SYSCALLS = { + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + var _fd_close = (fd) => { + abort('fd_close called without SYSCALLS_REQUIRE_FILESYSTEM'); + }; + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + return 70; + ; + } + + var printCharBuffers = [null,[],[]]; + + var printChar = (stream, curr) => { + var buffer = printCharBuffers[stream]; + assert(buffer); + if (curr === 0 || curr === 10) { + (stream === 1 ? out : err)(UTF8ArrayToString(buffer)); + buffer.length = 0; + } else { + buffer.push(curr); + } + }; + + var flush_NO_FILESYSTEM = () => { + // flush anything remaining in the buffers during shutdown + _fflush(0); + if (printCharBuffers[1].length) printChar(1, 10); + if (printCharBuffers[2].length) printChar(2, 10); + }; + + + var _fd_write = (fd, iov, iovcnt, pnum) => { + // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0 + var num = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + for (var j = 0; j < len; j++) { + printChar(fd, HEAPU8[ptr+j]); + } + num += len; + } + HEAPU32[((pnum)>>2)] = num; + return 0; + }; +init_ClassHandle(); +init_RegisteredPointer(); +assert(emval_handles.length === 5 * 2); +// End JS library code + +// include: postlibrary.js +// This file is included after the automatically-generated JS library code +// but before the wasm module is created. + +{ + + // Begin ATMODULES hooks + if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime']; +if (Module['print']) out = Module['print']; +if (Module['printErr']) err = Module['printErr']; +if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; + +Module['FS_createDataFile'] = FS.createDataFile; +Module['FS_createPreloadedFile'] = FS.createPreloadedFile; + + // End ATMODULES hooks + + checkIncomingModuleAPI(); + + if (Module['arguments']) arguments_ = Module['arguments']; + if (Module['thisProgram']) thisProgram = Module['thisProgram']; + + // Assertions on removed incoming Module JS APIs. + assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); + assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); + assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); + assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); + assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); + assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); + assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); + assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); + assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); + assert(typeof Module['ENVIRONMENT'] == 'undefined', 'Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); + assert(typeof Module['STACK_SIZE'] == 'undefined', 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + // If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY + assert(typeof Module['wasmMemory'] == 'undefined', 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); + assert(typeof Module['INITIAL_MEMORY'] == 'undefined', 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +} + +// Begin runtime exports + var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'stackAlloc', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'exitJS', + 'getHeapMax', + 'growMemory', + 'withStackSave', + 'strError', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'handleException', + 'keepRuntimeAlive', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'asyncLoad', + 'alignMemory', + 'mmapAlloc', + 'HandleAllocator', + 'getNativeTypeSize', + 'getUniqueRunDependency', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayFromString', + 'intArrayToString', + 'stringToAscii', + 'stringToNewUTF8', + 'stringToUTF8OnStack', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'initRandomFill', + 'randomFill', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'isLeapYear', + 'ydayFromDate', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', + 'getFunctionArgsName', + 'requireRegisteredType', + 'createJsInvokerSignature', + 'PureVirtualError', + 'registerInheritedInstance', + 'unregisterInheritedInstance', + 'getInheritedInstanceCount', + 'getLiveInheritedInstances', + 'enumReadValueFromPointer', + 'setDelayFunction', + 'validateThis', + 'count_emval_handles', + 'getStringOrSymbol', + 'emval_get_global', + 'emval_returnValue', + 'emval_lookupTypes', + 'emval_addMethodCaller', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + + var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'HEAPF32', + 'HEAPF64', + 'HEAP8', + 'HEAPU8', + 'HEAP16', + 'HEAPU16', + 'HEAP32', + 'HEAPU32', + 'HEAP64', + 'HEAPU64', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'ptrToString', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'AsciiToString', + 'UTF16Decoder', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'flush_NO_FILESYSTEM', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'requestFullscreen', + 'requestFullScreen', + 'setCanvasSize', + 'getUserMedia', + 'createContext', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'SYSCALLS', + 'preloadPlugins', + 'FS_stdin_getChar_buffer', + 'FS_unlink', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_root', + 'FS_mounts', + 'FS_devices', + 'FS_streams', + 'FS_nextInode', + 'FS_nameTable', + 'FS_currentPath', + 'FS_initialized', + 'FS_ignorePermissions', + 'FS_filesystems', + 'FS_syncFSRequests', + 'FS_readFiles', + 'FS_lookupPath', + 'FS_getPath', + 'FS_hashName', + 'FS_hashAddNode', + 'FS_hashRemoveNode', + 'FS_lookupNode', + 'FS_createNode', + 'FS_destroyNode', + 'FS_isRoot', + 'FS_isMountpoint', + 'FS_isFile', + 'FS_isDir', + 'FS_isLink', + 'FS_isChrdev', + 'FS_isBlkdev', + 'FS_isFIFO', + 'FS_isSocket', + 'FS_flagsToPermissionString', + 'FS_nodePermissions', + 'FS_mayLookup', + 'FS_mayCreate', + 'FS_mayDelete', + 'FS_mayOpen', + 'FS_checkOpExists', + 'FS_nextfd', + 'FS_getStreamChecked', + 'FS_getStream', + 'FS_createStream', + 'FS_closeStream', + 'FS_dupStream', + 'FS_doSetAttr', + 'FS_chrdev_stream_ops', + 'FS_major', + 'FS_minor', + 'FS_makedev', + 'FS_registerDevice', + 'FS_getDevice', + 'FS_getMounts', + 'FS_syncfs', + 'FS_mount', + 'FS_unmount', + 'FS_lookup', + 'FS_mknod', + 'FS_statfs', + 'FS_statfsStream', + 'FS_statfsNode', + 'FS_create', + 'FS_mkdir', + 'FS_mkdev', + 'FS_symlink', + 'FS_rename', + 'FS_rmdir', + 'FS_readdir', + 'FS_readlink', + 'FS_stat', + 'FS_fstat', + 'FS_lstat', + 'FS_doChmod', + 'FS_chmod', + 'FS_lchmod', + 'FS_fchmod', + 'FS_doChown', + 'FS_chown', + 'FS_lchown', + 'FS_fchown', + 'FS_doTruncate', + 'FS_truncate', + 'FS_ftruncate', + 'FS_utime', + 'FS_open', + 'FS_close', + 'FS_isClosed', + 'FS_llseek', + 'FS_read', + 'FS_write', + 'FS_mmap', + 'FS_msync', + 'FS_ioctl', + 'FS_writeFile', + 'FS_cwd', + 'FS_chdir', + 'FS_createDefaultDirectories', + 'FS_createDefaultDevices', + 'FS_createSpecialDirectories', + 'FS_createStandardStreams', + 'FS_staticInit', + 'FS_init', + 'FS_quit', + 'FS_findObject', + 'FS_analyzePath', + 'FS_createFile', + 'FS_createDataFile', + 'FS_forceLoadFile', + 'FS_createLazyFile', + 'FS_absolutePath', + 'FS_createFolder', + 'FS_createLink', + 'FS_joinPath', + 'FS_mmapAlloc', + 'FS_standardizePath', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', + 'jstoi_s', + 'InternalError', + 'BindingError', + 'throwInternalError', + 'throwBindingError', + 'registeredTypes', + 'awaitingDependencies', + 'typeDependencies', + 'tupleRegistrations', + 'structRegistrations', + 'sharedRegisterType', + 'whenDependentTypesAreResolved', + 'getTypeName', + 'getFunctionName', + 'heap32VectorToArray', + 'usesDestructorStack', + 'checkArgCount', + 'getRequiredArgCount', + 'createJsInvoker', + 'UnboundTypeError', + 'GenericWireTypeSize', + 'EmValType', + 'EmValOptionalType', + 'throwUnboundTypeError', + 'ensureOverloadTable', + 'exposePublicSymbol', + 'replacePublicSymbol', + 'createNamedFunction', + 'embindRepr', + 'registeredInstances', + 'getBasestPointer', + 'getInheritedInstance', + 'registeredPointers', + 'registerType', + 'integerReadValueFromPointer', + 'floatReadValueFromPointer', + 'assertIntegerRange', + 'readPointer', + 'runDestructors', + 'craftInvokerFunction', + 'embind__requireFunction', + 'genericPointerToWireType', + 'constNoSmartPtrRawPointerToWireType', + 'nonConstNoSmartPtrRawPointerToWireType', + 'init_RegisteredPointer', + 'RegisteredPointer', + 'RegisteredPointer_fromWireType', + 'runDestructor', + 'releaseClassHandle', + 'finalizationRegistry', + 'detachFinalizer_deps', + 'detachFinalizer', + 'attachFinalizer', + 'makeClassHandle', + 'init_ClassHandle', + 'ClassHandle', + 'throwInstanceAlreadyDeleted', + 'deletionQueue', + 'flushPendingDeletes', + 'delayFunction', + 'RegisteredClass', + 'shallowCopyInternalPointer', + 'downcastPointer', + 'upcastPointer', + 'char_0', + 'char_9', + 'makeLegalFunctionName', + 'emval_freelist', + 'emval_handles', + 'emval_symbols', + 'Emval', + 'emval_methodCallers', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + // End runtime exports + // Begin JS library exports + // End JS library exports + +// end include: postlibrary.js + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} + +// Imports from the Wasm binary. +var _malloc = makeInvalidEarlyAccess('_malloc'); +var ___getTypeName = makeInvalidEarlyAccess('___getTypeName'); +var _fflush = makeInvalidEarlyAccess('_fflush'); +var _emscripten_stack_get_end = makeInvalidEarlyAccess('_emscripten_stack_get_end'); +var _emscripten_stack_get_base = makeInvalidEarlyAccess('_emscripten_stack_get_base'); +var _strerror = makeInvalidEarlyAccess('_strerror'); +var _free = makeInvalidEarlyAccess('_free'); +var _emscripten_stack_init = makeInvalidEarlyAccess('_emscripten_stack_init'); +var _emscripten_stack_get_free = makeInvalidEarlyAccess('_emscripten_stack_get_free'); +var __emscripten_stack_restore = makeInvalidEarlyAccess('__emscripten_stack_restore'); +var __emscripten_stack_alloc = makeInvalidEarlyAccess('__emscripten_stack_alloc'); +var _emscripten_stack_get_current = makeInvalidEarlyAccess('_emscripten_stack_get_current'); + +function assignWasmExports(wasmExports) { + _malloc = createExportWrapper('malloc', 1); + ___getTypeName = createExportWrapper('__getTypeName', 1); + _fflush = createExportWrapper('fflush', 1); + _emscripten_stack_get_end = wasmExports['emscripten_stack_get_end']; + _emscripten_stack_get_base = wasmExports['emscripten_stack_get_base']; + _strerror = createExportWrapper('strerror', 1); + _free = createExportWrapper('free', 1); + _emscripten_stack_init = wasmExports['emscripten_stack_init']; + _emscripten_stack_get_free = wasmExports['emscripten_stack_get_free']; + __emscripten_stack_restore = wasmExports['_emscripten_stack_restore']; + __emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc']; + _emscripten_stack_get_current = wasmExports['emscripten_stack_get_current']; +} +var wasmImports = { + /** @export */ + _abort_js: __abort_js, + /** @export */ + _embind_register_bigint: __embind_register_bigint, + /** @export */ + _embind_register_bool: __embind_register_bool, + /** @export */ + _embind_register_class: __embind_register_class, + /** @export */ + _embind_register_class_constructor: __embind_register_class_constructor, + /** @export */ + _embind_register_class_function: __embind_register_class_function, + /** @export */ + _embind_register_emval: __embind_register_emval, + /** @export */ + _embind_register_float: __embind_register_float, + /** @export */ + _embind_register_integer: __embind_register_integer, + /** @export */ + _embind_register_memory_view: __embind_register_memory_view, + /** @export */ + _embind_register_std_string: __embind_register_std_string, + /** @export */ + _embind_register_std_wstring: __embind_register_std_wstring, + /** @export */ + _embind_register_void: __embind_register_void, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports = await createWasm(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var calledRun; + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run() { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + readyPromiseResolve?.(Module); + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + assert(!Module['_main'], 'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + flush_NO_FILESYSTEM(); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + warnOnce('(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)'); + } +} + +function preInit() { + if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].shift()(); + } + } + consumedModuleProp('preInit'); +} + +preInit(); +run(); + +// end include: postamble.js + +// include: postamble_modularize.js +// In MODULARIZE mode we wrap the generated code in a factory function +// and return either the Module itself, or a promise of the module. +// +// We assign to the `moduleRtn` global here and configure closure to see +// this as and extern so it won't get minified. + +if (runtimeInitialized) { + moduleRtn = Module; +} else { + // Set up the promise that indicates the Module is initialized + moduleRtn = new Promise((resolve, reject) => { + readyPromiseResolve = resolve; + readyPromiseReject = reject; + }); +} + +// Assertion for attempting to access module properties on the incoming +// moduleArg. In the past we used this object as the prototype of the module +// and assigned properties to it, but now we return a distinct object. This +// keeps the instance private until it is ready (i.e the promise has been +// resolved). +for (const prop of Object.keys(Module)) { + if (!(prop in moduleArg)) { + Object.defineProperty(moduleArg, prop, { + configurable: true, + get() { + abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`) + } + }); + } +} +// end include: postamble_modularize.js + + + + return moduleRtn; +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') { + module.exports = createModule; + // This default export looks redundant, but it allows TS to import this + // commonjs style module. + module.exports.default = createModule; +} else if (typeof define === 'function' && define['amd']) + define([], () => createModule); diff --git a/rng/rng/web/public/libs/splat.wasm b/rng/rng/web/public/libs/splat.wasm new file mode 100755 index 0000000000000000000000000000000000000000..7774031363b1d8bfbf0436b06869888181160b14 GIT binary patch literal 44479 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 literal 0 HcmV?d00001 diff --git a/rng/rng/web/src/App.jsx b/rng/rng/web/src/App.jsx new file mode 100644 index 0000000..b693b3f --- /dev/null +++ b/rng/rng/web/src/App.jsx @@ -0,0 +1,48 @@ +import { useState, useEffect } from 'react' + + +function App() { + + // const [splat, setSplat] = useState(null); + const [randomNum, setRandomNum] = useState(null); + const [rng, setRng] = useState(null) + + useEffect(() => { + createModule().then((module) => { + setRng(new module.mt19937(5489)) + }) + }, []); + + const generateRandom = () => { + const num = rng.generate(); + setRandomNum(num); + console.log(num) + }; + + + return ( + <> +
+ 🫟 {rng !=null ? rng.getName() : "none"} +
+
+ {(rng==null) ? ( +
+ Loading... +
+ ) : ( +
+
+ {randomNum ? randomNum : "Generate a number below"} +
+
+ +
+
+ )} +
+ + ) +} + +export default App diff --git a/rng/rng/web/src/assets/react.svg b/rng/rng/web/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/rng/rng/web/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rng/rng/web/src/index.css b/rng/rng/web/src/index.css new file mode 100644 index 0000000..f1d8c73 --- /dev/null +++ b/rng/rng/web/src/index.css @@ -0,0 +1 @@ +@import "tailwindcss"; diff --git a/rng/rng/web/src/main.jsx b/rng/rng/web/src/main.jsx new file mode 100644 index 0000000..b9a1a6d --- /dev/null +++ b/rng/rng/web/src/main.jsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.jsx' + +createRoot(document.getElementById('root')).render( + + + , +) diff --git a/rng/rng/web/vite.config.js b/rng/rng/web/vite.config.js new file mode 100644 index 0000000..ea837a2 --- /dev/null +++ b/rng/rng/web/vite.config.js @@ -0,0 +1,8 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import tailwindcss from '@tailwindcss/vite' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react(),tailwindcss()], +})