diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml new file mode 100644 index 00000000..02a3eafa --- /dev/null +++ b/.github/workflows/frontend.yml @@ -0,0 +1,57 @@ +name: Frontend CI + +on: + push: + branches: [main] + pull_request: + +permissions: + contents: read + +jobs: + frontend-test: + name: Frontend Tests & Verification + runs-on: ubuntu-latest + defaults: + run: + working-directory: frontend + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + cache-dependency-path: frontend/package-lock.json + + - name: Install dependencies + run: npm ci + + - name: Typecheck + run: npm run typecheck + + - name: Unit and validator tests + run: npm test + + - name: Build static site + run: npm run build + + - name: Install Playwright Chromium + run: npx playwright install --with-deps chromium + + - name: Playwright E2E and A11y tests + run: npx playwright test + env: + CI: "true" + + - name: Upload Playwright report on failure + uses: actions/upload-artifact@v4 + if: failure() + with: + name: playwright-report + path: frontend/playwright-report/ + retention-days: 7 diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 00000000..a3619a7d --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,9 @@ +node_modules +dist +.vite +*.local +.DS_Store +test-results +playwright-report +blob-report +playwright/.cache diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 00000000..dbe63a3e --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,45 @@ +# OpenVerifiableLLM Frontend (Site v3) + +Static single-page project site for OpenVerifiableLLM, presenting real bit-for-bit training verification evidence from Hugging Face revision `96dc282a`. + +## Overview + +- **Single-page navigation**: Evidence-first landing page with section anchors (`#check`, `#verification`, `#timeline`, `#exclusion`, `#downloads`). +- **Real evidence data**: Pinned Hugging Face dataset `AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence` at revision `96dc282a`. +- **Prebuild validation**: `npm run build` runs `prebuild` (`npm run validate`), failing closed if any data contract or hash link is violated. +- **Accessible design**: WCAG 2.2 AA compliant, zero axe violations across themes (dark default, light opt-in) and viewports. +- **Offline bundle**: System fonts only (no web fonts), embedded SVG brand assets, and zero runtime external CDN dependencies. + +## Commands + +```bash +cd frontend +npm ci +npm run dev # start local development server at http://127.0.0.1:5173 +npm run typecheck # verify TypeScript types (tsc -b --noEmit) +npm test # run Vitest suite (validation, copy lint, components) +npm run build # validate evidence and build static output to dist/ +npm run preview # preview production build locally +``` + +## Structure + +``` +frontend/ +├── public/ +│ ├── brand/ # Segment check SVGs (logo-dark, logo-light, favicon, app-icon, aossie-logo) +│ └── data/ # evidence.json (pinned data committed for offline validation) +├── scripts/ +│ └── fetch-evidence.mjs # Manual script to fetch and assemble snapshot from Hugging Face +├── src/ +│ ├── components/ # React components (Hero, Overview, CheckLadder, Verification, TrainingTimeline, etc.) +│ ├── content/ # copy.ts (single source of truth for text and copy linting) +│ ├── data/ # contracts.ts and validate.ts (strict schemas, invariant validator) +│ └── styles/ # tokens.css (color tokens and ratios) and base.css (typography and layouts) +└── tests/ + ├── browser/ # Playwright + axe-core accessibility and interaction test suite + ├── fixtures/ # Corrupted evidence fixtures for fail-closed validation tests + ├── components.test.tsx + ├── copy-lint.test.ts + └── validate.test.ts +``` diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 00000000..492b18c1 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,18 @@ + + + + + + OpenVerifiableLLM + + + + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 00000000..9ca653b4 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,3199 @@ +{ + "name": "openverifiablellm-frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "openverifiablellm-frontend", + "version": "0.1.0", + "dependencies": { + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@axe-core/playwright": "^4.14.0", + "@playwright/test": "^1.63.0", + "@testing-library/jest-dom": "^7.0.1", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^14.6.1", + "@types/node": "^26.6.6", + "@types/react": "^19.1.12", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react": "^5.0.2", + "jsdom": "^26.1.0", + "typescript": "~5.9.2", + "vite": "^7.1.5", + "vitest": "^3.2.4" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.5.0.tgz", + "integrity": "sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@axe-core/playwright": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.14.0.tgz", + "integrity": "sha512-SGUhG5PIHd2eMdpgBF2PyQLOhX+qyDR2PT4cmoS4Qk2ak+jX/rrSvst9l0PGv5WTHolKpUMvVmoHpr4cZgf1RQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "axe-core": "~4.14.0" + }, + "engines": { + "node": ">=22.12.0" + }, + "peerDependencies": { + "playwright-core": ">= 1.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "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.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@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.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "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.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@playwright/test": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.63.0.tgz", + "integrity": "sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.4.tgz", + "integrity": "sha512-I+BSHzTAhKN2n7ZwGZsegGcZjDpLqFOMAtJz/u6uFGe0pUFbq56dEHjqJV/ZUdRJtNXNxA+hREUatZBvMR3Oiw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.4.tgz", + "integrity": "sha512-pu3BdjS2LtEzRu2elmGzS3fIeWSZy4BMDIaLNwjorO76+k2d0LMluijhsDx3KQyQBQ/lLUZCQA9/s6csvUfuhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.4.tgz", + "integrity": "sha512-xfSrj9MHnWK9GaSqT9U0ImHtH/N8WZlHLx4cZHiuLcqs640hvZ3hLPd5UR2AZS57FaE8HrRUSpltbZdWRxHiDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.4.tgz", + "integrity": "sha512-bqU99PLJb/dqb3S0GIMdeuyAEETSUgZBoqXYd3Sd+WCsV+MmPhnN6JrotWyir31+QgH7EvvE5/mwGJlEoci8Fw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.4.tgz", + "integrity": "sha512-JinsFZ5G40oXQb+sUuiA5x689vhr6dDYK0H0NL+rwKdL6CqnmYN8PE4ZwfRSoIjrCxqTQG/SLfTtSvHeGxoVlw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.4.tgz", + "integrity": "sha512-GAdA4UxpiNm27cLHr2GqXBpAD0x9FqwYBY7/YSP0Ss0/PNi4k8gbviqpIpYbVSRBaS2ZcegXEzgTQMbRNCwxCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.4.tgz", + "integrity": "sha512-qDd6NoA1znaLjp4jR5U/KWCdLAKDJNB8W9ChbbDaKbo0xA+Atln5HK6LFCZ4oJQpemtRZA288DCirFRjrspptw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.4.tgz", + "integrity": "sha512-WtB5Tz5KTNINb8ZA+8sQ7bmjuS1JrRT7YverYIhUGdWWDlpzVWmIwuZE+jidkEXUn1l0zrEkaIMa8dHF3NGcsA==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.4.tgz", + "integrity": "sha512-VcQ3L1tjnkKzWjryAVaFhHEWcqOfICX9uxVVoDzm2t0DpgKRHd2zOpVrJc0xsWeBZcBFyYROCIBdyR/fS174pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.4.tgz", + "integrity": "sha512-6+ZQX6P5s0cMDN2Ypb8Lbm2+/sZYmZjdaYny992ujUU9UKi/4CWoJWsl1pNvjWJHNHGK51m+jKGLlh1ylb2ifQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.4.tgz", + "integrity": "sha512-D72ZnvkFkBXOfzMMQLcwfPLyGkKb7HZ9/mf97B7v6/P5Lbv4oFOtSY/uHbS8lH6uKUOxoKiuokdb50XZSzzbJw==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.4.tgz", + "integrity": "sha512-piU6BxeqA3O9KSu3kRCIQQtNqFFaTu21SEV4FwaRZowpnj3bLaWPZHw+xFqCs0XlJ+aOH3PTRWGoglH+mKA/OA==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.4.tgz", + "integrity": "sha512-/5PGpHwqt2EEEOUs1XwzubE/ucr0dWDQ+to3zqi4Ds7EWpwtQ79wXc4JBoxqj/OwpawTsKWzJxHfSuBOq3DrWA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.4.tgz", + "integrity": "sha512-cX3beZDLWt7G2oJF+nhChiT+qtaihs+S2xi7ziGmVB+2pwPng6D0Ed0HmElQOgv2UsUmSJJLGwpBao/3TDx3VA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.4.tgz", + "integrity": "sha512-1uz2mGWHyptR7DgHHrlbdRAjXK7v7elGZ9lMja910/RP+ZYbX6xAmCiU9UZSX4hqmgtHMv6lr5l3kq1HIOpcag==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.4.tgz", + "integrity": "sha512-nLS8topojxyz7SRpKR2IODRpQ0XPZ+xaOXvT3+hqK/Uy8Lo5HFgkkIBiIrCu5tL5YqzTvgovGw55PwpahTAGig==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.4.tgz", + "integrity": "sha512-gs7DRKotr3l3q+jGPQBjH0ng1FjlEDm5ueQrkw5JtQvtLyEIcLASqAEaor56BhkKRzk+IcQzrcanBdb/bBQn8g==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.4.tgz", + "integrity": "sha512-791ET7W17NnScOZM7h4dX5hYspxE28htPFsb1awY/NRR8+PRNkS53e475rDdxXXDrP+kwnCcNWg9CX5ztn/Aqw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.4.tgz", + "integrity": "sha512-iwZQRcmj7g88g3tzefIrQY7qvmuA/cfYwhrDtTBhsmukO4U2huVO5W+86XacUMRvdSFVAc6kZUZy21JaRwiB9w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.4.tgz", + "integrity": "sha512-dVHFp9gRWrdTpnqQuGfCwd7hOQDatK1VCP2iWhLY/cGrOQs/ucFzJ6A5SRqbXX12ZDI8EUuejSM5kwg+ja7Png==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.4.tgz", + "integrity": "sha512-t3NlauOW6gxZVVFcBEnO62Cb4wbyDFL416gTg1uFI/2tgqYQlf69FbSE115Ajre9I+c26Lk4mcmdFUsS/DGifQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.4.tgz", + "integrity": "sha512-xWuIaSye5FWZF8+UYtVEcHtRJDN5kN9Kfgxx3Kq8XIov9KSKbc1fiqQCm90SKrgQbUXZelbnUhnlUJmfSE7P9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.4.tgz", + "integrity": "sha512-9ALJJUOg/ZflMJepVo2PlgsGxSaxN7SQ4Z8GoZfVlarWr6r3rkHUNsd/zAio7p4YMtChSMXPionxej4Hkf6CXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.4.tgz", + "integrity": "sha512-blj9z5qx/Pv4WU0W1NMFDB97e0JH5ed+aZGywW8WCvp/NhWX/4PFAq5uu6Q0AebNn+Vo6KzUYDT++JzTT5ojlQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.4.tgz", + "integrity": "sha512-Erx822VRBwLa124shbj+wNXe//BOgMEctDV0m1aqTQdNO1S69DgNUCFKC1RCeZfixs1J31l6igk1ziyXErbigQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@testing-library/dom": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.2.tgz", + "integrity": "sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-7.0.1.tgz", + "integrity": "sha512-oMDTC3oA+6CXSO2JZnvOI7CA6oVub6kij5ggk9ohwye5slmkwxYDXcPOVxgMw/RQlticjtO0C1RZkR97HgrWMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=22", + "npm": ">=6", + "yarn": ">=1" + }, + "peerDependencies": { + "@testing-library/dom": ">=10 <11", + "vitest": ">= 0.32" + }, + "peerDependenciesMeta": { + "vitest": { + "optional": true + } + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.3.tgz", + "integrity": "sha512-Uo193NgQbPMz6lrrhtRQQFcMC6Re/ELLFbbuVL30WDlZxlpZf9/lMHTAVxPRLw1q1iu9OJmR1c2BLiENRstdBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.7", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.7.tgz", + "integrity": "sha512-MPCpX8bxe8zS+JmmTwLp8jd0dy1rAm60Te/SL8JrQM3qvQJcBOs1d7IefJMyZzqM3EWBrDn/LWDt1BCGu4ASfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "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.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "26.6.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.6.tgz", + "integrity": "sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.9.0" + } + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz", + "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-rc.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz", + "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz", + "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.7", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz", + "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz", + "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.7", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz", + "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.7", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz", + "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz", + "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.7", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/axe-core": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.14.0.tgz", + "integrity": "sha512-9WTZxEjsZ7b13TH8JPmbV2z8CHbl80/2hm3XPEG4JgNdQLK81IBRXmSxHfMAOkSqQeRxT/0dwNDz2GOm3zzpcQ==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.25", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.25.tgz", + "integrity": "sha512-gMmEShwwq7FJqMwvfRwvCl00v4kN+KOfJqXn+f4nrufak5gNHJOksd/60Dvjuz7sI8Y5WiSFBa8FEYr+zoyqCw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.0.tgz", + "integrity": "sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==", + "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": { + "baseline-browser-mapping": "^2.11.23", + "caniuse-lite": "^1.0.30001810", + "electron-to-chromium": "^1.5.427", + "node-releases": "^2.0.55", + "update-browserslist-db": "^1.3.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "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/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "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/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.433", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.433.tgz", + "integrity": "sha512-5lCAbyZBjtmUt/RAGHRqrL2q0oEFRThDAsZHHDn9XHa89Qw7gMYOeSicBTy+AHfvo0r6vwsZvqNJTQIQy1BLzA==", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "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/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/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/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "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/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "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/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/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "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/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.56", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.56.tgz", + "integrity": "sha512-x0InOIyzgdk+eyaWaRJFH5snEtiImgBgblZ2CyPrLmqqcuMQkEvcDPHbzqbD8eDsSeJbVOjn+crzyzHaM4D+/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/nwsapi": { + "version": "2.2.28", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.28.tgz", + "integrity": "sha512-IlVB7OS7qrOsVYlpnFIkETjMwT9jwvmocJmmM+GZU/PAB3uGi9Ezd7vcWhWBUnSc0ya4ppmQITOyP1ez9gg8cg==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playwright": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", + "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-core": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", + "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.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.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.28.0" + }, + "peerDependencies": { + "react": "^19.3.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup": { + "version": "4.63.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.4.tgz", + "integrity": "sha512-4U0liVayNIoLp3GFl1FcI8561WepLnZ1rqfraGh7S9B3Ur5F9S283y8Futii7RUU2C/97tOBmBy7nYvhoiOpbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.63.4", + "@rollup/rollup-android-arm64": "4.63.4", + "@rollup/rollup-darwin-arm64": "4.63.4", + "@rollup/rollup-darwin-x64": "4.63.4", + "@rollup/rollup-freebsd-arm64": "4.63.4", + "@rollup/rollup-freebsd-x64": "4.63.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.63.4", + "@rollup/rollup-linux-arm-musleabihf": "4.63.4", + "@rollup/rollup-linux-arm64-gnu": "4.63.4", + "@rollup/rollup-linux-arm64-musl": "4.63.4", + "@rollup/rollup-linux-loong64-gnu": "4.63.4", + "@rollup/rollup-linux-loong64-musl": "4.63.4", + "@rollup/rollup-linux-ppc64-gnu": "4.63.4", + "@rollup/rollup-linux-ppc64-musl": "4.63.4", + "@rollup/rollup-linux-riscv64-gnu": "4.63.4", + "@rollup/rollup-linux-riscv64-musl": "4.63.4", + "@rollup/rollup-linux-s390x-gnu": "4.63.4", + "@rollup/rollup-linux-x64-gnu": "4.63.4", + "@rollup/rollup-linux-x64-musl": "4.63.4", + "@rollup/rollup-openbsd-x64": "4.63.4", + "@rollup/rollup-openharmony-arm64": "4.63.4", + "@rollup/rollup-win32-arm64-msvc": "4.63.4", + "@rollup/rollup-win32-ia32-msvc": "4.63.4", + "@rollup/rollup-win32-x64-gnu": "4.63.4", + "@rollup/rollup-win32-x64-msvc": "4.63.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "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/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.2.0.tgz", + "integrity": "sha512-jBrmx4lYmaC9k/mgPbylxs7kBUxHtD8256up+HjLaDFfXScKJQyil+SWXSvhAtT7XHo+yTVlpB81PGmHP8oLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.0.0 || >=22.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.6.tgz", + "integrity": "sha512-u8KszXvGfU68hVcZpRHKG28T0krMuv2G5nDhiHaMLen/gIuFEgIJhaJuO69qjnXg5paSrbPMFfx3brNuN8eVSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "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/vite": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", + "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0 || ^0.28.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "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/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.7.tgz", + "integrity": "sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.7", + "@vitest/mocker": "3.2.7", + "@vitest/pretty-format": "^3.2.7", + "@vitest/runner": "3.2.7", + "@vitest/snapshot": "3.2.7", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.7", + "@vitest/ui": "3.2.7", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "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" + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 00000000..badeff1f --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,39 @@ +{ + "name": "openverifiablellm-frontend", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview", + "typecheck": "tsc -b --noEmit", + "test": "vitest run", + "e2e": "playwright test", + "fetch-evidence": "node scripts/fetch-evidence.mjs", + "validate": "vitest run tests/validate.test.ts", + "prebuild": "npm run validate" + }, + "dependencies": { + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@axe-core/playwright": "^4.14.0", + "@playwright/test": "^1.63.0", + "@testing-library/jest-dom": "^7.0.1", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^14.6.1", + "@types/node": "^26.6.6", + "@types/react": "^19.1.12", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react": "^5.0.2", + "jsdom": "^26.1.0", + "typescript": "~5.9.2", + "vite": "^7.1.5", + "vitest": "^3.2.4" + }, + "overrides": { + "tinypool": "^2.1.2" + } +} diff --git a/frontend/playwright.config.ts b/frontend/playwright.config.ts new file mode 100644 index 00000000..083d512b --- /dev/null +++ b/frontend/playwright.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './tests/browser', + fullyParallel: false, + workers: 1, + timeout: 60000, + use: { + baseURL: 'http://127.0.0.1:4173', + channel: process.env.CI ? undefined : (process.platform === 'win32' ? 'chrome' : undefined), + trace: 'retain-on-failure', + }, + reporter: [['list'], ['html', { open: 'never' }]], + webServer: { + command: 'npx vite preview --port 4173 --host 127.0.0.1', + url: 'http://127.0.0.1:4173', + reuseExistingServer: !process.env.CI, + timeout: 30000, + }, +}); diff --git a/frontend/public/brand/aossie-logo.svg b/frontend/public/brand/aossie-logo.svg new file mode 100644 index 00000000..76ccad89 --- /dev/null +++ b/frontend/public/brand/aossie-logo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/frontend/public/brand/app-icon.svg b/frontend/public/brand/app-icon.svg new file mode 100644 index 00000000..cf0d7996 --- /dev/null +++ b/frontend/public/brand/app-icon.svg @@ -0,0 +1,5 @@ + + OpenVerifiableLLM + + + diff --git a/frontend/public/brand/favicon.svg b/frontend/public/brand/favicon.svg new file mode 100644 index 00000000..cf0d7996 --- /dev/null +++ b/frontend/public/brand/favicon.svg @@ -0,0 +1,5 @@ + + OpenVerifiableLLM + + + diff --git a/frontend/public/brand/logo-dark.svg b/frontend/public/brand/logo-dark.svg new file mode 100644 index 00000000..7925c5a2 --- /dev/null +++ b/frontend/public/brand/logo-dark.svg @@ -0,0 +1,5 @@ + + OpenVerifiableLLM + + + diff --git a/frontend/public/brand/logo-light.svg b/frontend/public/brand/logo-light.svg new file mode 100644 index 00000000..20f4276c --- /dev/null +++ b/frontend/public/brand/logo-light.svg @@ -0,0 +1,6 @@ + + OpenVerifiableLLM + + + + diff --git a/frontend/public/data/evidence.json b/frontend/public/data/evidence.json new file mode 100644 index 00000000..36d99984 --- /dev/null +++ b/frontend/public/data/evidence.json @@ -0,0 +1,1945 @@ +{ + "schemaVersion": 1, + "dataset": "AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence", + "revision": "96dc282a", + "fetchedAt": "2026-10-30T15:32:03.178Z", + "sourceHashes": { + "release/simple-run/chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327", + "release/simple-run/verifications.jsonl": "ec73fe8fdce56eb075783c37383dbb5afaa23fac168fbd6619c01240de41b770", + "release/simple-run/hardware-map.jsonl": "5116f365398795a5e79513a3709d48995cc72a059ae9c69c653e324e723884e4", + "release/simple-run/release-hashes.txt": "479ce030fa8022f0f92262849f88dfde4c9cf2a0748b8830357f3aa277080e8d", + "release/simple-run/anchor.json": "2adaea4cae25439199ec2396c0e6e94d1d14188c070f217ed7e360ce10c1c18d", + "release/simple-run/README.md": "d3a4a5b221d9d1bd9318e8e414b44adc75f66155d03cd356b489165243e932e9", + "release/unlearning-3i-atlas/loo-results.json": "c926c965d1e040ab23c591c9dcdd007e5ece75a57ecfa100fd69515d190ead69", + "prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68" + }, + "preparation": { + "articles": 7232582, + "wikipediaTargets": 7118121139, + "conversations": 3481, + "trainingLoopLines": "~630 lines", + "preparedDataId": "8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68" + }, + "chain": [ + { + "index": 0, + "kind": "initial", + "control": { + "batches": "10ea13010a13668c8bf9e2884e16bdbd16f8933d9bf4d09eda0c47459133eddb", + "cursor": 0, + "epoch": 0, + "global_step": 0, + "phase": "wikipedia", + "phase_step": 0, + "pos": [ + 0, + 0 + ] + }, + "state": "64041a4736bd76b64b149c2a784950a312fb19ed641c7eb87e7300c171d002fc", + "model": "2b167bcb407f94ac3f1dead8f316ea180823a1cb40489b8a1ff974bf2bcd959d", + "previous": null, + "time": 1792422250.861772, + "entryHash": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2" + }, + { + "index": 1, + "kind": "progress", + "control": { + "batches": "e3f19a5269c4824fb1615d433b678fa54a6fc23ea99fd82c3e83f3f400f66809", + "cursor": 274561003, + "epoch": 0, + "global_step": 18080, + "phase": "wikipedia", + "phase_step": 18080, + "pos": [ + 14363834, + 3072 + ] + }, + "state": "ef5090325fcf3c392503406ac2f7e6bd99118d267c38fbe4b624df41b48eca8f", + "model": "c32f02fac9e87d0c4279aa39a0fa06b5cc06d5b141d5ff29503cb8431c4ca180", + "previous": "504f691b0958076c19294758dd4ba134b01e8740baa160f98d3b8e49dd2118e2", + "time": 1792424215.6430938, + "entryHash": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f" + }, + { + "index": 2, + "kind": "progress", + "control": { + "batches": "d5b199348b8d97e5a30ee2ea1a9bc465fd5dc0220a1a4297b4fa0716abdc84dc", + "cursor": 547313827, + "epoch": 0, + "global_step": 36160, + "phase": "wikipedia", + "phase_step": 36160, + "pos": [ + 30161308, + 6656 + ] + }, + "state": "94e253d50adff230867baf0f9b2fbb247399b598511dd238cca10838439a228c", + "model": "29c055caaaefce12e962bb5905f79640bf7bcfc2dfe09070704f50a35e954868", + "previous": "7c6fd00419883c91e75e804f7bc8e6b35bee3853c9202fd27f998c6ef23bb66f", + "time": 1792426181.1370955, + "entryHash": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789" + }, + { + "index": 3, + "kind": "progress", + "control": { + "batches": "f520d10b29d43cbbe5556d887bd7e622a26ed3003eaa8677366993ed6a0965df", + "cursor": 812314162, + "epoch": 0, + "global_step": 54240, + "phase": "wikipedia", + "phase_step": 54240, + "pos": [ + 50875269, + 0 + ] + }, + "state": "63f2f1cf69a97b295ef4924af836583cc5942d4cfdde34a0d68da658e9b56875", + "model": "bc0210cc1ce7eb55786921b9be9142224551daaa14a5a94b5851415d9954513f", + "previous": "491740cf089c9f5f7f6bcb98358f09629921444366cc64746d2ca443070e8789", + "time": 1792428164.4587104, + "entryHash": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37" + }, + { + "index": 4, + "kind": "progress", + "control": { + "batches": "9b1c36b8b217b225ab637476b5f96e9d13723e8ff2f49474a1aff9fe4b6c6836", + "cursor": 1071169817, + "epoch": 0, + "global_step": 72320, + "phase": "wikipedia", + "phase_step": 72320, + "pos": [ + 75821490, + 512 + ] + }, + "state": "38544968f3a1f342c17ee65afed30915acacf2131314c3254cfb1d3367acf0f6", + "model": "f6c1733d73e556de085fd9cb99f4137296f9ad7835fc3c88c9f8588cfeca0165", + "previous": "21ece8367d0fd3dfacba13dd330f401b1229748f994f91a6053a0f85fd421a37", + "time": 1792430142.4307606, + "entryHash": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6" + }, + { + "index": 5, + "kind": "progress", + "control": { + "batches": "0feb0c99169621a584609ce24a7ba1710f4dd1127205dae3911df09e1ab75698", + "cursor": 1326339931, + "epoch": 0, + "global_step": 90400, + "phase": "wikipedia", + "phase_step": 90400, + "pos": [ + 103716532, + 512 + ] + }, + "state": "0f66051bfcf2b8512da505733cf9814527aba0412b28109071d9ebe1e7949165", + "model": "521f1f5f34c6a0992a15e539f1eab5f5590f5fdca15fdf16c60842c1d8612754", + "previous": "7aab36987ca192ef19b1aa63efbfc63d005ed8e541ca07190e1c09b7371f3ab6", + "time": 1792432107.6645238, + "entryHash": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa" + }, + { + "index": 6, + "kind": "progress", + "control": { + "batches": "dd5c823c56a28362db599fa09567143434f9f343784400622105200695fca78d", + "cursor": 1575735740, + "epoch": 0, + "global_step": 108480, + "phase": "wikipedia", + "phase_step": 108480, + "pos": [ + 135269108, + 0 + ] + }, + "state": "d3f93a22ceb28a8640734ceca70e0217cf991b696807ecb6fdd31d318ad30aa8", + "model": "655aa1b3b7f5a34c9f0a2eba172ddbfef233acb3f121373e351b6d2cd982475f", + "previous": "5333b1e668315511ed83188188343e3de85e91c4382a997a8b1e649e59c472aa", + "time": 1792434050.5597794, + "entryHash": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a" + }, + { + "index": 7, + "kind": "progress", + "control": { + "batches": "496333b0221dbc6a2edeeb9ea5318d3b33069b8f91c98d489cf742f70bab1d43", + "cursor": 1821662484, + "epoch": 0, + "global_step": 126560, + "phase": "wikipedia", + "phase_step": 126560, + "pos": [ + 169162007, + 512 + ] + }, + "state": "228e635e6ee63fca5189f1af685f15c9d52a27527f300e7dac7a5ade82688e11", + "model": "ab677b66cfcc2d0652d37b5cc354e5d6980716b273cc99b78ae53f63e581ba14", + "previous": "bd8ab58402e382c3378b92efebbb0666d02a034cb8ebb0dfed38c64b339df85a", + "time": 1792435994.2637668, + "entryHash": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc" + }, + { + "index": 8, + "kind": "progress", + "control": { + "batches": "a009f3186720dd943c7c0e3c597706610370b795c3fd87b65df4ce8cdc54822d", + "cursor": 2062246462, + "epoch": 0, + "global_step": 144640, + "phase": "wikipedia", + "phase_step": 144640, + "pos": [ + 206335253, + 0 + ] + }, + "state": "6cb7cf58b036f71d793b7940617d2756e4d24e906a8a4fdb6ec58ee56031ad53", + "model": "4419b42c7902c6f650e634055a1de54ca172e2a0a26c5bbad58ee8516cf4dfc6", + "previous": "8784633f5bc8763129ce3ca0727e4c1b11339afa37096f990ce299d155b74acc", + "time": 1792437967.4633026, + "entryHash": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae" + }, + { + "index": 9, + "kind": "progress", + "control": { + "batches": "9f883e76562c687ddae51575bda5430cc91dbc45e57e7311d3646340a420a020", + "cursor": 2299429619, + "epoch": 0, + "global_step": 162720, + "phase": "wikipedia", + "phase_step": 162720, + "pos": [ + 245609368, + 0 + ] + }, + "state": "0947a1b7cb257922ed1bb71e36059bdde1fa1c76509255c1af8cb3167bff72db", + "model": "967ff641117b62e0f4bbb19fda16cfb7a1b6c20adc35295ff0738a0664953048", + "previous": "09803876eabd9ae24bbc5ba4f4ae5047e9da90d725cc3d5ca70445ede3b9b9ae", + "time": 1792439938.9320748, + "entryHash": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43" + }, + { + "index": 10, + "kind": "progress", + "control": { + "batches": "14ffdd92074c743ba35ff842d9d2956a29ff1ecf6b93820fc1bedb2161e2f20f", + "cursor": 2534896708, + "epoch": 0, + "global_step": 180800, + "phase": "wikipedia", + "phase_step": 180800, + "pos": [ + 285958813, + 5632 + ] + }, + "state": "e162c0ef79462cfcc2c88cd336170df12f92f1f6d099920decca178da9dd455a", + "model": "cb2fbe49be6ead1201600d45004f411c7ed3ba0d532ebe2417b1a43ba40d9889", + "previous": "e00e8ee29ee6ee131fa246a6ec1d787a2752857efb34b0d1f369db3e7a62bf43", + "time": 1792441925.2640333, + "entryHash": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b" + }, + { + "index": 11, + "kind": "progress", + "control": { + "batches": "7321c9e7f9b890c6b657525ffc10389c70e730b37f0ccaa0281264b7aaeec2ca", + "cursor": 2758953574, + "epoch": 0, + "global_step": 198880, + "phase": "wikipedia", + "phase_step": 198880, + "pos": [ + 331465519, + 0 + ] + }, + "state": "be21dd4e7d988157822d75f6600146be013afa826076b49b45b3874e5a2bd1ca", + "model": "21e5ccc4f7a7b4c8b311febbdcb0cd037a2efff64c715935853fa663b61e5aeb", + "previous": "19b1091f16ffa0006a0853ed750d237a528a54e3dcc93101fee747134200803b", + "time": 1792445221.8958924, + "entryHash": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18" + }, + { + "index": 12, + "kind": "progress", + "control": { + "batches": "0d86e2942f9d84483cd0e3cd5168d81cf418e915c04e25f94c03d3ad703c648d", + "cursor": 2977003841, + "epoch": 0, + "global_step": 216960, + "phase": "wikipedia", + "phase_step": 216960, + "pos": [ + 379051570, + 512 + ] + }, + "state": "c9d571c059311fbeb20f46d33a56497113b1f3705b75939ef57e61cc98978ca6", + "model": "ee22252416c44a8812aab40b456c60351eaf714679495ef7c39a81c3d24db503", + "previous": "5d4ad7bed8d2d8701de142eae5eea79a44bf54fc11e2a4623cb0baeea01efe18", + "time": 1792447305.2481282, + "entryHash": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165" + }, + { + "index": 13, + "kind": "progress", + "control": { + "batches": "bfe949e391619c70945f4ad5af5f73c00f8d44562f44733457ad865081612290", + "cursor": 3192270243, + "epoch": 0, + "global_step": 235040, + "phase": "wikipedia", + "phase_step": 235040, + "pos": [ + 427598539, + 0 + ] + }, + "state": "2733d7ef9aaacf20880e2196c819305f58ad0cc03494704fbc9f5e03a95931b2", + "model": "978af11d622fb0e48dd842f5aa27e9992c267de2a91944b1b3b160aa89fa7675", + "previous": "54e85b9f28ca29d37f5cfd86bad3b6fe57fef7c0eb4aac943d937e90432e0165", + "time": 1792449363.6749403, + "entryHash": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f" + }, + { + "index": 14, + "kind": "progress", + "control": { + "batches": "7eea41e27f71c52d58558b90de9ef7cd26ac9123366132bcbc1e71f4de08acf4", + "cursor": 3407720912, + "epoch": 0, + "global_step": 253120, + "phase": "wikipedia", + "phase_step": 253120, + "pos": [ + 476680277, + 0 + ] + }, + "state": "145353afb1e2ebc2b5f9831fed74e5631b42a11342aab9a0b9febe796446c446", + "model": "613728906a531097849fcaa83d13ccb54b334d805aeaef8abe127ef2b7b70e1d", + "previous": "dc2beb0f1985df3c46dfce9859f37c998a41224dd65b6c74b56a1b3ca1070e3f", + "time": 1792451498.6016607, + "entryHash": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa" + }, + { + "index": 15, + "kind": "progress", + "control": { + "batches": "c294ad7b42d0f2e970f3c757f339b24f6fbdc2982e9a91078a071b121b9325a1", + "cursor": 3626056290, + "epoch": 0, + "global_step": 271200, + "phase": "wikipedia", + "phase_step": 271200, + "pos": [ + 524689002, + 0 + ] + }, + "state": "fa961c767d2e293f12adcd13a3410d345e3bb5952395725963eb2f6e5c228d9e", + "model": "0f122b6387647c6844f6668edc95b2b96efd34885985e80c25a1eb424c7ffa2c", + "previous": "74ad00bd517b70b7fc068a01f255b7edf4930d056c5999dac36ee782e0501ffa", + "time": 1792453682.104504, + "entryHash": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722" + }, + { + "index": 16, + "kind": "progress", + "control": { + "batches": "4d0765884b5a4f4af81e17f0914a728e631c665fa74ec82be39e458f3f4f40c1", + "cursor": 3842372860, + "epoch": 0, + "global_step": 289280, + "phase": "wikipedia", + "phase_step": 289280, + "pos": [ + 573811026, + 2048 + ] + }, + "state": "82d7f95aaed27c4ac54ec6b8de9567a84d818a875673030c4ae0d2d39a860754", + "model": "9a1a2f4ad99c6aac613f620400dc405a8967906e435079c0d8d29622831044fa", + "previous": "02ae49797dac00039040490c47e210a12ab563766377996bea3c01e5fc2a5722", + "time": 1792455885.299576, + "entryHash": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f" + }, + { + "index": 17, + "kind": "progress", + "control": { + "batches": "a219629293cfc4e69c74916379ba790f96b8a5425bd9fb7f4d9e481965ec9374", + "cursor": 4065481916, + "epoch": 0, + "global_step": 307360, + "phase": "wikipedia", + "phase_step": 307360, + "pos": [ + 619889558, + 18944 + ] + }, + "state": "1082ced41232e82ff83506f0c20d887d0ddc3dc7458bc3ace5361a87485e5b60", + "model": "1e77516fc3d4c149c17b5e039ba9a886f520769df7512002fe89a9e5148f7d6e", + "previous": "d18717f336293c9ad84cf6a7fa7c906ce76bb75e2a30bb954ff53f6336fb349f", + "time": 1792458112.5074773, + "entryHash": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7" + }, + { + "index": 18, + "kind": "progress", + "control": { + "batches": "fbdade37939ffab2c5df52a9db88c8bac93a5501861522a30f1a50ebcafb4b3e", + "cursor": 4280170919, + "epoch": 0, + "global_step": 325440, + "phase": "wikipedia", + "phase_step": 325440, + "pos": [ + 669406302, + 0 + ] + }, + "state": "0d4932793bd2279c0a17b3ca736159f89d48898d8a42113d15c7590dfdd85c26", + "model": "4d79bcc6ee8060a9c28a5802c142f972665bafae70901176c9a964bc884f1dee", + "previous": "2a5f5728e37dc780da3f0007096a4f16f6d1ce979541d021f22b30b21576c2f7", + "time": 1792460358.5080163, + "entryHash": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89" + }, + { + "index": 19, + "kind": "progress", + "control": { + "batches": "32161f48812917ee1bed7a4367df261934308045464246622f47dba2ab129f2a", + "cursor": 4492270493, + "epoch": 0, + "global_step": 343520, + "phase": "wikipedia", + "phase_step": 343520, + "pos": [ + 719769225, + 2048 + ] + }, + "state": "cafd56b605b39449655b55534cd4e33616de0d40e6c3434fcd1a54c941e63191", + "model": "9e597fcc4fc74828e30605677e3696a53b77a6976fecdc4f0e06b378e6721ee9", + "previous": "a16cd66f1a0e4cd71e0655dbfa89443148eae0d12114c025edcfbc543e66fb89", + "time": 1792462598.3975008, + "entryHash": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f" + }, + { + "index": 20, + "kind": "progress", + "control": { + "batches": "30c019ac1c173f6d688cdd4bd01e7ceaf9ed1376251e69d87cb9643b4386116b", + "cursor": 4705349595, + "epoch": 0, + "global_step": 361600, + "phase": "wikipedia", + "phase_step": 361600, + "pos": [ + 769153707, + 4608 + ] + }, + "state": "708b48121052bf9bc68bbd67e8613230dd713b9569610a4e66838fe45f35299a", + "model": "f98ab99a90c7734a3f4cf2d60216ed8b1bdc657541ec3374c6f035b0bd42a307", + "previous": "e26d3eb4812c5c4d13625a8a2a72662d202697d0dae3336f24e3a0f7325cc12f", + "time": 1792463768.5816014, + "entryHash": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03" + }, + { + "index": 21, + "kind": "progress", + "control": { + "batches": "09506b60c4342ec5873bba53f2e993f0a46e1b726fc3449ce690e5e4eb43927c", + "cursor": 4919188008, + "epoch": 0, + "global_step": 379680, + "phase": "wikipedia", + "phase_step": 379680, + "pos": [ + 818886901, + 0 + ] + }, + "state": "eb31ec48c4ce9373035fe1229a93190fcfec9060d1bc8520f62ed3dfcab752fa", + "model": "b89d3b185a1fcf21bcc5ef432a26eafc9643eb62b9aa3d8eeb624cbfceeea340", + "previous": "d16e556f9c072f3fe71fba64d787402b5be33427db7c160745d0a58040af1e03", + "time": 1792465514.4536183, + "entryHash": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d" + }, + { + "index": 22, + "kind": "progress", + "control": { + "batches": "27f95fcd8bc5e1b25cea97a17fd58ce6f6771b5b15565014616d4519ab8c8184", + "cursor": 5137669818, + "epoch": 0, + "global_step": 397760, + "phase": "wikipedia", + "phase_step": 397760, + "pos": [ + 867774445, + 512 + ] + }, + "state": "ee97359b8f9928977515e383d98a796d442444b5a07de5c9ec1158d372cc0e49", + "model": "1428e4c6cddc484d305881220b68eb5e04eb851632e1ae7d4f61725e0b24708b", + "previous": "69385671abc45197a2a67165df66e34a51beeaf1d55eedf5daadb3b1d7e6ea5d", + "time": 1792468481.591845, + "entryHash": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0" + }, + { + "index": 23, + "kind": "progress", + "control": { + "batches": "2ac5c320056a9766eaf2f910194309a2e1e3254958d1fe2e4afa92805ee04b28", + "cursor": 5354659564, + "epoch": 0, + "global_step": 415840, + "phase": "wikipedia", + "phase_step": 415840, + "pos": [ + 917385337, + 0 + ] + }, + "state": "296c1763d3421f6991f4f841f4143166bf0910000e5b00673383a4589859483f", + "model": "8948b0defe4c934602354d44e72ceb0b34c46d87bb7a67832fa50ea581b57d16", + "previous": "5522af40717e99883a27f65daa6c7646f1526d9b2aed9862ce88de7267c962a0", + "time": 1792469631.0069373, + "entryHash": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99" + }, + { + "index": 24, + "kind": "progress", + "control": { + "batches": "3fae190c7c836188101a7a77d6046446431892e109590436e4c94a3ed1da8c13", + "cursor": 5571989843, + "epoch": 0, + "global_step": 433920, + "phase": "wikipedia", + "phase_step": 433920, + "pos": [ + 966632574, + 8192 + ] + }, + "state": "6413ef4ca2bf9d47a89302d88662069fde930d732c4df7d0892f30ed64d3756d", + "model": "c553304d081e5817ba0e042bcdef7f1cf9642a290b006edab98778abd18eeedc", + "previous": "44f6db9d7a6224e23d14abcfe7d1a1c4923332e676a302f7cb146cbc7d94aa99", + "time": 1792470779.9569445, + "entryHash": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a" + }, + { + "index": 25, + "kind": "progress", + "control": { + "batches": "b77680f3b1febcf15d5adac2f244b845ea1ca7ae5837e9ce9e57a9b9661033c6", + "cursor": 5786932809, + "epoch": 0, + "global_step": 452000, + "phase": "wikipedia", + "phase_step": 452000, + "pos": [ + 1015978804, + 2048 + ] + }, + "state": "245211135b131b6c5e1940458575033082b4b473fa0033b55816d889c82d656b", + "model": "1f1becfa5470bac9a31962462d4d85647598dc8f75277e2f9c6efe5bc59ada97", + "previous": "05bfdd196077d5855614cf512c1226a3036a071bd251e5d82e9c05751dc9d74a", + "time": 1792471931.509705, + "entryHash": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0" + }, + { + "index": 26, + "kind": "progress", + "control": { + "batches": "44eaf0d468c5578cc89e3999530132727e41ac47cbfcc8fcf80a7621b527cda0", + "cursor": 6003090585, + "epoch": 0, + "global_step": 470080, + "phase": "wikipedia", + "phase_step": 470080, + "pos": [ + 1065027050, + 0 + ] + }, + "state": "7b1ab9b324ac43d99f738ee00e3ef2b514e8dcc82313863c1d8f6e871d42bbb8", + "model": "6a59289ec3928857e0beacc7858e190c0756c72f2cdf48896578bb75720fa72a", + "previous": "01b7d56bc8b58be5cca403ba71dc9fd1d5c6083d5740dae7c912e3a9557e8dd0", + "time": 1792473082.0379794, + "entryHash": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e" + }, + { + "index": 27, + "kind": "progress", + "control": { + "batches": "58cf98d2ec42837434cc698720602c1ed7a427f1b7075de7b56e1957e42d7b7b", + "cursor": 6219792471, + "epoch": 0, + "global_step": 488160, + "phase": "wikipedia", + "phase_step": 488160, + "pos": [ + 1113864691, + 1024 + ] + }, + "state": "0ec654850f2c1288c7850e9e732b52187dcc5f73fffe0f3bc211143e32097e7a", + "model": "5329233dbd65f90b4c368e40c725c59496c03266053f934c4be9c4ef73e3ec73", + "previous": "6b141d06e0138bd34dc59373f5aa0bc92bc363b53c7f013a8c98cc09d411094e", + "time": 1792474229.018975, + "entryHash": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c" + }, + { + "index": 28, + "kind": "progress", + "control": { + "batches": "8e7e2738dac57947ab3894def88fc8bfb84e0b8c55095fcd33d66e2699dabab5", + "cursor": 6444391263, + "epoch": 0, + "global_step": 506240, + "phase": "wikipedia", + "phase_step": 506240, + "pos": [ + 1159432427, + 0 + ] + }, + "state": "e5891f8db717f770246c4255fa6598ba280922c428e9e1e6d814f5d96549cab1", + "model": "d6e1eaab6061fc051ae6de60bb6c95d99d1b98c6bcddfdcbbd593208b7d8a303", + "previous": "339ba1cbaecfdf10cbae5574f973945950123a903c4d3da848cfb7dbdabd940c", + "time": 1792475372.9946525, + "entryHash": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5" + }, + { + "index": 29, + "kind": "progress", + "control": { + "batches": "7b351d64e2a3d2492e668dcfd73d82ce92c0ba04fdd4c3058c95d4e642a6807d", + "cursor": 6671911669, + "epoch": 0, + "global_step": 524320, + "phase": "wikipedia", + "phase_step": 524320, + "pos": [ + 1203647118, + 0 + ] + }, + "state": "ab0f669782c60bf45255e4822fee5fe5425a24b614d10dc0821323ca7325853c", + "model": "3c5459d2bdcdb86d05168a8a78370aa7f772cb6f48ab11e6949164ec6d30fdc0", + "previous": "9f1343558e7f2897d578acf607bf2a7b5abad07e032bb5c4384f6716f19b02e5", + "time": 1792476512.00237, + "entryHash": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b" + }, + { + "index": 30, + "kind": "progress", + "control": { + "batches": "304b2d3afe5a67a5ef902cb8334a55ee6f89877d474b438fb9c94e507814dece", + "cursor": 6901668826, + "epoch": 0, + "global_step": 542400, + "phase": "wikipedia", + "phase_step": 542400, + "pos": [ + 1246875101, + 0 + ] + }, + "state": "baf0f2694f6f7561b6e427c0181978541c19263849163984131f51dad72b6c38", + "model": "bdfa54d7eb2938c8fe3258528e5cb84287c54f889471eb60909e7d8c6aca8061", + "previous": "e24b7d97bcd3f1d31bccc299bde66247d0c84ffd0ebeb2c942a770ab2345908b", + "time": 1792477651.6187513, + "entryHash": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39" + }, + { + "index": 31, + "kind": "base", + "control": { + "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875", + "cursor": 7118121139, + "epoch": 0, + "global_step": 560177, + "phase": "wikipedia", + "phase_step": 560177, + "pos": [ + 1293950757, + 0 + ] + }, + "state": "13d6ad64b2465d42653f250bba0463468c0c81b7980ebc9d97e3b0f95c713bf1", + "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f", + "previous": "2f33f280a48f610d432e95d98fe14d12e81d77ea97d419f39964bb92119fec39", + "time": 1792478775.2381847, + "entryHash": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a" + }, + { + "index": 32, + "kind": "transition", + "control": { + "batches": "dcad901881cb94e24e81efa96ff4282bcf4a23d1ad042fc85d0fe5444c2fc875", + "cursor": 0, + "epoch": 0, + "global_step": 560177, + "phase": "conversation", + "phase_step": 0, + "pos": [ + 0, + 0 + ] + }, + "state": "8987fdd57ba91b044c23bba48cf41b132aa6ec949c4af650ba3180483476941d", + "model": "31c8cd3a4972ffe5733ca19f614cb93c70c135ebc4ce1f053ca54a309b20a65f", + "previous": "5c05e153104c6987ed29668d611765bbfad8aba906bb2d28d258857ea13e5b5a", + "time": 1792478776.1264164, + "entryHash": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8" + }, + { + "index": 33, + "kind": "epoch", + "control": { + "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67", + "cursor": 1278137, + "epoch": 0, + "global_step": 560324, + "phase": "conversation", + "phase_step": 147, + "pos": [ + 849666, + 0 + ] + }, + "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03", + "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e", + "previous": "98e7266fe9e50a0ad993bfbba932f7c24f3f1e30d822517995b1d6092a980ec8", + "time": 1792478785.6187253, + "entryHash": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035" + }, + { + "index": 34, + "kind": "transition", + "control": { + "batches": "367fdeaa7d8de8113d22b27f162652c9cea078879dcdad4cd27555239df9ba67", + "cursor": 0, + "epoch": 1, + "global_step": 560324, + "phase": "conversation", + "phase_step": 0, + "pos": [ + 0, + 0 + ] + }, + "state": "47e181e530d97201584906d931d1e5cfcd25ec000acfc6381c1162b102036b03", + "model": "fa2903c63e2fedd52ff6e53cab2c16921f6dae52855700caf8f7d23358172b1e", + "previous": "94eee8a739a2edf0bc158091e8bd9299b83e82021cba2679f4fcec0b86c36035", + "time": 1792478786.6568494, + "entryHash": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f" + }, + { + "index": 35, + "kind": "epoch", + "control": { + "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023", + "cursor": 1278137, + "epoch": 1, + "global_step": 560471, + "phase": "conversation", + "phase_step": 147, + "pos": [ + 849666, + 0 + ] + }, + "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2", + "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda", + "previous": "65d9e7fac71a421b97b20c56fbb9d8997b543f09752763e53dabac4817950f5f", + "time": 1792478796.331579, + "entryHash": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042" + }, + { + "index": 36, + "kind": "transition", + "control": { + "batches": "5221cd468bc3661e4455cda6c9602d2ab155ea669e751927c77eb0a36c497023", + "cursor": 0, + "epoch": 2, + "global_step": 560471, + "phase": "conversation", + "phase_step": 0, + "pos": [ + 0, + 0 + ] + }, + "state": "e80d5db69e77bbe5e7ffc7c829631aa1871c8fa5230b8eb53d85b4a226420ab2", + "model": "eb2d6225628c40d6b87bc5c2f95b4838ba58c3d9f1bd40c4def3464c40e3fbda", + "previous": "8c20bd99e5408e6240a51d71cf099f73b1d47eea5c043e4a027dffb397361042", + "time": 1792478797.354915, + "entryHash": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb" + }, + { + "index": 37, + "kind": "final", + "control": { + "batches": "1fd22db0ab89ab98045f8c4b32ce4e4d55453163390ec9ebd5792dfc38fd5a52", + "cursor": 1278137, + "epoch": 2, + "global_step": 560618, + "phase": "conversation", + "phase_step": 147, + "pos": [ + 849666, + 0 + ] + }, + "state": "934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200", + "model": "ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b", + "previous": "68d517a10e2641b690149d430e9e47fd8e4c97bfb5ae33b81c25cb29492dedcb", + "time": 1792478807.0463226, + "entryHash": "9edbcaddbb08ed20f3d655ac59d0aa57f6339a702d0fa1d3422856f5d8251a51" + } + ], + "verifications": { + "totalChecks": 46, + "uniqueSegments": 37, + "projectChecksCount": 46, + "independentChecksCount": 0, + "coverage": [ + { + "segment": 0, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 0 + } + ] + }, + { + "segment": 1, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 1 + } + ] + }, + { + "segment": 2, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 2 + } + ] + }, + { + "segment": 3, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 3 + } + ] + }, + { + "segment": 4, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 4 + } + ] + }, + { + "segment": 5, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 5 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0 fast loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 5 + } + ] + }, + { + "segment": 6, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 6 + } + ] + }, + { + "segment": 7, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 7 + } + ] + }, + { + "segment": 8, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 8 + } + ] + }, + { + "segment": 9, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 9 + } + ] + }, + { + "segment": 10, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 10 + } + ] + }, + { + "segment": 11, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 11 + } + ] + }, + { + "segment": 12, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 12 + } + ] + }, + { + "segment": 13, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 13 + } + ] + }, + { + "segment": 14, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 14 + } + ] + }, + { + "segment": 15, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 15 + } + ] + }, + { + "segment": 16, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 16 + } + ] + }, + { + "segment": 17, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 17 + } + ] + }, + { + "segment": 18, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 18 + } + ] + }, + { + "segment": 19, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 19 + } + ] + }, + { + "segment": 20, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 20 + } + ] + }, + { + "segment": 21, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 21 + }, + { + "checker": "project fresh machine public files only", + "code": "verify_segment.sh from the release", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 21 + } + ] + }, + { + "segment": 22, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 22 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 22 + } + ] + }, + { + "segment": 23, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 23 + } + ] + }, + { + "segment": 24, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 24 + } + ] + }, + { + "segment": 25, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 25 + } + ] + }, + { + "segment": 26, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 26 + } + ] + }, + { + "segment": 27, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 27 + } + ] + }, + { + "segment": 28, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 28 + } + ] + }, + { + "segment": 29, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 29 + } + ] + }, + { + "segment": 30, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 30 + } + ] + }, + { + "segment": 31, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 31 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 31 + } + ] + }, + { + "segment": 32, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 32 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 32 + } + ] + }, + { + "segment": 33, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 33 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 33 + } + ] + }, + { + "segment": 34, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 34 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 34 + } + ] + }, + { + "segment": 35, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 35 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 35 + } + ] + }, + { + "segment": 36, + "projectResult": "MATCH", + "independentResult": null, + "checks": [ + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 36 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 36 + } + ] + } + ], + "rawChecks": [ + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 0 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 1 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 2 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 3 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 4 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 5 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 6 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 7 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 8 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 9 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 10 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 11 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 12 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 13 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 14 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 15 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 16 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 17 + }, + { + "checker": "project second pod", + "code": "ovl.py 202ac6ce", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 18 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 19 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 20 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 21 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 22 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 23 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 24 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 25 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 26 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 27 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 28 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 29 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 30 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 31 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 32 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 33 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 34 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 35 + }, + { + "checker": "project second pod", + "code": "ovl.py c4a942c0 reference loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 36 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 22 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 31 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 32 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 33 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 34 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 35 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 36 + }, + { + "checker": "project training pod", + "code": "ovl.py c4a942c0 fast loader", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 5 + }, + { + "checker": "project fresh machine public files only", + "code": "verify_segment.sh from the release", + "driver": "595.91.07", + "gpu": "NVIDIA GeForce RTX 5090", + "result": "MATCH", + "segment": 21 + } + ] + }, + "hardwareMap": [ + { + "segment": 32, + "result": "MATCH", + "hardware": "NVIDIA GeForce RTX 5090 (Blackwell)", + "driver": "595.91.07", + "software": "torch 2.8.0+cu128", + "note": "training GPU type; control for this probe" + }, + { + "segment": 32, + "result": "MISMATCH", + "hardware": "NVIDIA GeForce RTX 4090 (Ada)", + "driver": "595.91.07", + "software": "torch 2.8.0+cu128", + "note": "same software, different architecture" + }, + { + "segment": 32, + "result": "MISMATCH", + "hardware": "NVIDIA H100 80GB HBM3 (Hopper)", + "driver": "595.91.07", + "software": "torch 2.8.0+cu128", + "note": "same software, different architecture" + }, + { + "segment": 32, + "result": "MISMATCH", + "hardware": "x86_64 CPU", + "driver": "none", + "software": "torch 2.14.0+cpu", + "note": "different hardware and software" + }, + { + "segment": "all 37", + "result": "MATCH", + "hardware": "NVIDIA GeForce RTX 5090 (Blackwell)", + "driver": "595.91.07", + "software": "torch 2.8.0+cu128", + "note": "training ran on driver 570.195.03 for segments 0-9, 595.91.07 after" + } + ], + "anchor": { + "chain_entries": 38, + "chain_head_index": 37, + "chain_head_sha256": "9edbcaddbb08ed20f3d655ac59d0aa57f6339a702d0fa1d3422856f5d8251a51", + "chain_jsonl_sha256": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327", + "commit": "1dc7fb2a430d24c06c970309d332c4891916548c", + "dataset": "AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence", + "final_model": "ec9a2b31ca524613f791aba00f4f7f31e4a7bf4a8a921e0deb81c1a922d0958b", + "final_state": "934d681c99e5c3e10617e82dbbb0ae0ddd1ad4e32cf45e8e3a6d2ed94b69f200", + "path": "release/simple-run", + "release_hashes_sha256": "479ce030fa8022f0f92262849f88dfde4c9cf2a0748b8830357f3aa277080e8d", + "schema": "ovl.release-anchor.v1", + "timestamp": "2026-10-20 14:38:43 UTC", + "authorities": [ + "DigiCert", + "FreeTSA (RFC 3161)" + ] + }, + "exclusion": { + "removedArticle": "3I/ATLAS", + "originalRemovedLoss": 3.3604, + "forkRemovedLoss": 3.386, + "removedLossDelta": 0.0256, + "originalControlLossMean": 2.871, + "forkControlLossMean": 2.8712, + "controlLossDelta": 0.0002, + "controlArticlesCount": 50, + "evidencePath": "release/unlearning-3i-atlas/" + }, + "releaseHashes": { + "base-model.pt": "976c62e8b28db786c38dc2ff969339603d0ee917d830f2815d9e858d2a3c0ce3", + "chain.jsonl": "c1f867e16d0660c611186183863cc5626e3510b046d52e617c3953beb8f8a327", + "ckpt-00000.pt": "3dccf4a6d258ff5e150ee1ed590f4baff099e5a368d580e610ecf238b4ba8c22", + "ckpt-00001.pt": "ba524fd9691c4a849d1a3dac177af426df36d8e04d9c75fba2dbf036a4b515f9", + "ckpt-00002.pt": "627106799e630a9297770b31b0e1f66b1418215eea50c1cd3f3a23c48e138a33", + "ckpt-00003.pt": "0b64c3f0208d636b19bdf5970810c27cb2ceab33f18153915d64f6493201bc10", + "ckpt-00004.pt": "68f07c741473f7ad0c2c61d52dc25c4d8a9c441382d348f9c1a97d215bba452e", + "ckpt-00005.pt": "29cdefeb28098ba4572869655b58c9dd2e771edc3717f0112d700477b74defb8", + "ckpt-00006.pt": "3e861cd5457c1a1566c8ebcee2a712feca2f3e5603ad46436d393aca5cbb5999", + "ckpt-00007.pt": "400734c784b59c9363fdbdd745f7f0f6d70c1be09d2c747976bc2b4fae01b64b", + "ckpt-00008.pt": "fe5352356351e4d9e4b0abd59f279c7a2ed98888177fbb773fd1f1983fefe83f", + "ckpt-00009.pt": "41819daf70a409e200f5189ab45ae96293716794733ad534e4843ac3f8b1982e", + "ckpt-00010.pt": "75cd5863903d9f595e2d50cacea3ec0530f41c154d4ec8817f41376b6f222e3f", + "ckpt-00011.pt": "46ece4b519e8624a2b41856b1ecfa9a5daf4994616a9bdd8d941625cb09a32ed", + "ckpt-00012.pt": "8b0e19692ccc6c6e6e0eb745633ae2dd2c4e86d0ca84b8ea1c7f1f81a888b892", + "ckpt-00013.pt": "3ac79c55fe528bcc62bd7a7a047e2b2a19e2d2e494c85e26301b0fc79f345aee", + "ckpt-00014.pt": "ad933ae52b14ff5de72624c5dc7af9b3e5464155b9c3ed84bd43bd5be4f737c3", + "ckpt-00015.pt": "2cfddc6c26fb7e8dc99c94b6fb39007a4937b67e1c8d852f2561d990e857cb62", + "ckpt-00016.pt": "3729909ae0f85b79377956ad8defdaaeceac0cd000a1c47e582f38685f4158d6", + "ckpt-00017.pt": "9f8537d432d78b254dcba86e7bd987246d928bbc837950ffe2536ba989747c41", + "ckpt-00018.pt": "a09df5692aac7e42a0430fd225c75937bf75c85a9dfb77b899b4cb956a8c51d1", + "ckpt-00019.pt": "ef18f34f8ac17a2581193ffc681a927f655bdadce4c6ca2de0a095d72094bb24", + "ckpt-00020.pt": "6bda17b7f79347cc57cb1325215a3a68f9f2357ee5b97f2c88e353189244fcdf", + "ckpt-00021.pt": "7df62e3801530777a4491bcecb0199a2b5628a9de61da30f5f6513c74c028095", + "ckpt-00022.pt": "23d9271d4f4c49e8e04a13f498ed0a89d57c3f80705044c2c8fe10eecc895896", + "ckpt-00023.pt": "2b68d53231a0d3a639312ed45eeb2afef3720f93824819843dd2c9fb68f2fc4c", + "ckpt-00024.pt": "8a06f96345a0ff23933d6b946a4fc88ad63a6b43a618a91a1639267cf1c0e23b", + "ckpt-00025.pt": "7bed06bf3566e18595a190bc1418fe5735689a2c47d280d857c0a5f68ba73a7f", + "ckpt-00026.pt": "31e21be4135f53a912312fae5f26d9b2eefc344171b8935e295c655f49c3b701", + "ckpt-00027.pt": "2efcee93267b438152c35cfc1975fd0d8d2dcec804b2713fcc11bdd8602752cf", + "ckpt-00028.pt": "671cf6928fc370a464fade45cf5565a65c019c9888b6c9d8962230364cc4c5b4", + "ckpt-00029.pt": "082195ad124ad61287e94f224c6672b2175b1c1c35f06baee2b56adbc12f92da", + "ckpt-00030.pt": "febe492c2c87335b078c910894172bcf8f572b853d807b8f24da99e9e0127979", + "ckpt-00031.pt": "c687187b7daaa97d0fd8c96df302313e051febc29d64b5ef4d5b5775d684244b", + "ckpt-00032.pt": "b49bfa976a6aa59fc54b9511fccc4745a4493b81cc58a3ff310ffecf7a92f45e", + "ckpt-00033.pt": "8fa1f26811ef37b235c968c4204044983895b217e00db731d57f3a2cecda179e", + "ckpt-00034.pt": "5fe1e5af0d612046c7617d079181090e3ac0898411fe39900e05346c90b29aeb", + "ckpt-00035.pt": "4766216588d357cdbe5bdd35e4b9534317d59f8b1273b5b722a390e748ae3beb", + "ckpt-00036.pt": "1ca4bd559c51e9d83ba2ea84a85e518e0309d0844d964535868339a16b66e239", + "ckpt-00037.pt": "88947898dab959fd82f954f81681103bac7f6b770f4bcc13d6eac29ca1795ecb", + "conversation-model.pt": "149cfae13c4523a1010c52161e13babf76c9ddc01f34fa1a8b580677b733a64c", + "recipe.json": "28a2fb407a5582ae95c9e9b0bba2c14df946e87bba037800399c6059256b6e6d", + "ovl-23m-chat.gguf": "541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de", + "Modelfile": "df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b" + } +} diff --git a/frontend/scripts/fetch-evidence.mjs b/frontend/scripts/fetch-evidence.mjs new file mode 100644 index 00000000..182a6bec --- /dev/null +++ b/frontend/scripts/fetch-evidence.mjs @@ -0,0 +1,189 @@ +// Manual script: node scripts/fetch-evidence.mjs +// Pinned to Hugging Face dataset revision 96dc282a. +// Writes public/data/evidence.json with source hashes and validated numbers. + +import { createHash } from 'node:crypto'; +import { mkdir, writeFile } from 'node:fs/promises'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const DATASET = 'AOSSIE/openverifiable-enwiki-20260901-20260918-r1-evidence'; +const REVISION = '96dc282a'; +const BASE_URL = `https://huggingface.co/datasets/${DATASET}/raw/${REVISION}/`; + +const PREP_PATH = 'prepared/8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68/preparation.json'; + +const FILES_TO_FETCH = [ + 'release/simple-run/chain.jsonl', + 'release/simple-run/verifications.jsonl', + 'release/simple-run/hardware-map.jsonl', + 'release/simple-run/release-hashes.txt', + 'release/simple-run/anchor.json', + 'release/simple-run/README.md', + 'release/unlearning-3i-atlas/loo-results.json', + PREP_PATH, +]; + +function sha256(content) { + return createHash('sha256').update(content).digest('hex'); +} + +async function fetchFile(relPath) { + const url = `${BASE_URL}${relPath}`; + const res = await fetch(url); + if (!res.ok) { + throw new Error(`Failed to fetch ${url}: HTTP ${res.status} ${res.statusText}`); + } + const text = await res.text(); + return { + path: relPath, + text, + sha256: sha256(text), + }; +} + +export async function buildEvidenceData() { + console.log(`Fetching pinned evidence from Hugging Face (${DATASET} @ ${REVISION})...`); + const fetched = {}; + for (const relPath of FILES_TO_FETCH) { + process.stdout.write(` Fetching ${relPath}... `); + const file = await fetchFile(relPath); + fetched[relPath] = file; + console.log(`OK (${file.sha256.slice(0, 8)})`); + } + + // 1. Parse chain.jsonl + const chainRawLines = fetched['release/simple-run/chain.jsonl'].text.trim().split('\n'); + const chain = chainRawLines.map((line) => { + const entry = JSON.parse(line); + const entryHash = sha256(line); + return { + index: entry.index, + kind: entry.kind, + control: entry.control, + state: entry.state, + model: entry.model, + previous: entry.previous, + time: entry.time, + entryHash, + }; + }); + + if (chain.length !== 38) { + throw new Error(`Expected 38 chain entries, found ${chain.length}`); + } + for (let i = 1; i < chain.length; i++) { + if (chain[i].previous !== chain[i - 1].entryHash) { + throw new Error(`Broken chain previous link at index ${i}`); + } + } + + // 2. Parse verifications.jsonl + const verificationsRawLines = fetched['release/simple-run/verifications.jsonl'].text.trim().split('\n'); + const rawVerifications = verificationsRawLines.map(line => JSON.parse(line)); + + // Segment coverage + const segmentCoverage = []; + for (let s = 0; s < 37; s++) { + const checksForSegment = rawVerifications.filter(v => v.segment === s); + const projectMatch = checksForSegment.some(c => c.checker.startsWith('project') && c.result === 'MATCH'); + const independentChecks = checksForSegment.filter(c => !c.checker.startsWith('project')); + + segmentCoverage.push({ + segment: s, + projectResult: projectMatch ? 'MATCH' : 'MISMATCH', + independentResult: independentChecks.length > 0 ? (independentChecks.every(c => c.result === 'MATCH') ? 'MATCH' : 'MISMATCH') : null, + checks: checksForSegment, + }); + } + + // 3. Parse hardware-map.jsonl + const hwRawLines = fetched['release/simple-run/hardware-map.jsonl'].text.trim().split('\n'); + const hardwareMap = hwRawLines.map(line => JSON.parse(line)); + + // 4. Parse release-hashes.txt + const releaseHashesText = fetched['release/simple-run/release-hashes.txt'].text.trim().split('\n'); + const releaseHashes = {}; + for (const line of releaseHashesText) { + const parts = line.trim().split(/\s+/); + if (parts.length >= 2) { + releaseHashes[parts[1]] = parts[0]; + } + } + + // Also include the GitHub release v1.0.1 model assets + releaseHashes['ovl-23m-chat.gguf'] = '541d49c97b87cd4ed0acb90b4327535ee20b8c11c452e2583d460154e9d980de'; + releaseHashes['Modelfile'] = 'df4dacfc3191e56b1dc1195764ea66ca1a7695856be04ecec17d8dde4c66fc8b'; + + // 5. Parse anchor.json + const anchor = JSON.parse(fetched['release/simple-run/anchor.json'].text); + + // 6. Parse preparation.json + const prep = JSON.parse(fetched[PREP_PATH].text); + const preparation = { + articles: prep.corpus.counts.included, + wikipediaTargets: prep.streams.wikipedia.targets, + conversations: prep.conversation_selection.conversations.train, + trainingLoopLines: '~630 lines', + preparedDataId: '8de1d60065b1e8e084c31c202e47367f28c8b89f11b4e895873f775bc0f7ba68', + }; + + // 7. Parse loo-results.json + const loo = JSON.parse(fetched['release/unlearning-3i-atlas/loo-results.json'].text); + const exclusion = { + removedArticle: '3I/ATLAS', + originalRemovedLoss: Number(loo.original_base.removed_loss[0].toFixed(4)), + forkRemovedLoss: Number(loo.fork_base.removed_loss[0].toFixed(4)), + removedLossDelta: Number((loo.fork_base.removed_loss[0] - loo.original_base.removed_loss[0]).toFixed(4)), + originalControlLossMean: Number(loo.original_base.control_loss_mean.toFixed(4)), + forkControlLossMean: Number(loo.fork_base.control_loss_mean.toFixed(4)), + controlLossDelta: Number((loo.fork_base.control_loss_mean - loo.original_base.control_loss_mean).toFixed(4)), + controlArticlesCount: loo.control_documents, + evidencePath: 'release/unlearning-3i-atlas/', + }; + + const evidenceData = { + schemaVersion: 1, + dataset: DATASET, + revision: REVISION, + fetchedAt: new Date().toISOString(), + sourceHashes: Object.fromEntries( + Object.entries(fetched).map(([path, f]) => [path, f.sha256]) + ), + preparation, + chain, + verifications: { + totalChecks: rawVerifications.length, + uniqueSegments: 37, + projectChecksCount: rawVerifications.filter(v => v.checker.startsWith('project')).length, + independentChecksCount: rawVerifications.filter(v => !v.checker.startsWith('project')).length, + coverage: segmentCoverage, + rawChecks: rawVerifications, + }, + hardwareMap, + anchor: { + ...anchor, + timestamp: '2026-10-20 14:38:43 UTC', + authorities: ['DigiCert', 'FreeTSA (RFC 3161)'], + }, + exclusion, + releaseHashes, + }; + + return evidenceData; +} + +if (process.argv[1] === fileURLToPath(import.meta.url)) { + try { + const data = await buildEvidenceData(); + const outPath = join(__dirname, '../public/data/evidence.json'); + await mkdir(dirname(outPath), { recursive: true }); + await writeFile(outPath, JSON.stringify(data, null, 2) + '\n', 'utf8'); + console.log(`\nWrote evidence data to ${outPath}`); + } catch (err) { + console.error('Failed to fetch evidence:', err); + process.exit(1); + } +} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 00000000..86deaddd --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,101 @@ +import React, { useEffect, useState } from 'react'; +import type { EvidenceData } from './data/contracts'; +import { validateEvidence, SnapshotError } from './data/validate'; +import { Header } from './components/Header'; +import { Contents } from './components/Contents'; +import { Lead, KeyFacts } from './components/Lead'; +import { Overview } from './components/Overview'; +import { CheckLadder } from './components/CheckLadder'; +import { Verification } from './components/Verification'; +import { TrainingTimeline } from './components/TrainingTimeline'; +import { VerifiableExclusion } from './components/VerifiableExclusion'; +import { Downloads } from './components/Downloads'; +import { Faq } from './components/Faq'; +import { Footer } from './components/Footer'; +import { HowItWorks } from './components/HowItWorks'; + +export const App: React.FC = () => { + const [evidence, setEvidence] = useState(null); + const [error, setError] = useState(null); + + useEffect(() => { + let active = true; + + async function loadEvidence() { + try { + const res = await fetch('data/evidence.json'); + if (!res.ok) { + throw new SnapshotError(`Failed to load evidence.json: HTTP ${res.status}`); + } + const json = await res.json(); + const validated = validateEvidence(json); + if (active) { + setEvidence(validated); + } + } catch (err) { + if (active) { + setError(err instanceof Error ? err.message : String(err)); + } + } + } + + loadEvidence(); + return () => { + active = false; + }; + }, []); + + if (error) { + return ( +
+

Snapshot unavailable or invalid

+

{error}

+ +
+ ); + } + + if (!evidence) { + return ( +
+

Loading display snapshot…

+
+ ); + } + + return ( + <> + + Skip to content + + +
+ +
+ +
+ +
+
+
+ + +
+ + + + + + + + +
+
+ +