From c975fe5bc717605a640cfdaa1c0efdf43e81a06d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Mar 2026 12:40:10 +0000 Subject: [PATCH 001/156] chore(deps): update github-actions (major) (#27225) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-mobile.yml | 4 +-- .github/workflows/cli.yml | 12 ++++---- .github/workflows/docker.yml | 4 +-- .github/workflows/docs-build.yml | 4 +-- .github/workflows/fix-format.yml | 4 +-- .github/workflows/merge-translations.yml | 2 +- .github/workflows/prepare-release.yml | 8 +++--- .github/workflows/preview-label.yaml | 6 ++-- .github/workflows/sdk.yml | 2 +- .github/workflows/test.yml | 36 ++++++++++++------------ 10 files changed, 41 insertions(+), 41 deletions(-) diff --git a/.github/workflows/build-mobile.yml b/.github/workflows/build-mobile.yml index 44645c1e1b..6fb7046532 100644 --- a/.github/workflows/build-mobile.yml +++ b/.github/workflows/build-mobile.yml @@ -153,7 +153,7 @@ jobs: fi - name: Publish Android Artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: release-apk-signed path: mobile/build/app/outputs/flutter-apk/*.apk @@ -291,7 +291,7 @@ jobs: security delete-keychain build.keychain || true - name: Upload IPA artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: ios-release-ipa path: mobile/ios/Runner.ipa diff --git a/.github/workflows/cli.yml b/.github/workflows/cli.yml index d3eb66810e..67c84619c2 100644 --- a/.github/workflows/cli.yml +++ b/.github/workflows/cli.yml @@ -42,7 +42,7 @@ jobs: token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 @@ -83,13 +83,13 @@ jobs: token: ${{ steps.token.outputs.token }} - name: Set up QEMU - uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0 + uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 + uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0 if: ${{ !github.event.pull_request.head.repo.fork }} with: registry: ghcr.io @@ -104,7 +104,7 @@ jobs: - name: Generate docker image tags id: metadata - uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5.10.0 + uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6.0.0 with: flavor: | latest=false @@ -115,7 +115,7 @@ jobs: type=raw,value=latest,enable=${{ github.event_name == 'release' }} - name: Build and push image - uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6.19.2 + uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0 with: file: cli/Dockerfile platforms: linux/amd64,linux/arm64 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 2573ba8123..3321702b2f 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -60,7 +60,7 @@ jobs: suffix: ['', '-cuda', '-rocm', '-openvino', '-armnn', '-rknn'] steps: - name: Login to GitHub Container Registry - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -90,7 +90,7 @@ jobs: suffix: [''] steps: - name: Login to GitHub Container Registry - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0 with: registry: ghcr.io username: ${{ github.repository_owner }} diff --git a/.github/workflows/docs-build.yml b/.github/workflows/docs-build.yml index 02d7b3456a..bbac8da993 100644 --- a/.github/workflows/docs-build.yml +++ b/.github/workflows/docs-build.yml @@ -67,7 +67,7 @@ jobs: fetch-depth: 0 - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 @@ -86,7 +86,7 @@ jobs: run: pnpm build - name: Upload build output - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: docs-build-output path: docs/build/ diff --git a/.github/workflows/fix-format.yml b/.github/workflows/fix-format.yml index 0091bcef89..ae8e0b29ca 100644 --- a/.github/workflows/fix-format.yml +++ b/.github/workflows/fix-format.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Generate a token id: generate-token - uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1 + uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -29,7 +29,7 @@ jobs: persist-credentials: true - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 diff --git a/.github/workflows/merge-translations.yml b/.github/workflows/merge-translations.yml index 392dec5e37..fcda857eda 100644 --- a/.github/workflows/merge-translations.yml +++ b/.github/workflows/merge-translations.yml @@ -31,7 +31,7 @@ jobs: - name: Generate a token id: generate_token if: ${{ inputs.skip != true }} - uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1 + uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index e3e6659140..23573a9045 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -50,7 +50,7 @@ jobs: steps: - name: Generate a token id: generate-token - uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1 + uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -66,7 +66,7 @@ jobs: uses: astral-sh/setup-uv@6ee6290f1cbc4156c0bdd66691b2c144ef8df19a # v7.4.0 - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 @@ -124,7 +124,7 @@ jobs: steps: - name: Generate a token id: generate-token - uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1 + uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -136,7 +136,7 @@ jobs: persist-credentials: false - name: Download APK - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: release-apk-signed github-token: ${{ steps.generate-token.outputs.token }} diff --git a/.github/workflows/preview-label.yaml b/.github/workflows/preview-label.yaml index dc6f0eff0a..137598d64e 100644 --- a/.github/workflows/preview-label.yaml +++ b/.github/workflows/preview-label.yaml @@ -19,7 +19,7 @@ jobs: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - - uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2 + - uses: mshick/add-pr-comment@ffd016c7e151d97d69d21a843022fd4cd5b96fe5 # v3.9.0 with: github-token: ${{ steps.token.outputs.token }} message-id: 'preview-status' @@ -48,14 +48,14 @@ jobs: name: 'preview' }) - - uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2 + - uses: mshick/add-pr-comment@ffd016c7e151d97d69d21a843022fd4cd5b96fe5 # v3.9.0 if: ${{ github.event.pull_request.head.repo.fork }} with: github-token: ${{ steps.token.outputs.token }} message-id: 'preview-status' message: 'PRs from forks cannot have preview environments.' - - uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2 + - uses: mshick/add-pr-comment@ffd016c7e151d97d69d21a843022fd4cd5b96fe5 # v3.9.0 if: ${{ !github.event.pull_request.head.repo.fork }} with: github-token: ${{ steps.token.outputs.token }} diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index 2da7d79b26..74a4eac44d 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -30,7 +30,7 @@ jobs: token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 # Setup .npmrc file to publish to npm - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2a2ebe2389..c4d4545dab 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -75,7 +75,7 @@ jobs: token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -119,7 +119,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -166,7 +166,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -208,7 +208,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -252,7 +252,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -290,7 +290,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -338,7 +338,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -385,7 +385,7 @@ jobs: submodules: 'recursive' token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -424,7 +424,7 @@ jobs: submodules: 'recursive' token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -464,7 +464,7 @@ jobs: run: docker compose logs --no-color > docker-compose-logs.txt working-directory: ./e2e - name: Archive Docker logs - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 if: always() with: name: e2e-server-docker-logs-${{ matrix.runner }} @@ -496,7 +496,7 @@ jobs: submodules: 'recursive' token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -522,7 +522,7 @@ jobs: run: pnpm test:web if: ${{ !cancelled() }} - name: Archive e2e test (web) results - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 if: success() || failure() with: name: e2e-web-test-results-${{ matrix.runner }} @@ -533,7 +533,7 @@ jobs: run: pnpm test:web:ui if: ${{ !cancelled() }} - name: Archive ui test (web) results - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 if: success() || failure() with: name: e2e-ui-test-results-${{ matrix.runner }} @@ -544,7 +544,7 @@ jobs: run: pnpm test:web:maintenance if: ${{ !cancelled() }} - name: Archive maintenance tests (web) results - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 if: success() || failure() with: name: e2e-maintenance-isolated-test-results-${{ matrix.runner }} @@ -554,7 +554,7 @@ jobs: run: docker compose logs --no-color > docker-compose-logs.txt working-directory: ./e2e - name: Archive Docker logs - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 if: always() with: name: e2e-web-docker-logs-${{ matrix.runner }} @@ -661,7 +661,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -712,7 +712,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: @@ -774,7 +774,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Node uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: From 4af9edc20b63f368e79a0544e9ba06ccea058c39 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Mar 2026 14:31:00 +0100 Subject: [PATCH 002/156] chore(deps): update github-actions (#27215) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-mobile.yml | 18 +++++----- .github/workflows/cache-cleanup.yml | 2 +- .github/workflows/check-openapi.yml | 2 +- .github/workflows/cli.yml | 4 +-- .github/workflows/close-duplicates.yml | 2 +- .github/workflows/codeql-analysis.yml | 8 ++--- .github/workflows/docker.yml | 8 ++--- .github/workflows/docs-build.yml | 6 ++-- .github/workflows/docs-deploy.yml | 6 ++-- .github/workflows/docs-destroy.yml | 4 +-- .github/workflows/pr-label-validation.yml | 4 +-- .github/workflows/pr-labeler.yml | 2 +- .github/workflows/prepare-release.yml | 4 +-- .github/workflows/preview-label.yaml | 4 +-- .github/workflows/sdk.yml | 2 +- .github/workflows/static_analysis.yml | 8 ++--- .github/workflows/test.yml | 40 +++++++++++------------ .github/workflows/weblate-lock.yml | 6 ++-- 18 files changed, 65 insertions(+), 65 deletions(-) diff --git a/.github/workflows/build-mobile.yml b/.github/workflows/build-mobile.yml index 6fb7046532..deda195b84 100644 --- a/.github/workflows/build-mobile.yml +++ b/.github/workflows/build-mobile.yml @@ -51,14 +51,14 @@ jobs: should_run: ${{ steps.check.outputs.should_run }} steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: Check what should run id: check - uses: immich-app/devtools/actions/pre-job@eed0f8b8165ffcb951f2ba854b2dd031935e1d73 # pre-job-action-v2.0.2 + uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 with: github-token: ${{ steps.token.outputs.token }} filters: | @@ -79,7 +79,7 @@ jobs: steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -103,7 +103,7 @@ jobs: - name: Restore Gradle Cache id: cache-gradle-restore - uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: | ~/.gradle/caches @@ -114,7 +114,7 @@ jobs: key: build-mobile-gradle-${{ runner.os }}-main - name: Setup Flutter SDK - uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0 + uses: subosito/flutter-action@0ca7a949e71ae44c8e688a51c5e7e93b2c87e295 # v2.22.0 with: channel: 'stable' flutter-version-file: ./mobile/pubspec.yaml @@ -160,7 +160,7 @@ jobs: - name: Save Gradle Cache id: cache-gradle-save - uses: actions/cache/save@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 if: github.ref == 'refs/heads/main' with: path: | @@ -185,13 +185,13 @@ jobs: run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer - name: Checkout code - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: ${{ inputs.ref || github.sha }} persist-credentials: false - name: Setup Flutter SDK - uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2 + uses: subosito/flutter-action@0ca7a949e71ae44c8e688a51c5e7e93b2c87e295 # v2.22.0 with: channel: 'stable' flutter-version-file: ./mobile/pubspec.yaml @@ -210,7 +210,7 @@ jobs: working-directory: ./mobile - name: Setup Ruby - uses: ruby/setup-ruby@v1 + uses: ruby/setup-ruby@319994f95fa847cf3fb3cd3dbe89f6dcde9f178f # v1.295.0 with: ruby-version: '3.3' bundler-cache: true diff --git a/.github/workflows/cache-cleanup.yml b/.github/workflows/cache-cleanup.yml index 3de4676622..e093cf9bf0 100644 --- a/.github/workflows/cache-cleanup.yml +++ b/.github/workflows/cache-cleanup.yml @@ -19,7 +19,7 @@ jobs: actions: write steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} diff --git a/.github/workflows/check-openapi.yml b/.github/workflows/check-openapi.yml index b725b45f6c..dbf0036746 100644 --- a/.github/workflows/check-openapi.yml +++ b/.github/workflows/check-openapi.yml @@ -24,7 +24,7 @@ jobs: persist-credentials: false - name: Check for breaking API changes - uses: oasdiff/oasdiff-action/breaking@748daafaf3aac877a36307f842a48d55db938ac8 # v0.0.31 + uses: oasdiff/oasdiff-action/breaking@2a37bc82462349c03a533b8b608bebbaf57b3e60 # v0.0.33 with: base: https://raw.githubusercontent.com/${{ github.repository }}/main/open-api/immich-openapi-specs.json revision: open-api/immich-openapi-specs.json diff --git a/.github/workflows/cli.yml b/.github/workflows/cli.yml index 67c84619c2..9d08d3f816 100644 --- a/.github/workflows/cli.yml +++ b/.github/workflows/cli.yml @@ -31,7 +31,7 @@ jobs: working-directory: ./cli steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -71,7 +71,7 @@ jobs: steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} diff --git a/.github/workflows/close-duplicates.yml b/.github/workflows/close-duplicates.yml index 1b18c0c5e1..b73ba5e634 100644 --- a/.github/workflows/close-duplicates.yml +++ b/.github/workflows/close-duplicates.yml @@ -35,7 +35,7 @@ jobs: needs: [get_body, should_run] if: ${{ needs.should_run.outputs.should_run == 'true' }} container: - image: ghcr.io/immich-app/mdq:main@sha256:4f9860d04c88f7f87861f8ee84bfeedaec15ed7ca5ca87bc7db44b036f81645f + image: ghcr.io/immich-app/mdq:main@sha256:df7188ba88abb0800d73cc97d3633280f0c0c3d4c441d678225067bf154150fb outputs: checked: ${{ steps.get_checkbox.outputs.checked }} steps: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 3450fe96bb..83c6c65cac 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -57,7 +57,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 + uses: github/codeql-action/init@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -70,7 +70,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 + uses: github/codeql-action/autobuild@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -83,6 +83,6 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 + uses: github/codeql-action/analyze@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 with: category: '/language:${{matrix.language}}' diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 3321702b2f..a9a873ac7d 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -23,14 +23,14 @@ jobs: should_run: ${{ steps.check.outputs.should_run }} steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: Check what should run id: check - uses: immich-app/devtools/actions/pre-job@eed0f8b8165ffcb951f2ba854b2dd031935e1d73 # pre-job-action-v2.0.2 + uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 with: github-token: ${{ steps.token.outputs.token }} filters: | @@ -132,7 +132,7 @@ jobs: suffixes: '-rocm' platforms: linux/amd64 runner-mapping: '{"linux/amd64": "pokedex-large"}' - uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@bd49ed7a5a6022149f79b6564df48177476a822b # multi-runner-build-workflow-v2.2.1 + uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@61a0fc2b41524edcc7c9fffb8bb178e6b0ccf21d # multi-runner-build-workflow-v2.3.0 permissions: contents: read actions: read @@ -155,7 +155,7 @@ jobs: name: Build and Push Server needs: pre-job if: ${{ fromJSON(needs.pre-job.outputs.should_run).server == true }} - uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@bd49ed7a5a6022149f79b6564df48177476a822b # multi-runner-build-workflow-v2.2.1 + uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@61a0fc2b41524edcc7c9fffb8bb178e6b0ccf21d # multi-runner-build-workflow-v2.3.0 permissions: contents: read actions: read diff --git a/.github/workflows/docs-build.yml b/.github/workflows/docs-build.yml index bbac8da993..2055bfce65 100644 --- a/.github/workflows/docs-build.yml +++ b/.github/workflows/docs-build.yml @@ -21,14 +21,14 @@ jobs: should_run: ${{ steps.check.outputs.should_run }} steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: Check what should run id: check - uses: immich-app/devtools/actions/pre-job@eed0f8b8165ffcb951f2ba854b2dd031935e1d73 # pre-job-action-v2.0.2 + uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 with: github-token: ${{ steps.token.outputs.token }} filters: | @@ -54,7 +54,7 @@ jobs: steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml index babda72c33..05c845ccd1 100644 --- a/.github/workflows/docs-deploy.yml +++ b/.github/workflows/docs-deploy.yml @@ -20,7 +20,7 @@ jobs: artifact: ${{ steps.get-artifact.outputs.result }} steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -119,7 +119,7 @@ jobs: if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }} steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -131,7 +131,7 @@ jobs: token: ${{ steps.token.outputs.token }} - name: Setup Mise - uses: immich-app/devtools/actions/use-mise@dab18118da6476e8237ac94080fd937983fecd42 # use-mise-action-v1.1.2 + uses: immich-app/devtools/actions/use-mise@035e80a7d4355d5f087ffb95db9e4a0944c04e56 # use-mise-action-v1.1.3 - name: Load parameters id: parameters diff --git a/.github/workflows/docs-destroy.yml b/.github/workflows/docs-destroy.yml index 05842889cc..bb24a017fe 100644 --- a/.github/workflows/docs-destroy.yml +++ b/.github/workflows/docs-destroy.yml @@ -17,7 +17,7 @@ jobs: pull-requests: write steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -29,7 +29,7 @@ jobs: token: ${{ steps.token.outputs.token }} - name: Setup Mise - uses: immich-app/devtools/actions/use-mise@dab18118da6476e8237ac94080fd937983fecd42 # use-mise-action-v1.1.2 + uses: immich-app/devtools/actions/use-mise@035e80a7d4355d5f087ffb95db9e4a0944c04e56 # use-mise-action-v1.1.3 - name: Destroy Docs Subdomain env: diff --git a/.github/workflows/pr-label-validation.yml b/.github/workflows/pr-label-validation.yml index e04b32d74f..416e40df0d 100644 --- a/.github/workflows/pr-label-validation.yml +++ b/.github/workflows/pr-label-validation.yml @@ -14,13 +14,13 @@ jobs: pull-requests: write steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: Require PR to have a changelog label - uses: mheap/github-action-required-labels@8afbe8ae6ab7647d0c9f0cfa7c2f939650d22509 # v5.5.1 + uses: mheap/github-action-required-labels@0ac283b4e65c1fb28ce6079dea5546ceca98ccbe # v5.5.2 with: token: ${{ steps.token.outputs.token }} mode: exactly diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index 24f3f8faf1..75ee750e9f 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 23573a9045..dec9b06d67 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -63,7 +63,7 @@ jobs: ref: main - name: Install uv - uses: astral-sh/setup-uv@6ee6290f1cbc4156c0bdd66691b2c144ef8df19a # v7.4.0 + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 - name: Setup pnpm uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 @@ -142,7 +142,7 @@ jobs: github-token: ${{ steps.generate-token.outputs.token }} - name: Create draft release - uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0 + uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1 with: draft: true tag_name: ${{ needs.bump_version.outputs.version }} diff --git a/.github/workflows/preview-label.yaml b/.github/workflows/preview-label.yaml index 137598d64e..43c971c31b 100644 --- a/.github/workflows/preview-label.yaml +++ b/.github/workflows/preview-label.yaml @@ -14,7 +14,7 @@ jobs: pull-requests: write steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -32,7 +32,7 @@ jobs: pull-requests: write steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index 74a4eac44d..d9b6ffb7f5 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -19,7 +19,7 @@ jobs: working-directory: ./open-api/typescript-sdk steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} diff --git a/.github/workflows/static_analysis.yml b/.github/workflows/static_analysis.yml index d100dd281f..4359212d01 100644 --- a/.github/workflows/static_analysis.yml +++ b/.github/workflows/static_analysis.yml @@ -20,14 +20,14 @@ jobs: should_run: ${{ steps.check.outputs.should_run }} steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: Check what should run id: check - uses: immich-app/devtools/actions/pre-job@eed0f8b8165ffcb951f2ba854b2dd031935e1d73 # pre-job-action-v2.0.2 + uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 with: github-token: ${{ steps.token.outputs.token }} filters: | @@ -49,7 +49,7 @@ jobs: working-directory: ./mobile steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -61,7 +61,7 @@ jobs: token: ${{ steps.token.outputs.token }} - name: Setup Flutter SDK - uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0 + uses: subosito/flutter-action@0ca7a949e71ae44c8e688a51c5e7e93b2c87e295 # v2.22.0 with: channel: 'stable' flutter-version-file: ./mobile/pubspec.yaml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c4d4545dab..6da8b8d434 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -17,14 +17,14 @@ jobs: should_run: ${{ steps.check.outputs.should_run }} steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: Check what should run id: check - uses: immich-app/devtools/actions/pre-job@eed0f8b8165ffcb951f2ba854b2dd031935e1d73 # pre-job-action-v2.0.2 + uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 with: github-token: ${{ steps.token.outputs.token }} filters: | @@ -63,7 +63,7 @@ jobs: working-directory: ./server steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -108,7 +108,7 @@ jobs: working-directory: ./cli steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -155,7 +155,7 @@ jobs: working-directory: ./cli steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -197,7 +197,7 @@ jobs: working-directory: ./web steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -241,7 +241,7 @@ jobs: working-directory: ./web steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -279,7 +279,7 @@ jobs: contents: read steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -327,7 +327,7 @@ jobs: working-directory: ./e2e steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -373,7 +373,7 @@ jobs: working-directory: ./server steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -412,7 +412,7 @@ jobs: runner: [ubuntu-latest, ubuntu-24.04-arm] steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -484,7 +484,7 @@ jobs: runner: [ubuntu-latest, ubuntu-24.04-arm] steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -578,7 +578,7 @@ jobs: contents: read steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -588,7 +588,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Setup Flutter SDK - uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0 + uses: subosito/flutter-action@0ca7a949e71ae44c8e688a51c5e7e93b2c87e295 # v2.22.0 with: channel: 'stable' flutter-version-file: ./mobile/pubspec.yaml @@ -610,7 +610,7 @@ jobs: working-directory: ./machine-learning steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -620,7 +620,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Install uv - uses: astral-sh/setup-uv@6ee6290f1cbc4156c0bdd66691b2c144ef8df19a # v7.4.0 + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: python-version: 3.11 - name: Install dependencies @@ -650,7 +650,7 @@ jobs: working-directory: ./.github steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -680,7 +680,7 @@ jobs: contents: read steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -701,7 +701,7 @@ jobs: contents: read steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} @@ -763,7 +763,7 @@ jobs: working-directory: ./server steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} diff --git a/.github/workflows/weblate-lock.yml b/.github/workflows/weblate-lock.yml index 6e997ad76a..954b1dd2e7 100644 --- a/.github/workflows/weblate-lock.yml +++ b/.github/workflows/weblate-lock.yml @@ -24,14 +24,14 @@ jobs: should_run: ${{ steps.check.outputs.should_run }} steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: Check what should run id: check - uses: immich-app/devtools/actions/pre-job@eed0f8b8165ffcb951f2ba854b2dd031935e1d73 # pre-job-action-v2.0.2 + uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 with: github-token: ${{ steps.token.outputs.token }} filters: | @@ -47,7 +47,7 @@ jobs: if: ${{ fromJSON(needs.pre-job.outputs.should_run).i18n == true }} steps: - id: token - uses: immich-app/devtools/actions/create-workflow-token@05e16407c0a5492138bb38139c9d9bf067b40886 # create-workflow-token-action-v1.0.1 + uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 with: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} From a9666d2cef1913ccd065b13b919b1cd4f48f55b1 Mon Sep 17 00:00:00 2001 From: Mert <101130780+mertalev@users.noreply.github.com> Date: Tue, 24 Mar 2026 14:40:48 -0400 Subject: [PATCH 003/156] fix(mobile): remove upload timeout (#27237) remove timeout --- mobile/ios/Runner/Core/URLSessionManager.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/mobile/ios/Runner/Core/URLSessionManager.swift b/mobile/ios/Runner/Core/URLSessionManager.swift index 0b73ed71a6..9eb93f9ff9 100644 --- a/mobile/ios/Runner/Core/URLSessionManager.swift +++ b/mobile/ios/Runner/Core/URLSessionManager.swift @@ -150,7 +150,6 @@ class URLSessionManager: NSObject { config.httpCookieStorage = cookieStorage config.httpMaximumConnectionsPerHost = 64 config.timeoutIntervalForRequest = 60 - config.timeoutIntervalForResource = 300 var headers = UserDefaults.group.dictionary(forKey: HEADERS_KEY) as? [String: String] ?? [:] headers["User-Agent"] = headers["User-Agent"] ?? userAgent From 95280edd6c1f85a8bf794eca85747c1cb1e74ebf Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Wed, 25 Mar 2026 19:00:40 +0100 Subject: [PATCH 004/156] fix: let renovate update base images (#27272) --- renovate.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/renovate.json b/renovate.json index fbbc8976bd..0fdf5a7f69 100644 --- a/renovate.json +++ b/renovate.json @@ -27,6 +27,10 @@ "matchUpdateTypes": ["major"], "enabled": false }, + { + "matchPackageNames": ["ghcr.io/immich-app/base-server-*"], + "maxMajorIncrement": 0 + }, { "matchPackageNames": ["ruby"], "groupName": "ruby", From 8bfa75087c7fbba0abfec84944414f8710877356 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 14:04:26 -0500 Subject: [PATCH 005/156] chore(deps): update base-image to v202603251709 (major) (#27273) chore(deps): update base-image to v202603251709 Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- server/Dockerfile | 4 ++-- server/Dockerfile.dev | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/Dockerfile b/server/Dockerfile index a26dfdd354..476d58b983 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/immich-app/base-server-dev:202603031112@sha256:837536db5fd9e432f0f474ef9b61712fe3b3815821c3e4edf5e5b0b1f1ed30ad AS builder +FROM ghcr.io/immich-app/base-server-dev:202603251709@sha256:2bf3053c732fcb87ec90c3c614632ac44847423468ccc57fd935bff771828d9d AS builder ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \ CI=1 \ COREPACK_HOME=/tmp \ @@ -71,7 +71,7 @@ RUN --mount=type=cache,id=pnpm-plugins,target=/buildcache/pnpm-store \ --mount=type=cache,id=mise-tools-${TARGETPLATFORM},target=/buildcache/mise \ cd plugins && mise run build -FROM ghcr.io/immich-app/base-server-prod:202603031112@sha256:bb8c8645ee61977140121e56ba09db7ae656a7506f9a6af1be8461b4d81fdf03 +FROM ghcr.io/immich-app/base-server-prod:202603251709@sha256:17de30977ff87aa06758a56ad7f10d6b5c97bf9dab76e4ec4177a2a8d1b2b5f3 WORKDIR /usr/src/app ENV NODE_ENV=production \ diff --git a/server/Dockerfile.dev b/server/Dockerfile.dev index f64a1a904b..096ffdf0bf 100644 --- a/server/Dockerfile.dev +++ b/server/Dockerfile.dev @@ -1,5 +1,5 @@ # dev build -FROM ghcr.io/immich-app/base-server-dev:202603031112@sha256:837536db5fd9e432f0f474ef9b61712fe3b3815821c3e4edf5e5b0b1f1ed30ad AS dev +FROM ghcr.io/immich-app/base-server-dev:202603251709@sha256:2bf3053c732fcb87ec90c3c614632ac44847423468ccc57fd935bff771828d9d AS dev ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \ CI=1 \ From b9b5dba03712993ccc35b29c5e38304843f0f2d8 Mon Sep 17 00:00:00 2001 From: Mees Frensel <33722705+meesfrensel@users.noreply.github.com> Date: Wed, 25 Mar 2026 20:05:43 +0100 Subject: [PATCH 006/156] fix(web): crop square ratio i18n (#27257) --- i18n/en.json | 1 + .../asset-viewer/editor/transform-tool/transform-tool.svelte | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/i18n/en.json b/i18n/en.json index 956ed03989..fdf3a2181c 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Fixed", "crop_aspect_ratio_free": "Free", "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Square", "curated_object_page_title": "Things", "current_device": "Current device", "current_pin_code": "Current PIN code", diff --git a/web/src/lib/components/asset-viewer/editor/transform-tool/transform-tool.svelte b/web/src/lib/components/asset-viewer/editor/transform-tool/transform-tool.svelte index a45cb5d998..1850389581 100644 --- a/web/src/lib/components/asset-viewer/editor/transform-tool/transform-tool.svelte +++ b/web/src/lib/components/asset-viewer/editor/transform-tool/transform-tool.svelte @@ -23,7 +23,7 @@ { label: '2:3', value: '2:3', width: 16, height: 24 }, { label: '16:9', value: '16:9', width: 24, height: 14 }, { label: '9:16', value: '9:16', width: 14, height: 24 }, - { label: 'Square', value: '1:1', width: 20, height: 20 }, + { label: $t('crop_aspect_ratio_square'), value: '1:1', width: 20, height: 20 }, ]; let isRotated = $derived(transformManager.normalizedRotation % 180 !== 0); From 5fb8f9bf1aaf5e2f82faed8ea951dd248e246cc4 Mon Sep 17 00:00:00 2001 From: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com> Date: Thu, 26 Mar 2026 03:02:31 +0100 Subject: [PATCH 007/156] fix(web): prevent horizontal scroll bar in asset viewer side panel (#27270) * fix(web): prevent horizontal scroll bar in asset viewer side panel * simplify --- .../lib/components/asset-viewer/asset-viewer.svelte | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte index 3f7b048c8f..d19ab3175c 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte @@ -580,17 +580,16 @@
{#if showDetailPanel} -
- -
+ {:else if assetViewerManager.isShowEditor} -
- -
+ {/if}
{/if} From c862163204ac87cee896b4ccb663920106f638e9 Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Thu, 26 Mar 2026 11:43:51 +0100 Subject: [PATCH 008/156] fix: explicitly specify repo in auto-close job (#27291) --- .github/workflows/auto-close.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/auto-close.yml b/.github/workflows/auto-close.yml index 559cb20e66..60371d1abb 100644 --- a/.github/workflows/auto-close.yml +++ b/.github/workflows/auto-close.yml @@ -66,7 +66,7 @@ jobs: env: GH_TOKEN: ${{ github.token }} PR_NUMBER: ${{ github.event.pull_request.number }} - run: gh pr edit "$PR_NUMBER" --add-label "auto-closed:template" + run: gh pr edit "$PR_NUMBER" --repo "${{ github.repository }}" --add-label "auto-closed:template" close_llm: runs-on: ubuntu-latest @@ -113,7 +113,7 @@ jobs: env: GH_TOKEN: ${{ github.token }} PR_NUMBER: ${{ github.event.pull_request.number }} - run: gh pr edit "$PR_NUMBER" --remove-label "auto-closed:template" || true + run: gh pr edit "$PR_NUMBER" --repo "${{ github.repository }}" --remove-label "auto-closed:template" || true - name: Check for remaining auto-closed labels id: check_labels @@ -121,7 +121,7 @@ jobs: GH_TOKEN: ${{ github.token }} PR_NUMBER: ${{ github.event.pull_request.number }} run: | - REMAINING=$(gh pr view "$PR_NUMBER" --json labels \ + REMAINING=$(gh pr view "$PR_NUMBER" --repo "${{ github.repository }}" --json labels \ --jq '[.labels[].name | select(startswith("auto-closed:"))] | length') echo "remaining=$REMAINING" >> "$GITHUB_OUTPUT" From a26d9e05baabc300f67ab7d419a490dffb7f00aa Mon Sep 17 00:00:00 2001 From: Yaros Date: Thu, 26 Mar 2026 11:49:21 +0100 Subject: [PATCH 009/156] fix(web): shifting motion image button (#27275) --- .../lib/components/asset-viewer/asset-viewer-nav-bar.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte index eee2dc325c..75aa9197b8 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte @@ -120,10 +120,10 @@ - - + + From c980f5fc1999b5cf9e6fc85e49a8aed44fbe3b1e Mon Sep 17 00:00:00 2001 From: Yaros Date: Thu, 26 Mar 2026 11:50:29 +0100 Subject: [PATCH 010/156] chore(docs): withPeople parameter description (#27262) * fix(server): withPeople inconsistent * fix: query failing in some occasions * test: add medium tests for withPeople option * Revert "test: add medium tests for withPeople option" This reverts commit 6c1505ba6b4771e37c1679bb96866a642134223d. * Revert "fix: query failing in some occasions" This reverts commit 221feeca45ae58fbac9e1b604202e6e0dedd4044. * Revert "fix(server): withPeople inconsistent" This reverts commit 4289a9f23d48248f0779cd2efff91875cfe98b52. * chore: change endpoint description * chore: generate open-api --- mobile/openapi/lib/model/metadata_search_dto.dart | 2 +- mobile/openapi/lib/model/random_search_dto.dart | 2 +- open-api/immich-openapi-specs.json | 4 ++-- open-api/typescript-sdk/src/fetch-client.ts | 4 ++-- server/src/dtos/search.dto.ts | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mobile/openapi/lib/model/metadata_search_dto.dart b/mobile/openapi/lib/model/metadata_search_dto.dart index 81f8d41527..4dbc90d407 100644 --- a/mobile/openapi/lib/model/metadata_search_dto.dart +++ b/mobile/openapi/lib/model/metadata_search_dto.dart @@ -379,7 +379,7 @@ class MetadataSearchDto { /// bool? withExif; - /// Include assets with people + /// Include people data in response /// /// Please note: This property should have been non-nullable! Since the specification file /// does not include a default value (using the "default:" property), however, the generated diff --git a/mobile/openapi/lib/model/random_search_dto.dart b/mobile/openapi/lib/model/random_search_dto.dart index 4166fc9f3c..d5803c9cc7 100644 --- a/mobile/openapi/lib/model/random_search_dto.dart +++ b/mobile/openapi/lib/model/random_search_dto.dart @@ -273,7 +273,7 @@ class RandomSearchDto { /// bool? withExif; - /// Include assets with people + /// Include people data in response /// /// Please note: This property should have been non-nullable! Since the specification file /// does not include a default value (using the "default:" property), however, the generated diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index a504214681..e5e888c2f8 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -19129,7 +19129,7 @@ "type": "boolean" }, "withPeople": { - "description": "Include assets with people", + "description": "Include people data in response", "type": "boolean" }, "withStacked": { @@ -20868,7 +20868,7 @@ "type": "boolean" }, "withPeople": { - "description": "Include assets with people", + "description": "Include people data in response", "type": "boolean" }, "withStacked": { diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index aa71f9f896..d7375a5f83 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -1741,7 +1741,7 @@ export type MetadataSearchDto = { withDeleted?: boolean; /** Include EXIF data in response */ withExif?: boolean; - /** Include assets with people */ + /** Include people data in response */ withPeople?: boolean; /** Include stacked assets */ withStacked?: boolean; @@ -1855,7 +1855,7 @@ export type RandomSearchDto = { withDeleted?: boolean; /** Include EXIF data in response */ withExif?: boolean; - /** Include assets with people */ + /** Include people data in response */ withPeople?: boolean; /** Include stacked assets */ withStacked?: boolean; diff --git a/server/src/dtos/search.dto.ts b/server/src/dtos/search.dto.ts index f72ecdf8b6..196e72c37e 100644 --- a/server/src/dtos/search.dto.ts +++ b/server/src/dtos/search.dto.ts @@ -146,7 +146,7 @@ export class RandomSearchDto extends BaseSearchWithResultsDto { @ValidateBoolean({ optional: true, description: 'Include stacked assets' }) withStacked?: boolean; - @ValidateBoolean({ optional: true, description: 'Include assets with people' }) + @ValidateBoolean({ optional: true, description: 'Include people data in response' }) withPeople?: boolean; } From 78bb6cf926c37f14f7a63fe2654869384407cd0e Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Thu, 26 Mar 2026 11:50:53 +0100 Subject: [PATCH 011/156] chore: log id of existing asset on duplicate upload (#27266) --- server/src/services/asset-media.service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/services/asset-media.service.ts b/server/src/services/asset-media.service.ts index 10132bbb07..03677054ec 100644 --- a/server/src/services/asset-media.service.ts +++ b/server/src/services/asset-media.service.ts @@ -356,6 +356,7 @@ export class AssetMediaService extends BaseService { await this.addToSharedLink(auth.sharedLink, duplicateId); } + this.logger.debug(`Duplicate asset upload rejected: existing asset ${duplicateId}`); return { status: AssetMediaStatus.DUPLICATE, id: duplicateId }; } From b074ee202e4c6139b773f867ae28e53648f263df Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 26 Mar 2026 09:31:11 -0500 Subject: [PATCH 012/156] chore: move slideshow control button group to the left (#27287) --- web/src/lib/components/asset-viewer/asset-viewer.spec.ts | 2 ++ web/src/lib/components/asset-viewer/asset-viewer.svelte | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/web/src/lib/components/asset-viewer/asset-viewer.spec.ts b/web/src/lib/components/asset-viewer/asset-viewer.spec.ts index a1f50da86a..acb1d03714 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.spec.ts +++ b/web/src/lib/components/asset-viewer/asset-viewer.spec.ts @@ -1,5 +1,6 @@ import { getAnimateMock } from '$lib/__mocks__/animate.mock'; import { getResizeObserverMock } from '$lib/__mocks__/resize-observer.mock'; +import { SlideshowState, slideshowStore } from '$lib/stores/slideshow.store'; import { preferences as preferencesStore, resetSavedUser, user as userStore } from '$lib/stores/user.store'; import { renderWithTooltips } from '$tests/helpers'; import { updateAsset } from '@immich/sdk'; @@ -41,6 +42,7 @@ describe('AssetViewer', () => { }); afterEach(() => { + slideshowStore.slideshowState.set(SlideshowState.None); resetSavedUser(); vi.clearAllMocks(); }); diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte index d19ab3175c..076f76cbc7 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte @@ -485,7 +485,7 @@ {/if} {#if $slideshowState != SlideshowState.None} -
+
Date: Thu, 26 Mar 2026 15:36:04 +0100 Subject: [PATCH 013/156] fix(server): filter out empty search suggestions (#27292) * fix(server): filter out empty search suggestions * make sql --- server/src/queries/search.repository.sql | 5 +++++ server/src/repositories/search.repository.ts | 8 +++---- .../specs/services/search.service.spec.ts | 22 +++++++++++++++++++ 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/server/src/queries/search.repository.sql b/server/src/queries/search.repository.sql index ef5fbe09be..099b7f4ee2 100644 --- a/server/src/queries/search.repository.sql +++ b/server/src/queries/search.repository.sql @@ -254,6 +254,7 @@ where and "visibility" = $2 and "deletedAt" is null and "state" is not null + and "state" != $3 -- SearchRepository.getCities select distinct @@ -266,6 +267,7 @@ where and "visibility" = $2 and "deletedAt" is null and "city" is not null + and "city" != $3 -- SearchRepository.getCameraMakes select distinct @@ -278,6 +280,7 @@ where and "visibility" = $2 and "deletedAt" is null and "make" is not null + and "make" != $3 -- SearchRepository.getCameraModels select distinct @@ -290,6 +293,7 @@ where and "visibility" = $2 and "deletedAt" is null and "model" is not null + and "model" != $3 -- SearchRepository.getCameraLensModels select distinct @@ -302,3 +306,4 @@ where and "visibility" = $2 and "deletedAt" is null and "lensModel" is not null + and "lensModel" != $3 diff --git a/server/src/repositories/search.repository.ts b/server/src/repositories/search.repository.ts index 13ac254654..ba72a70fdb 100644 --- a/server/src/repositories/search.repository.ts +++ b/server/src/repositories/search.repository.ts @@ -502,10 +502,7 @@ export class SearchRepository { return res.map((row) => row.lensModel!); } - private getExifField( - field: K, - userIds: string[], - ) { + private getExifField(field: 'city' | 'state' | 'country' | 'make' | 'model' | 'lensModel', userIds: string[]) { return this.db .selectFrom('asset_exif') .select(field) @@ -514,6 +511,7 @@ export class SearchRepository { .where('ownerId', '=', anyUuid(userIds)) .where('visibility', '=', AssetVisibility.Timeline) .where('deletedAt', 'is', null) - .where(field, 'is not', null); + .where(field, 'is not', null) + .where(field, '!=', ''); } } diff --git a/server/test/medium/specs/services/search.service.spec.ts b/server/test/medium/specs/services/search.service.spec.ts index c20b64ca7c..18e03b2e48 100644 --- a/server/test/medium/specs/services/search.service.spec.ts +++ b/server/test/medium/specs/services/search.service.spec.ts @@ -1,4 +1,5 @@ import { Kysely } from 'kysely'; +import { SearchSuggestionType } from 'src/dtos/search.dto'; import { AccessRepository } from 'src/repositories/access.repository'; import { AssetRepository } from 'src/repositories/asset.repository'; import { DatabaseRepository } from 'src/repositories/database.repository'; @@ -108,4 +109,25 @@ describe(SearchService.name, () => { expect(response.assets.items[0].id).toBe(unstackedAsset.id); }); }); + + describe('getSearchSuggestions', () => { + it('should filter out empty search suggestions', async () => { + const { sut, ctx } = setup(); + const { user } = await ctx.newUser(); + + const { asset } = await ctx.newAsset({ ownerId: user.id }); + await ctx.newExif({ assetId: asset.id, make: 'Canon' }); + + const { asset: assetWithEmptyMake } = await ctx.newAsset({ ownerId: user.id }); + await ctx.newExif({ assetId: assetWithEmptyMake.id, make: '' }); + + const auth = factory.auth({ user: { id: user.id } }); + const suggestions = await sut.getSearchSuggestions(auth, { + type: SearchSuggestionType.CAMERA_MAKE, + includeNull: true, + }); + + expect(suggestions).toEqual(['Canon', null]); + }); + }); }); From d8b39906f97372b911fa81f9820fe697fccfafe6 Mon Sep 17 00:00:00 2001 From: Brandon Wees Date: Thu, 26 Mar 2026 09:39:02 -0500 Subject: [PATCH 014/156] fix: incorrect asset face sync (#27243) * fix: incorrect asset face sync * chore: sync sql --- server/src/queries/sync.repository.sql | 1 - server/src/repositories/sync.repository.ts | 1 - .../migrations/1774393726320-AssetFaceSyncReset.ts | 10 ++++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 server/src/schema/migrations/1774393726320-AssetFaceSyncReset.ts diff --git a/server/src/queries/sync.repository.sql b/server/src/queries/sync.repository.sql index 43c6a380bf..a4acc95e29 100644 --- a/server/src/queries/sync.repository.sql +++ b/server/src/queries/sync.repository.sql @@ -582,7 +582,6 @@ where "asset_face"."updateId" < $1 and "asset_face"."updateId" > $2 and "asset"."ownerId" = $3 - and "asset_face"."isVisible" = $4 order by "asset_face"."updateId" asc diff --git a/server/src/repositories/sync.repository.ts b/server/src/repositories/sync.repository.ts index b2fa144ca4..486bf15163 100644 --- a/server/src/repositories/sync.repository.ts +++ b/server/src/repositories/sync.repository.ts @@ -487,7 +487,6 @@ class AssetFaceSync extends BaseSync { ]) .leftJoin('asset', 'asset.id', 'asset_face.assetId') .where('asset.ownerId', '=', options.userId) - .where('asset_face.isVisible', '=', true) .stream(); } } diff --git a/server/src/schema/migrations/1774393726320-AssetFaceSyncReset.ts b/server/src/schema/migrations/1774393726320-AssetFaceSyncReset.ts new file mode 100644 index 0000000000..8dcd238bc0 --- /dev/null +++ b/server/src/schema/migrations/1774393726320-AssetFaceSyncReset.ts @@ -0,0 +1,10 @@ +import { Kysely, sql } from 'kysely'; + +export async function up(db: Kysely): Promise { + // Sync query for faces was incorrect on server <=2.6.2 + await sql`DELETE FROM session_sync_checkpoint WHERE type in ('AssetFaceV1', 'AssetFaceV2')`.execute(db); +} + +export async function down(): Promise { + // Not implemented +} From a2ff075e9a84cc44e0d5f7f6b639a456e73ad5c0 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 16:23:35 +0000 Subject: [PATCH 015/156] chore: version v2.6.3 --- cli/package.json | 2 +- docs/static/archived-versions.json | 4 ++-- e2e/package.json | 2 +- i18n/package.json | 2 +- machine-learning/pyproject.toml | 2 +- machine-learning/uv.lock | 2 +- mobile/android/fastlane/Fastfile | 4 ++-- mobile/ios/Runner/Info.plist | 2 +- mobile/openapi/README.md | 2 +- mobile/pubspec.yaml | 2 +- open-api/immich-openapi-specs.json | 2 +- open-api/typescript-sdk/package.json | 2 +- open-api/typescript-sdk/src/fetch-client.ts | 2 +- package.json | 2 +- server/package.json | 2 +- web/package.json | 2 +- 16 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cli/package.json b/cli/package.json index c22b2c17b7..2346ba298f 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@immich/cli", - "version": "2.6.2", + "version": "2.6.3", "description": "Command Line Interface (CLI) for Immich", "type": "module", "exports": "./dist/index.js", diff --git a/docs/static/archived-versions.json b/docs/static/archived-versions.json index 09cd1b1548..afaa584882 100644 --- a/docs/static/archived-versions.json +++ b/docs/static/archived-versions.json @@ -1,7 +1,7 @@ [ { - "label": "v2.6.2", - "url": "https://docs.v2.6.2.archive.immich.app" + "label": "v2.6.3", + "url": "https://docs.v2.6.3.archive.immich.app" }, { "label": "v2.5.6", diff --git a/e2e/package.json b/e2e/package.json index 58304f3433..0193e1bb79 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "immich-e2e", - "version": "2.6.2", + "version": "2.6.3", "description": "", "main": "index.js", "type": "module", diff --git a/i18n/package.json b/i18n/package.json index a654f8715f..a66505923d 100644 --- a/i18n/package.json +++ b/i18n/package.json @@ -1,6 +1,6 @@ { "name": "immich-i18n", - "version": "2.6.2", + "version": "2.6.3", "private": true, "scripts": { "format": "prettier --cache --check .", diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index 9afaf2ecc8..fd6b61d6c2 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "immich-ml" -version = "2.6.2" +version = "2.6.3" description = "" authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }] requires-python = ">=3.11,<4.0" diff --git a/machine-learning/uv.lock b/machine-learning/uv.lock index 0c1ecf1846..e07f942312 100644 --- a/machine-learning/uv.lock +++ b/machine-learning/uv.lock @@ -898,7 +898,7 @@ wheels = [ [[package]] name = "immich-ml" -version = "2.6.2" +version = "2.6.3" source = { editable = "." } dependencies = [ { name = "aiocache" }, diff --git a/mobile/android/fastlane/Fastfile b/mobile/android/fastlane/Fastfile index b40f394d01..279b985cfe 100644 --- a/mobile/android/fastlane/Fastfile +++ b/mobile/android/fastlane/Fastfile @@ -35,8 +35,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 3040, - "android.injected.version.name" => "2.6.2", + "android.injected.version.code" => 3041, + "android.injected.version.name" => "2.6.3", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') diff --git a/mobile/ios/Runner/Info.plist b/mobile/ios/Runner/Info.plist index 71be571216..1bf52807f9 100644 --- a/mobile/ios/Runner/Info.plist +++ b/mobile/ios/Runner/Info.plist @@ -80,7 +80,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.6.2 + 2.6.3 CFBundleSignature ???? CFBundleURLTypes diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 3dc0a0c1fa..500de51622 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -3,7 +3,7 @@ Immich API This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 2.6.2 +- API version: 2.6.3 - Generator version: 7.8.0 - Build package: org.openapitools.codegen.languages.DartClientCodegen diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index b0046ec449..c5839fb9be 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -2,7 +2,7 @@ name: immich_mobile description: Immich - selfhosted backup media file on mobile phone publish_to: 'none' -version: 2.6.2+3040 +version: 2.6.3+3041 environment: sdk: '>=3.8.0 <4.0.0' diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index e5e888c2f8..f9bfc0639f 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -15166,7 +15166,7 @@ "info": { "title": "Immich", "description": "Immich API", - "version": "2.6.2", + "version": "2.6.3", "contact": {} }, "tags": [ diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 9f6846d072..886f80fdf5 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@immich/sdk", - "version": "2.6.2", + "version": "2.6.3", "description": "Auto-generated TypeScript SDK for the Immich API", "type": "module", "main": "./build/index.js", diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index d7375a5f83..257bf668d0 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -1,6 +1,6 @@ /** * Immich - * 2.6.2 + * 2.6.3 * DO NOT MODIFY - This file has been generated using oazapfts. * See https://www.npmjs.com/package/oazapfts */ diff --git a/package.json b/package.json index a02b7efc8b..f60a54f77f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "immich-monorepo", - "version": "2.6.2", + "version": "2.6.3", "description": "Monorepo for Immich", "private": true, "packageManager": "pnpm@10.30.3+sha512.c961d1e0a2d8e354ecaa5166b822516668b7f44cb5bd95122d590dd81922f606f5473b6d23ec4a5be05e7fcd18e8488d47d978bbe981872f1145d06e9a740017", diff --git a/server/package.json b/server/package.json index 554f2540d5..3b0c5e198a 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "immich", - "version": "2.6.2", + "version": "2.6.3", "description": "", "author": "", "private": true, diff --git a/web/package.json b/web/package.json index 0288aeae6d..53d95906cb 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "immich-web", - "version": "2.6.2", + "version": "2.6.3", "license": "GNU Affero General Public License version 3", "type": "module", "scripts": { From 8f01d06927df69aa0f906ff13b3837f85a0caa5c Mon Sep 17 00:00:00 2001 From: Vogeluff <72712390+Vogeluff@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:15:16 +0100 Subject: [PATCH 016/156] feat(web): add a seperate tooltip for switching from dark to light mode (#27297) --- i18n/en.json | 3 ++- web/src/routes/+layout.svelte | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/i18n/en.json b/i18n/en.json index fdf3a2181c..252664653c 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -881,7 +881,7 @@ "daily_title_text_date": "E, MMM dd", "daily_title_text_date_year": "E, MMM dd, yyyy", "dark": "Dark", - "dark_theme": "Toggle dark theme", + "dark_theme": "Switch to dark theme", "date": "Date", "date_after": "Date after", "date_and_time": "Date and Time", @@ -1388,6 +1388,7 @@ "library_page_sort_title": "Album title", "licenses": "Licenses", "light": "Light", + "light_theme": "Switch to light theme", "like": "Like", "like_deleted": "Like deleted", "link_motion_video": "Link motion video", diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte index 046d5ce068..71bd66641c 100644 --- a/web/src/routes/+layout.svelte +++ b/web/src/routes/+layout.svelte @@ -52,7 +52,7 @@ prompt_default: $t('are_you_sure_to_do_this'), show_password: $t('show_password'), hide_password: $t('hide_password'), - dark_theme: $t('dark_theme'), + dark_theme: themeManager.isDark ? $t('light_theme') : $t('dark_theme'), open_menu: $t('open'), command_palette_prompt_default: $t('command_palette_prompt'), command_palette_to_select: $t('command_palette_to_select'), From 4812a2e2d83c2dee9ba022011ad9ecb5fa8db03b Mon Sep 17 00:00:00 2001 From: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:17:32 +0100 Subject: [PATCH 017/156] fix(server): refresh unedited asset dimensions on metadata extraction (#27220) --- server/src/database.ts | 1 + server/src/queries/asset.job.repository.sql | 1 + server/src/services/metadata.service.spec.ts | 24 ++++++++++++++++++-- server/src/services/metadata.service.ts | 7 +++--- server/test/mappers.ts | 1 + 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/server/src/database.ts b/server/src/database.ts index eb558c6d28..f4878b2cee 100644 --- a/server/src/database.ts +++ b/server/src/database.ts @@ -345,6 +345,7 @@ export const columns = { 'asset.type', 'asset.width', 'asset.height', + 'asset.isEdited', ], assetFiles: ['asset_file.id', 'asset_file.path', 'asset_file.type', 'asset_file.isEdited'], assetFilesForThumbnail: [ diff --git a/server/src/queries/asset.job.repository.sql b/server/src/queries/asset.job.repository.sql index cebb9fe95e..cf5b8f02dc 100644 --- a/server/src/queries/asset.job.repository.sql +++ b/server/src/queries/asset.job.repository.sql @@ -264,6 +264,7 @@ select "asset"."type", "asset"."width", "asset"."height", + "asset"."isEdited", ( select coalesce(json_agg(agg), '[]') diff --git a/server/src/services/metadata.service.spec.ts b/server/src/services/metadata.service.spec.ts index 7cb42990ea..cb35e21d0a 100644 --- a/server/src/services/metadata.service.spec.ts +++ b/server/src/services/metadata.service.spec.ts @@ -1641,12 +1641,32 @@ describe(MetadataService.name, () => { ); }); - it('should not overwrite existing width/height if they already exist', async () => { - const asset = AssetFactory.create({ width: 1920, height: 1080 }); + it('should overwrite existing width/height for unedited assets', async () => { + const asset = AssetFactory.create({ width: 1920, height: 1080, isEdited: false }); mocks.assetJob.getForMetadataExtraction.mockResolvedValue(getForMetadataExtraction(asset)); mockReadTags({ ImageWidth: 1280, ImageHeight: 720 }); await sut.handleMetadataExtraction({ id: asset.id }); + expect(mocks.asset.update).toHaveBeenCalledWith( + expect.objectContaining({ + width: 1280, + height: 720, + }), + ); + }); + + it('should not overwrite existing width/height for edited assets', async () => { + const asset = AssetFactory.create({ width: 1920, height: 1080, isEdited: true }); + mocks.assetJob.getForMetadataExtraction.mockResolvedValue(getForMetadataExtraction(asset)); + mockReadTags({ ImageWidth: 1280, ImageHeight: 720 }); + + await sut.handleMetadataExtraction({ id: asset.id }); + expect(mocks.asset.update).toHaveBeenCalledWith( + expect.objectContaining({ + width: undefined, + height: undefined, + }), + ); expect(mocks.asset.update).not.toHaveBeenCalledWith( expect.objectContaining({ width: 1280, diff --git a/server/src/services/metadata.service.ts b/server/src/services/metadata.service.ts index 7b87ea06a6..bfbcb413c0 100644 --- a/server/src/services/metadata.service.ts +++ b/server/src/services/metadata.service.ts @@ -327,10 +327,9 @@ export class MetadataService extends BaseService { fileCreatedAt: dates.dateTimeOriginal ?? undefined, fileModifiedAt: stats.mtime, - // only update the dimensions if they don't already exist - // we don't want to overwrite width/height that are modified by edits - width: asset.width == null ? assetWidth : undefined, - height: asset.height == null ? assetHeight : undefined, + // Keep unedited assets in sync with the file on disk, but don't overwrite edited dimensions. + width: !asset.isEdited || asset.width == null ? assetWidth : undefined, + height: !asset.isEdited || asset.height == null ? assetHeight : undefined, }), async () => { await this.assetRepository.upsertExif(exifData, { lockedPropertiesBehavior: 'skip' }); diff --git a/server/test/mappers.ts b/server/test/mappers.ts index 7f324663be..2f3b248576 100644 --- a/server/test/mappers.ts +++ b/server/test/mappers.ts @@ -138,6 +138,7 @@ export const getForMetadataExtraction = (asset: ReturnType getDehydrated(face)), From 389356149aeed73c70702b7aaf8c04e6b5cef598 Mon Sep 17 00:00:00 2001 From: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:18:06 +0100 Subject: [PATCH 018/156] refactor: actionable toasts (#27203) --- pnpm-lock.yaml | 10 +++---- web/package.json | 2 +- web/src/lib/components/ToastAction.svelte | 33 ----------------------- web/src/lib/services/album.service.ts | 28 ++++--------------- web/src/lib/utils/actions.ts | 26 ++++++------------ web/src/lib/utils/asset-utils.ts | 16 ++++------- 6 files changed, 24 insertions(+), 91 deletions(-) delete mode 100644 web/src/lib/components/ToastAction.svelte diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 320815b631..0ffd7e02c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -744,8 +744,8 @@ importers: specifier: workspace:* version: link:../open-api/typescript-sdk '@immich/ui': - specifier: ^0.65.3 - version: 0.65.3(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13) + specifier: ^0.67.2 + version: 0.67.2(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13) '@mapbox/mapbox-gl-rtl-text': specifier: 0.3.0 version: 0.3.0 @@ -3038,8 +3038,8 @@ packages: peerDependencies: svelte: ^5.0.0 - '@immich/ui@0.65.3': - resolution: {integrity: sha512-jMXzCzMNTcCdWXt9IUP7GkALE5oEvPQk/jCOuI2bfxsxCZFzMkUfUS+AV83Vg1vQ6l+g39PbKSPKBEzv125ATQ==} + '@immich/ui@0.67.2': + resolution: {integrity: sha512-GsaoJRiRORJ34CT+W3pAOdhbLr61nNlgFaOzDcnVnSWFonu7+HR3CXdCxbSdyU4+r3xEmcawwo6rMuLgRplHfw==} peerDependencies: svelte: ^5.0.0 @@ -15123,7 +15123,7 @@ snapshots: node-emoji: 2.2.0 svelte: 5.53.13 - '@immich/ui@0.65.3(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)': + '@immich/ui@0.67.2(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)': dependencies: '@immich/svelte-markdown-preprocess': 0.2.1(svelte@5.53.13) '@internationalized/date': 3.10.0 diff --git a/web/package.json b/web/package.json index 53d95906cb..b6f4ca6c4e 100644 --- a/web/package.json +++ b/web/package.json @@ -27,7 +27,7 @@ "@formatjs/icu-messageformat-parser": "^3.0.0", "@immich/justified-layout-wasm": "^0.4.3", "@immich/sdk": "workspace:*", - "@immich/ui": "^0.65.3", + "@immich/ui": "^0.67.2", "@mapbox/mapbox-gl-rtl-text": "0.3.0", "@mdi/js": "^7.4.47", "@photo-sphere-viewer/core": "^5.14.0", diff --git a/web/src/lib/components/ToastAction.svelte b/web/src/lib/components/ToastAction.svelte deleted file mode 100644 index 5dc430f323..0000000000 --- a/web/src/lib/components/ToastAction.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - - - - {#if button} -
- -
- {/if} -
-
diff --git a/web/src/lib/services/album.service.ts b/web/src/lib/services/album.service.ts index 6ccd67584e..3a70d72478 100644 --- a/web/src/lib/services/album.service.ts +++ b/web/src/lib/services/album.service.ts @@ -1,5 +1,4 @@ import { goto } from '$app/navigation'; -import ToastAction from '$lib/components/ToastAction.svelte'; import { authManager } from '$lib/managers/auth-manager.svelte'; import { eventManager } from '$lib/managers/event-manager.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; @@ -138,16 +137,8 @@ const notifyAddToAlbum = ($t: MessageFormatter, albumId: string, assetIds: strin description = $t('assets_were_part_of_album_count', { values: { count: duplicateCount } }); } - toastManager.custom( - { - component: ToastAction, - props: { - title: $t('info'), - color: 'primary', - description, - button: { text: $t('view_album'), color: 'primary', onClick: () => goto(Route.viewAlbum({ id: albumId })) }, - }, - }, + toastManager.primary( + { description, button: { label: $t('view_album'), onclick: () => goto(Route.viewAlbum({ id: albumId })) } }, { timeout: 5000 }, ); }; @@ -229,18 +220,9 @@ export const handleUpdateAlbum = async ({ id }: { id: string }, dto: UpdateAlbum try { const response = await updateAlbumInfo({ id, updateAlbumDto: dto }); eventManager.emit('AlbumUpdate', response); - toastManager.custom({ - component: ToastAction, - props: { - color: 'primary', - title: $t('success'), - description: $t('album_info_updated'), - button: { - text: $t('view_album'), - color: 'primary', - onClick: () => goto(Route.viewAlbum({ id })), - }, - }, + toastManager.primary({ + description: $t('album_info_updated'), + button: { label: $t('view_album'), onclick: () => goto(Route.viewAlbum({ id })) }, }); return true; diff --git a/web/src/lib/utils/actions.ts b/web/src/lib/utils/actions.ts index 05de75d3bc..46265a78bb 100644 --- a/web/src/lib/utils/actions.ts +++ b/web/src/lib/utils/actions.ts @@ -1,4 +1,3 @@ -import ToastAction from '$lib/components/ToastAction.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; import type { StackResponse } from '$lib/utils/asset-utils'; @@ -32,24 +31,15 @@ export const deleteAssets = async ( await deleteBulk({ assetBulkDeleteDto: { ids, force } }); onAssetDelete(ids); - toastManager.custom( + toastManager.primary( { - component: ToastAction, - props: { - title: $t('success'), - description: force - ? $t('assets_permanently_deleted_count', { values: { count: ids.length } }) - : $t('assets_trashed_count', { values: { count: ids.length } }), - color: 'success', - button: - onUndoDelete && !force - ? { - color: 'secondary', - text: $t('undo'), - onClick: () => undoDeleteAssets(onUndoDelete, assets), - } - : undefined, - }, + description: force + ? $t('assets_permanently_deleted_count', { values: { count: ids.length } }) + : $t('assets_trashed_count', { values: { count: ids.length } }), + button: + onUndoDelete && !force + ? { label: $t('undo'), color: 'secondary', onclick: () => undoDeleteAssets(onUndoDelete, assets) } + : undefined, }, { timeout: 5000 }, ); diff --git a/web/src/lib/utils/asset-utils.ts b/web/src/lib/utils/asset-utils.ts index f82377b63f..284f540d1a 100644 --- a/web/src/lib/utils/asset-utils.ts +++ b/web/src/lib/utils/asset-utils.ts @@ -1,4 +1,3 @@ -import ToastAction from '$lib/components/ToastAction.svelte'; import { authManager } from '$lib/managers/auth-manager.svelte'; import { downloadManager } from '$lib/managers/download-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; @@ -326,16 +325,11 @@ export const stackAssets = async (assets: { id: string }[], showNotification = t try { const stack = await createStack({ stackCreateDto: { assetIds: assets.map(({ id }) => id) } }); if (showNotification) { - toastManager.custom({ - component: ToastAction, - props: { - title: $t('success'), - description: $t('stacked_assets_count', { values: { count: stack.assets.length } }), - color: 'success', - button: { - text: $t('view_stack'), - onClick: () => navigate({ targetRoute: 'current', assetId: stack.primaryAssetId }), - }, + toastManager.primary({ + description: $t('stacked_assets_count', { values: { count: stack.assets.length } }), + button: { + label: $t('view_stack'), + onclick: () => navigate({ targetRoute: 'current', assetId: stack.primaryAssetId }), }, }); } From c9c2322b9db46e4ee42e07cf7eac9bba3ca52f51 Mon Sep 17 00:00:00 2001 From: Andreas Heinz Date: Thu, 26 Mar 2026 18:18:23 +0100 Subject: [PATCH 019/156] feat(web): focus on face-editor search input (#27136) --- .../asset-viewer/face-editor/face-editor.svelte | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte index f2b9c2e157..8dd7adaa5f 100644 --- a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte +++ b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte @@ -10,7 +10,7 @@ import { Button, Input, modalManager, toastManager } from '@immich/ui'; import { Canvas, InteractiveFabricObject, Rect } from 'fabric'; import { clamp } from 'lodash-es'; - import { onMount } from 'svelte'; + import { onMount, tick } from 'svelte'; import { t } from 'svelte-i18n'; interface Props { @@ -27,6 +27,7 @@ let faceRect: Rect | undefined = $state(); let faceSelectorEl: HTMLDivElement | undefined = $state(); let scrollableListEl: HTMLDivElement | undefined = $state(); + let searchInputEl: HTMLInputElement | null = $state(null); let page = $state(1); let candidates = $state([]); @@ -81,6 +82,8 @@ onMount(async () => { setupCanvas(); await getPeople(); + await tick(); + searchInputEl?.focus(); }); const imageContentMetrics = $derived.by(() => { @@ -221,12 +224,15 @@ $effect(() => { const rect = faceRect; - if (rect) { + const cvs = canvas; + if (rect && cvs) { rect.on('moving', positionFaceSelector); rect.on('scaling', positionFaceSelector); + cvs.on('object:modified', () => searchInputEl?.focus()); return () => { rect.off('moving', positionFaceSelector); rect.off('scaling', positionFaceSelector); + cvs.off('object:modified', () => searchInputEl?.focus()); }; } }); @@ -290,7 +296,7 @@ }; - +
{$t('select_person_to_tag')}

- +
From 67cedfef179652a99505ca8de608e20266e20274 Mon Sep 17 00:00:00 2001 From: Timon Date: Thu, 26 Mar 2026 18:20:28 +0100 Subject: [PATCH 020/156] feat(web): add RemoveFromAlbumAction to asset viewer nav bar (#27000) --- .../asset-viewer/asset-viewer-nav-bar.svelte | 11 +++++++++-- .../components/asset-viewer/asset-viewer.svelte | 3 +++ .../timeline/TimelineAssetViewer.svelte | 15 +++++++++++++++ .../timeline/actions/RemoveFromAlbumAction.svelte | 12 +++++++----- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte index 75aa9197b8..00e845e8ec 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte @@ -8,6 +8,7 @@ import KeepThisDeleteOthersAction from '$lib/components/asset-viewer/actions/keep-this-delete-others.svelte'; import RatingAction from '$lib/components/asset-viewer/actions/rating-action.svelte'; import RemoveAssetFromStack from '$lib/components/asset-viewer/actions/remove-asset-from-stack.svelte'; + import RemoveFromAlbumAction from '$lib/components/timeline/actions/RemoveFromAlbumAction.svelte'; import RestoreAction from '$lib/components/asset-viewer/actions/restore-action.svelte'; import SetAlbumCoverAction from '$lib/components/asset-viewer/actions/set-album-cover-action.svelte'; import SetFeaturedPhotoAction from '$lib/components/asset-viewer/actions/set-person-featured-action.svelte'; @@ -15,8 +16,10 @@ import SetStackPrimaryAsset from '$lib/components/asset-viewer/actions/set-stack-primary-asset.svelte'; import SetVisibilityAction from '$lib/components/asset-viewer/actions/set-visibility-action.svelte'; import UnstackAction from '$lib/components/asset-viewer/actions/unstack-action.svelte'; + import LoadingDots from '$lib/components/LoadingDots.svelte'; import ButtonContextMenu from '$lib/components/shared-components/context-menu/button-context-menu.svelte'; import MenuOption from '$lib/components/shared-components/context-menu/menu-option.svelte'; + import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { languageManager } from '$lib/managers/language-manager.svelte'; import { Route } from '$lib/route'; @@ -36,8 +39,6 @@ type StackResponseDto, } from '@immich/sdk'; import { ActionButton, CommandPaletteDefaultProvider, Tooltip, type ActionItem } from '@immich/ui'; - import LoadingDots from '$lib/components/LoadingDots.svelte'; - import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { mdiArrowLeft, mdiArrowRight, @@ -60,6 +61,7 @@ onUndoDelete?: OnUndoDelete; onPlaySlideshow: () => void; onClose?: () => void; + onRemoveFromAlbum?: (assetIds: string[]) => void; playOriginalVideo: boolean; setPlayOriginalVideo: (value: boolean) => void; } @@ -75,11 +77,13 @@ onUndoDelete = undefined, onPlaySlideshow, onClose, + onRemoveFromAlbum, playOriginalVideo = false, setPlayOriginalVideo, }: Props = $props(); const isOwner = $derived($user && asset.ownerId === $user?.id); + const isAlbumOwner = $derived($user && album?.ownerId === $user?.id); const isLocked = $derived(asset.visibility === AssetVisibility.Locked); const smartSearchEnabled = $derived(featureFlagsManager.value.smartSearch); @@ -154,6 +158,9 @@ {/if} + {#if album && (isOwner || isAlbumOwner)} + + {/if} {#if isOwner} diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte index 076f76cbc7..c6e0de2955 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte @@ -71,6 +71,7 @@ onAction?: OnAction; onUndoDelete?: OnUndoDelete; onClose?: (asset: AssetResponseDto) => void; + onRemoveFromAlbum?: (assetIds: string[]) => void; onRandom?: () => Promise<{ id: string } | undefined>; } @@ -86,6 +87,7 @@ onAction, onUndoDelete, onClose, + onRemoveFromAlbum, onRandom, }: Props = $props(); @@ -478,6 +480,7 @@ {onUndoDelete} onPlaySlideshow={() => ($slideshowState = SlideshowState.PlaySlideshow)} onClose={onClose ? () => onClose(asset) : undefined} + {onRemoveFromAlbum} {playOriginalVideo} {setPlayOriginalVideo} /> diff --git a/web/src/lib/components/timeline/TimelineAssetViewer.svelte b/web/src/lib/components/timeline/TimelineAssetViewer.svelte index bd4ead6def..cc0289e92b 100644 --- a/web/src/lib/components/timeline/TimelineAssetViewer.svelte +++ b/web/src/lib/components/timeline/TimelineAssetViewer.svelte @@ -103,6 +103,20 @@ await navigate({ targetRoute: 'current', assetId: null, assetGridRouteSearchParams: $gridScrollTarget }); }; + const handleRemoveFromAlbum = async (assetIds: string[]) => { + timelineManager.removeAssets(assetIds); + + if (!assetIds.includes(assetCursor.current.id)) { + return; + } + + // keep the cleanup workflow in viewer by moving to adjacent asset first + // eslint-disable-next-line @typescript-eslint/no-unused-expressions + (await navigateToAsset(assetCursor?.nextAsset)) || + (await navigateToAsset(assetCursor?.previousAsset)) || + (await handleClose(assetCursor.current)); + }; + const handlePreAction = async (action: Action) => { switch (action.type) { case removeAction: @@ -232,6 +246,7 @@ }} onUndoDelete={handleUndoDelete} onRandom={handleRandom} + onRemoveFromAlbum={handleRemoveFromAlbum} onClose={handleClose} /> {/await} diff --git a/web/src/lib/components/timeline/actions/RemoveFromAlbumAction.svelte b/web/src/lib/components/timeline/actions/RemoveFromAlbumAction.svelte index ea2a8d4c2d..5d4943be0f 100644 --- a/web/src/lib/components/timeline/actions/RemoveFromAlbumAction.svelte +++ b/web/src/lib/components/timeline/actions/RemoveFromAlbumAction.svelte @@ -10,16 +10,19 @@ interface Props { album: AlbumResponseDto; onRemove: ((assetIds: string[]) => void) | undefined; + assetIds?: string[]; menuItem?: boolean; } - let { album = $bindable(), onRemove, menuItem = false }: Props = $props(); + let { album = $bindable(), onRemove, assetIds, menuItem = false }: Props = $props(); - const { getAssets, clearSelect } = getAssetControlContext(); + const context = getAssetControlContext(); const removeFromAlbum = async () => { + const ids = assetIds ?? context?.getAssets().map(({ id }) => id) ?? []; + const isConfirmed = await modalManager.showDialog({ - prompt: $t('remove_assets_album_confirmation', { values: { count: getAssets().length } }), + prompt: $t('remove_assets_album_confirmation', { values: { count: ids.length } }), }); if (!isConfirmed) { @@ -27,7 +30,6 @@ } try { - const ids = [...getAssets()].map((a) => a.id); const results = await removeAssetFromAlbum({ id: album.id, bulkIdsDto: { ids }, @@ -40,7 +42,7 @@ const count = results.filter(({ success }) => success).length; toastManager.primary($t('assets_removed_count', { values: { count } })); - clearSelect(); + context?.clearSelect(); } catch (error) { handleError(error, $t('errors.error_removing_assets_from_album')); } From 9b78f2c0ba6f11dd9935baed2ee82fc5f2737f7b Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Thu, 26 Mar 2026 13:21:36 -0400 Subject: [PATCH 021/156] chore: remove unused resources (#27055) --- docs/docs/guides/custom-map-styles.md | 4 +- server/resources/style-dark.json | 3180 ------------------------- server/resources/style-light.json | 3180 ------------------------- 3 files changed, 2 insertions(+), 6362 deletions(-) delete mode 100644 server/resources/style-dark.json delete mode 100644 server/resources/style-light.json diff --git a/docs/docs/guides/custom-map-styles.md b/docs/docs/guides/custom-map-styles.md index 1a61afc324..ac693c16ba 100644 --- a/docs/docs/guides/custom-map-styles.md +++ b/docs/docs/guides/custom-map-styles.md @@ -3,8 +3,8 @@ You may decide that you'd like to modify the style document which is used to draw the maps in Immich. In addition to visual customization, this also allows you to pick your own map tile provider instead of the default one. The default -`style.json` for [light theme](https://github.com/immich-app/immich/tree/main/server/resources/style-light.json) -and [dark theme](https://github.com/immich-app/immich/blob/main/server/resources/style-dark.json) +`style.json` for [light theme](https://tiles.immich.cloud/v1/style/light.json) +and [dark theme](https://tiles.immich.cloud/v1/style/dark.json) can be used as a basis for creating your own style. There are several sources for already-made `style.json` map themes, as well as diff --git a/server/resources/style-dark.json b/server/resources/style-dark.json deleted file mode 100644 index 91148e7814..0000000000 --- a/server/resources/style-dark.json +++ /dev/null @@ -1,3180 +0,0 @@ -{ - "version": 8, - "name": "Immich Map", - "id": "immich-map-dark", - "sources": { - "protomaps": { - "type": "vector", - "url": "https://tiles.immich.cloud/v1.json" - } - }, - "layers": [ - { - "id": "background", - "type": "background", - "paint": { - "background-color": "#2b2b2b" - } - }, - { - "id": "earth", - "type": "fill", - "source": "protomaps", - "source-layer": "earth", - "paint": { - "fill-color": "#141414" - } - }, - { - "id": "landuse_park", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "national_park", - "park", - "cemetery", - "protected_area", - "nature_reserve", - "forest", - "golf_course" - ] - ], - "paint": { - "fill-color": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 0, - "#181818", - 12, - "#181818" - ] - } - }, - { - "id": "landuse_urban_green", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "allotments", - "village_green", - "playground" - ] - ], - "paint": { - "fill-color": "#181818", - "fill-opacity": 0.7 - } - }, - { - "id": "landuse_hospital", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "hospital" - ] - ], - "paint": { - "fill-color": "#1d1d1d" - } - }, - { - "id": "landuse_industrial", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "industrial" - ] - ], - "paint": { - "fill-color": "#101010" - } - }, - { - "id": "landuse_school", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "school", - "university", - "college" - ] - ], - "paint": { - "fill-color": "#111111" - } - }, - { - "id": "landuse_beach", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "beach" - ] - ], - "paint": { - "fill-color": "#1f1f1f" - } - }, - { - "id": "landuse_zoo", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "zoo" - ] - ], - "paint": { - "fill-color": "#191919" - } - }, - { - "id": "landuse_military", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "military", - "naval_base", - "airfield" - ] - ], - "paint": { - "fill-color": "#191919" - } - }, - { - "id": "natural_wood", - "type": "fill", - "source": "protomaps", - "source-layer": "natural", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "wood", - "nature_reserve", - "forest" - ] - ], - "paint": { - "fill-color": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 0, - "#1a1a1a", - 12, - "#1a1a1a" - ] - } - }, - { - "id": "natural_scrub", - "type": "fill", - "source": "protomaps", - "source-layer": "natural", - "filter": [ - "in", - "pmap:kind", - "scrub", - "grassland", - "grass" - ], - "paint": { - "fill-color": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 0, - "#1c1c1c", - 12, - "#1c1c1c" - ] - } - }, - { - "id": "natural_glacier", - "type": "fill", - "source": "protomaps", - "source-layer": "natural", - "filter": [ - "==", - "pmap:kind", - "glacier" - ], - "paint": { - "fill-color": "#191919" - } - }, - { - "id": "natural_sand", - "type": "fill", - "source": "protomaps", - "source-layer": "natural", - "filter": [ - "==", - "pmap:kind", - "sand" - ], - "paint": { - "fill-color": "#161616" - } - }, - { - "id": "landuse_aerodrome", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "aerodrome" - ] - ], - "paint": { - "fill-color": "#191919" - } - }, - { - "id": "transit_runway", - "type": "line", - "source": "protomaps", - "source-layer": "transit", - "filter": [ - "any", - [ - "in", - "pmap:kind_detail", - "runway" - ] - ], - "paint": { - "line-color": "#323232", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 10, - 0, - 12, - 4, - 18, - 30 - ] - } - }, - { - "id": "transit_taxiway", - "type": "line", - "source": "protomaps", - "source-layer": "transit", - "minzoom": 13, - "filter": [ - "any", - [ - "in", - "pmap:kind_detail", - "taxiway" - ] - ], - "paint": { - "line-color": "#323232", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 15, - 6 - ] - } - }, - { - "id": "water", - "type": "fill", - "source": "protomaps", - "source-layer": "water", - "paint": { - "fill-color": "#333333" - } - }, - { - "id": "physical_line_stream", - "type": "line", - "source": "protomaps", - "source-layer": "physical_line", - "minzoom": 14, - "filter": [ - "all", - [ - "in", - "pmap:kind", - "stream" - ] - ], - "paint": { - "line-color": "#333333", - "line-width": 0.5 - } - }, - { - "id": "physical_line_river", - "type": "line", - "source": "protomaps", - "source-layer": "physical_line", - "minzoom": 9, - "filter": [ - "all", - [ - "in", - "pmap:kind", - "river" - ] - ], - "paint": { - "line-color": "#333333", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 9, - 0, - 9.5, - 1, - 18, - 12 - ] - } - }, - { - "id": "landuse_pedestrian", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "pedestrian" - ] - ], - "paint": { - "fill-color": "#191919" - } - }, - { - "id": "landuse_pier", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "pier" - ] - ], - "paint": { - "fill-color": "#0a0a0a" - } - }, - { - "id": "roads_tunnels_other_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "in", - "pmap:kind", - "other", - "path" - ] - ], - "paint": { - "line-color": "#101010", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 14, - 0, - 20, - 7 - ] - } - }, - { - "id": "roads_tunnels_minor_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ] - ], - "paint": { - "line-color": "#101010", - "line-dasharray": [ - 3, - 2 - ], - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 12, - 0, - 12.5, - 1 - ] - } - }, - { - "id": "roads_tunnels_link_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#101010", - "line-dasharray": [ - 3, - 2 - ], - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 12, - 0, - 12.5, - 1 - ] - } - }, - { - "id": "roads_tunnels_medium_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#101010", - "line-dasharray": [ - 3, - 2 - ], - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 0.5, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 10, - 0, - 10.5, - 1 - ] - } - }, - { - "id": "roads_tunnels_major_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#101010", - "line-dasharray": [ - 3, - 2 - ], - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 0.5, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 9, - 0, - 9.5, - 1 - ] - } - }, - { - "id": "roads_tunnels_highway_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#101010", - "line-dasharray": [ - 6, - 0.5 - ], - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 3.5, - 0.5, - 18, - 15 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 1, - 20, - 15 - ] - } - }, - { - "id": "roads_tunnels_other", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "in", - "pmap:kind", - "other", - "path" - ] - ], - "paint": { - "line-color": "#292929", - "line-dasharray": [ - 4.5, - 0.5 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 14, - 0, - 20, - 7 - ] - } - }, - { - "id": "roads_tunnels_minor", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ] - ], - "paint": { - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ] - } - }, - { - "id": "roads_tunnels_link", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ] - } - }, - { - "id": "roads_tunnels_medium", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 12, - 1.2, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_tunnels_major", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 6, - 0, - 12, - 1.6, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_tunnels_highway", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 6, - 1.1, - 12, - 1.6, - 15, - 5, - 18, - 15 - ] - } - }, - { - "id": "buildings", - "type": "fill", - "source": "protomaps", - "source-layer": "buildings", - "paint": { - "fill-color": "#0a0a0a", - "fill-opacity": 0.5 - } - }, - { - "id": "transit_pier", - "type": "line", - "source": "protomaps", - "source-layer": "transit", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "pier" - ] - ], - "paint": { - "line-color": "#0a0a0a", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 12, - 0, - 12.5, - 0.5, - 20, - 16 - ] - } - }, - { - "id": "roads_minor_service_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 13, - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ], - [ - "==", - "pmap:kind_detail", - "service" - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 18, - 8 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 0.8 - ] - } - }, - { - "id": "roads_minor_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ], - [ - "!=", - "pmap:kind_detail", - "service" - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 12, - 0, - 12.5, - 1 - ] - } - }, - { - "id": "roads_link_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 13, - "filter": [ - "all", - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1.5 - ] - } - }, - { - "id": "roads_medium_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 12, - 1.2, - 15, - 3, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 10, - 0, - 10.5, - 1.5 - ] - } - }, - { - "id": "roads_major_casing_late", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 6, - 0, - 12, - 1.6, - 15, - 3, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 9, - 0, - 9.5, - 1 - ] - } - }, - { - "id": "roads_highway_casing_late", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 3.5, - 0.5, - 18, - 15 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 1, - 20, - 15 - ] - } - }, - { - "id": "roads_other", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "in", - "pmap:kind", - "other", - "path" - ] - ], - "paint": { - "line-color": "#1f1f1f", - "line-dasharray": [ - 3, - 1 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 14, - 0, - 20, - 7 - ] - } - }, - { - "id": "roads_link", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#1f1f1f", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ] - } - }, - { - "id": "roads_minor_service", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ], - [ - "==", - "pmap:kind_detail", - "service" - ] - ], - "paint": { - "line-color": "#1f1f1f", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 18, - 8 - ] - } - }, - { - "id": "roads_minor", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ], - [ - "!=", - "pmap:kind_detail", - "service" - ] - ], - "paint": { - "line-color": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - "#292929", - 16, - "#1f1f1f" - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ] - } - }, - { - "id": "roads_medium", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 12, - 1.2, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_major_casing_early", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "maxzoom": 12, - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 0.5, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 9, - 0, - 9.5, - 1 - ] - } - }, - { - "id": "roads_major", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 6, - 0, - 12, - 1.6, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_highway_casing_early", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "maxzoom": 12, - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 3.5, - 0.5, - 18, - 15 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 1 - ] - } - }, - { - "id": "roads_highway", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 6, - 1.1, - 12, - 1.6, - 15, - 5, - 18, - 15 - ] - } - }, - { - "id": "transit_railway", - "type": "line", - "source": "protomaps", - "source-layer": "transit", - "filter": [ - "all", - [ - "==", - "pmap:kind", - "rail" - ] - ], - "paint": { - "line-dasharray": [ - 0.3, - 0.75 - ], - "line-opacity": 0.5, - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 6, - 0.15, - 18, - 9 - ] - } - }, - { - "id": "boundaries_country", - "type": "line", - "source": "protomaps", - "source-layer": "boundaries", - "filter": [ - "<=", - "pmap:min_admin_level", - 2 - ], - "paint": { - "line-color": "#707070", - "line-width": 1, - "line-dasharray": [ - 3, - 2 - ] - } - }, - { - "id": "boundaries", - "type": "line", - "source": "protomaps", - "source-layer": "boundaries", - "filter": [ - ">", - "pmap:min_admin_level", - 2 - ], - "paint": { - "line-color": "#707070", - "line-width": 0.5, - "line-dasharray": [ - 3, - 2 - ] - } - }, - { - "id": "roads_bridges_other_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "in", - "pmap:kind", - "other", - "path" - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 14, - 0, - 20, - 7 - ] - } - }, - { - "id": "roads_bridges_link_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 12, - 0, - 12.5, - 1.5 - ] - } - }, - { - "id": "roads_bridges_minor_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 0.8 - ] - } - }, - { - "id": "roads_bridges_medium_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 12, - 1.2, - 15, - 3, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 10, - 0, - 10.5, - 1.5 - ] - } - }, - { - "id": "roads_bridges_major_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 0.5, - 18, - 10 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 9, - 0, - 9.5, - 1.5 - ] - } - }, - { - "id": "roads_bridges_other", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "in", - "pmap:kind", - "other", - "path" - ] - ], - "paint": { - "line-color": "#1f1f1f", - "line-dasharray": [ - 2, - 1 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 14, - 0, - 20, - 7 - ] - } - }, - { - "id": "roads_bridges_minor", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ] - ], - "paint": { - "line-color": "#1f1f1f", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ] - } - }, - { - "id": "roads_bridges_link", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#1f1f1f", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ] - } - }, - { - "id": "roads_bridges_medium", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 12, - 1.2, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_bridges_major", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 6, - 0, - 12, - 1.6, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_bridges_highway_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#141414", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 3.5, - 0.5, - 18, - 15 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 1, - 20, - 15 - ] - } - }, - { - "id": "roads_bridges_highway", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#292929", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 6, - 1.1, - 12, - 1.6, - 15, - 5, - 18, - 15 - ] - } - }, - { - "id": "physical_line_waterway_label", - "type": "symbol", - "source": "protomaps", - "source-layer": "physical_line", - "minzoom": 13, - "filter": [ - "all", - [ - "in", - "pmap:kind", - "river", - "stream" - ] - ], - "layout": { - "symbol-placement": "line", - "text-font": [ - "Noto Sans Regular" - ], - "text-field": [ - "get", - "name" - ], - "text-size": 12, - "text-letter-spacing": 0.3 - }, - "paint": { - "text-color": "#707070" - } - }, - { - "id": "physical_point_peak", - "type": "symbol", - "source": "protomaps", - "source-layer": "physical_point", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "peak" - ] - ], - "layout": { - "text-font": [ - "Noto Sans Italic" - ], - "text-field": [ - "get", - "name" - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 10, - 8, - 16, - 12 - ], - "text-letter-spacing": 0.1, - "text-max-width": 9 - }, - "paint": { - "text-color": "#707070", - "text-halo-width": 1.5 - } - }, - { - "id": "roads_labels_minor", - "type": "symbol", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 15, - "filter": [ - "any", - [ - "in", - "pmap:kind", - "minor_road", - "other", - "path" - ] - ], - "layout": { - "symbol-sort-key": [ - "get", - "pmap:min_zoom" - ], - "symbol-placement": "line", - "text-font": [ - "Noto Sans Regular" - ], - "text-field": [ - "get", - "name" - ], - "text-size": 12 - }, - "paint": { - "text-color": "#525252", - "text-halo-color": "#141414", - "text-halo-width": 2 - } - }, - { - "id": "physical_point_ocean", - "type": "symbol", - "source": "protomaps", - "source-layer": "physical_point", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "sea", - "ocean", - "lake", - "water", - "bay", - "strait", - "fjord" - ] - ], - "layout": { - "text-font": [ - "Noto Sans Medium" - ], - "text-field": [ - "get", - "name" - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 3, - 10, - 10, - 12 - ], - "text-letter-spacing": 0.1, - "text-max-width": 9, - "text-transform": "uppercase" - }, - "paint": { - "text-color": "#707070" - } - }, - { - "id": "physical_point_lakes", - "type": "symbol", - "source": "protomaps", - "source-layer": "physical_point", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "lake", - "water" - ] - ], - "layout": { - "text-font": [ - "Noto Sans Medium" - ], - "text-field": [ - "get", - "name" - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 3, - 0, - 6, - 12, - 10, - 12 - ], - "text-letter-spacing": 0.1, - "text-max-width": 9 - }, - "paint": { - "text-color": "#707070" - } - }, - { - "id": "roads_labels_major", - "type": "symbol", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 11, - "filter": [ - "any", - [ - "in", - "pmap:kind", - "highway", - "major_road", - "medium_road" - ] - ], - "layout": { - "symbol-sort-key": [ - "get", - "pmap:min_zoom" - ], - "symbol-placement": "line", - "text-font": [ - "Noto Sans Regular" - ], - "text-field": [ - "get", - "name" - ], - "text-size": 12 - }, - "paint": { - "text-color": "#5c5c5c", - "text-halo-color": "#141414", - "text-halo-width": 2 - } - }, - { - "id": "places_subplace", - "type": "symbol", - "source": "protomaps", - "source-layer": "places", - "filter": [ - "==", - "pmap:kind", - "neighbourhood" - ], - "layout": { - "symbol-sort-key": [ - "get", - "pmap:min_zoom" - ], - "text-field": "{name}", - "text-font": [ - "Noto Sans Regular" - ], - "text-max-width": 7, - "text-letter-spacing": 0.1, - "text-padding": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 5, - 2, - 8, - 4, - 12, - 18, - 15, - 20 - ], - "text-size": [ - "interpolate", - [ - "exponential", - 1.2 - ], - [ - "zoom" - ], - 11, - 8, - 14, - 14, - 18, - 24 - ], - "text-transform": "uppercase" - }, - "paint": { - "text-color": "#5c5c5c", - "text-halo-color": "#141414", - "text-halo-width": 1.5 - } - }, - { - "id": "places_locality", - "type": "symbol", - "source": "protomaps", - "source-layer": "places", - "filter": [ - "==", - "pmap:kind", - "locality" - ], - "layout": { - "icon-image": [ - "step", - [ - "zoom" - ], - "townspot", - 8, - "" - ], - "icon-size": 0.7, - "text-field": "{name}", - "text-font": [ - "case", - [ - "<=", - [ - "get", - "pmap:min_zoom" - ], - 5 - ], - [ - "literal", - [ - "Noto Sans Medium" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ], - "text-padding": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 5, - 3, - 8, - 7, - 12, - 11 - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 2, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 13 - ], - 8, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 13 - ], - 13, - 0 - ], - 4, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 13 - ], - 10, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 13 - ], - 15, - 0 - ], - 6, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 12 - ], - 11, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 12 - ], - 17, - 0 - ], - 8, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 11 - ], - 11, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 11 - ], - 18, - 0 - ], - 10, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 9 - ], - 12, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 9 - ], - 20, - 0 - ], - 15, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 8 - ], - 12, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 8 - ], - 22, - 0 - ] - ], - "icon-padding": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 0, - 0, - 8, - 4, - 10, - 8, - 12, - 6, - 22, - 2 - ], - "text-anchor": [ - "step", - [ - "zoom" - ], - "left", - 8, - "center" - ], - "text-radial-offset": 0.4 - }, - "paint": { - "text-color": "#999999", - "text-halo-color": "#141414", - "text-halo-width": 1 - } - }, - { - "id": "places_region", - "type": "symbol", - "source": "protomaps", - "source-layer": "places", - "filter": [ - "==", - "pmap:kind", - "region" - ], - "layout": { - "symbol-sort-key": [ - "get", - "pmap:min_zoom" - ], - "text-field": [ - "step", - [ - "zoom" - ], - [ - "get", - "name:short" - ], - 6, - [ - "get", - "name" - ] - ], - "text-font": [ - "Noto Sans Regular" - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 3, - 11, - 7, - 16 - ], - "text-radial-offset": 0.2, - "text-anchor": "center", - "text-transform": "uppercase" - }, - "paint": { - "text-color": "#3d3d3d", - "text-halo-color": "#141414", - "text-halo-width": 2 - } - }, - { - "id": "places_country", - "type": "symbol", - "source": "protomaps", - "source-layer": "places", - "filter": [ - "==", - "pmap:kind", - "country" - ], - "layout": { - "symbol-sort-key": [ - "get", - "pmap:min_zoom" - ], - "text-field": "{name}", - "text-font": [ - "Noto Sans Medium" - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 2, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 10 - ], - 8, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 10 - ], - 12, - 0 - ], - 6, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 8 - ], - 10, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 8 - ], - 18, - 0 - ], - 8, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 7 - ], - 11, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 7 - ], - 20, - 0 - ] - ], - "icon-padding": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 0, - 2, - 14, - 2, - 16, - 20, - 17, - 2, - 22, - 2 - ], - "text-transform": "uppercase" - }, - "paint": { - "text-color": "#707070" - } - } - ], - "sprite": "https://static.immich.cloud/tiles/sprites/v1/dark", - "glyphs": "https://static.immich.cloud/tiles/fonts/{fontstack}/{range}.pbf" -} diff --git a/server/resources/style-light.json b/server/resources/style-light.json deleted file mode 100644 index 612622ef85..0000000000 --- a/server/resources/style-light.json +++ /dev/null @@ -1,3180 +0,0 @@ -{ - "version": 8, - "name": "Immich Map", - "id": "immich-map-light", - "sources": { - "protomaps": { - "type": "vector", - "url": "https://tiles.immich.cloud/v1.json" - } - }, - "layers": [ - { - "id": "background", - "type": "background", - "paint": { - "background-color": "#cccccc" - } - }, - { - "id": "earth", - "type": "fill", - "source": "protomaps", - "source-layer": "earth", - "paint": { - "fill-color": "#e0e0e0" - } - }, - { - "id": "landuse_park", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "national_park", - "park", - "cemetery", - "protected_area", - "nature_reserve", - "forest", - "golf_course" - ] - ], - "paint": { - "fill-color": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 0, - "#cfddd5", - 12, - "#9cd3b4" - ] - } - }, - { - "id": "landuse_urban_green", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "allotments", - "village_green", - "playground" - ] - ], - "paint": { - "fill-color": "#9cd3b4", - "fill-opacity": 0.7 - } - }, - { - "id": "landuse_hospital", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "hospital" - ] - ], - "paint": { - "fill-color": "#e4dad9" - } - }, - { - "id": "landuse_industrial", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "industrial" - ] - ], - "paint": { - "fill-color": "#d1dde1" - } - }, - { - "id": "landuse_school", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "school", - "university", - "college" - ] - ], - "paint": { - "fill-color": "#e4ded7" - } - }, - { - "id": "landuse_beach", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "beach" - ] - ], - "paint": { - "fill-color": "#e8e4d0" - } - }, - { - "id": "landuse_zoo", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "zoo" - ] - ], - "paint": { - "fill-color": "#c6dcdc" - } - }, - { - "id": "landuse_military", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "military", - "naval_base", - "airfield" - ] - ], - "paint": { - "fill-color": "#c6dcdc" - } - }, - { - "id": "natural_wood", - "type": "fill", - "source": "protomaps", - "source-layer": "natural", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "wood", - "nature_reserve", - "forest" - ] - ], - "paint": { - "fill-color": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 0, - "#d0ded0", - 12, - "#a0d9a0" - ] - } - }, - { - "id": "natural_scrub", - "type": "fill", - "source": "protomaps", - "source-layer": "natural", - "filter": [ - "in", - "pmap:kind", - "scrub", - "grassland", - "grass" - ], - "paint": { - "fill-color": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 0, - "#cedcd7", - 12, - "#99d2bb" - ] - } - }, - { - "id": "natural_glacier", - "type": "fill", - "source": "protomaps", - "source-layer": "natural", - "filter": [ - "==", - "pmap:kind", - "glacier" - ], - "paint": { - "fill-color": "#e7e7e7" - } - }, - { - "id": "natural_sand", - "type": "fill", - "source": "protomaps", - "source-layer": "natural", - "filter": [ - "==", - "pmap:kind", - "sand" - ], - "paint": { - "fill-color": "#e2e0d7" - } - }, - { - "id": "landuse_aerodrome", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "aerodrome" - ] - ], - "paint": { - "fill-color": "#dadbdf" - } - }, - { - "id": "transit_runway", - "type": "line", - "source": "protomaps", - "source-layer": "transit", - "filter": [ - "any", - [ - "in", - "pmap:kind_detail", - "runway" - ] - ], - "paint": { - "line-color": "#e9e9ed", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 10, - 0, - 12, - 4, - 18, - 30 - ] - } - }, - { - "id": "transit_taxiway", - "type": "line", - "source": "protomaps", - "source-layer": "transit", - "minzoom": 13, - "filter": [ - "any", - [ - "in", - "pmap:kind_detail", - "taxiway" - ] - ], - "paint": { - "line-color": "#e9e9ed", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 15, - 6 - ] - } - }, - { - "id": "water", - "type": "fill", - "source": "protomaps", - "source-layer": "water", - "paint": { - "fill-color": "rgba(148, 209, 236, 0.66)" - } - }, - { - "id": "physical_line_stream", - "type": "line", - "source": "protomaps", - "source-layer": "physical_line", - "minzoom": 14, - "filter": [ - "all", - [ - "in", - "pmap:kind", - "stream" - ] - ], - "paint": { - "line-color": "rgba(148, 209, 236, 0.66)", - "line-width": 0.5 - } - }, - { - "id": "physical_line_river", - "type": "line", - "source": "protomaps", - "source-layer": "physical_line", - "minzoom": 9, - "filter": [ - "all", - [ - "in", - "pmap:kind", - "river" - ] - ], - "paint": { - "line-color": "rgba(148, 209, 236, 0.66)", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 9, - 0, - 9.5, - 1, - 18, - 12 - ] - } - }, - { - "id": "landuse_pedestrian", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "pedestrian" - ] - ], - "paint": { - "fill-color": "#e3e0d4" - } - }, - { - "id": "landuse_pier", - "type": "fill", - "source": "protomaps", - "source-layer": "landuse", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "pier" - ] - ], - "paint": { - "fill-color": "#e0e0e0" - } - }, - { - "id": "roads_tunnels_other_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "in", - "pmap:kind", - "other", - "path" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 14, - 0, - 20, - 7 - ] - } - }, - { - "id": "roads_tunnels_minor_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-dasharray": [ - 3, - 2 - ], - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 12, - 0, - 12.5, - 1 - ] - } - }, - { - "id": "roads_tunnels_link_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-dasharray": [ - 3, - 2 - ], - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 12, - 0, - 12.5, - 1 - ] - } - }, - { - "id": "roads_tunnels_medium_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-dasharray": [ - 3, - 2 - ], - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 0.5, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 10, - 0, - 10.5, - 1 - ] - } - }, - { - "id": "roads_tunnels_major_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-dasharray": [ - 3, - 2 - ], - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 0.5, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 9, - 0, - 9.5, - 1 - ] - } - }, - { - "id": "roads_tunnels_highway_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-dasharray": [ - 6, - 0.5 - ], - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 3.5, - 0.5, - 18, - 15 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 1, - 20, - 15 - ] - } - }, - { - "id": "roads_tunnels_other", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "in", - "pmap:kind", - "other", - "path" - ] - ], - "paint": { - "line-color": "#d5d5d5", - "line-dasharray": [ - 4.5, - 0.5 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 14, - 0, - 20, - 7 - ] - } - }, - { - "id": "roads_tunnels_minor", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ] - ], - "paint": { - "line-color": "#d5d5d5", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ] - } - }, - { - "id": "roads_tunnels_link", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#d5d5d5", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ] - } - }, - { - "id": "roads_tunnels_medium", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#d5d5d5", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 12, - 1.2, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_tunnels_major", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#d5d5d5", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 6, - 0, - 12, - 1.6, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_tunnels_highway", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "<", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#d5d5d5", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 6, - 1.1, - 12, - 1.6, - 15, - 5, - 18, - 15 - ] - } - }, - { - "id": "buildings", - "type": "fill", - "source": "protomaps", - "source-layer": "buildings", - "paint": { - "fill-color": "#cccccc", - "fill-opacity": 0.5 - } - }, - { - "id": "transit_pier", - "type": "line", - "source": "protomaps", - "source-layer": "transit", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "pier" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 12, - 0, - 12.5, - 0.5, - 20, - 16 - ] - } - }, - { - "id": "roads_minor_service_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 13, - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ], - [ - "==", - "pmap:kind_detail", - "service" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 18, - 8 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 0.8 - ] - } - }, - { - "id": "roads_minor_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ], - [ - "!=", - "pmap:kind_detail", - "service" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 12, - 0, - 12.5, - 1 - ] - } - }, - { - "id": "roads_link_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 13, - "filter": [ - "all", - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1.5 - ] - } - }, - { - "id": "roads_medium_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 12, - 1.2, - 15, - 3, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 10, - 0, - 10.5, - 1.5 - ] - } - }, - { - "id": "roads_major_casing_late", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 6, - 0, - 12, - 1.6, - 15, - 3, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 9, - 0, - 9.5, - 1 - ] - } - }, - { - "id": "roads_highway_casing_late", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 3.5, - 0.5, - 18, - 15 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 1, - 20, - 15 - ] - } - }, - { - "id": "roads_other", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "in", - "pmap:kind", - "other", - "path" - ] - ], - "paint": { - "line-color": "#ebebeb", - "line-dasharray": [ - 3, - 1 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 14, - 0, - 20, - 7 - ] - } - }, - { - "id": "roads_link", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#ffffff", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ] - } - }, - { - "id": "roads_minor_service", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ], - [ - "==", - "pmap:kind_detail", - "service" - ] - ], - "paint": { - "line-color": "#ebebeb", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 18, - 8 - ] - } - }, - { - "id": "roads_minor", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ], - [ - "!=", - "pmap:kind_detail", - "service" - ] - ], - "paint": { - "line-color": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - "#ebebeb", - 16, - "#ffffff" - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ] - } - }, - { - "id": "roads_medium", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#f5f5f5", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 12, - 1.2, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_major_casing_early", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "maxzoom": 12, - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 0.5, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 9, - 0, - 9.5, - 1 - ] - } - }, - { - "id": "roads_major", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#ffffff", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 6, - 0, - 12, - 1.6, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_highway_casing_early", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "maxzoom": 12, - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 3.5, - 0.5, - 18, - 15 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 1 - ] - } - }, - { - "id": "roads_highway", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - "==", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#ffffff", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 6, - 1.1, - 12, - 1.6, - 15, - 5, - 18, - 15 - ] - } - }, - { - "id": "transit_railway", - "type": "line", - "source": "protomaps", - "source-layer": "transit", - "filter": [ - "all", - [ - "==", - "pmap:kind", - "rail" - ] - ], - "paint": { - "line-dasharray": [ - 0.3, - 0.75 - ], - "line-opacity": 0.5, - "line-color": "#a7b1b3", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 6, - 0.15, - 18, - 9 - ] - } - }, - { - "id": "boundaries_country", - "type": "line", - "source": "protomaps", - "source-layer": "boundaries", - "filter": [ - "<=", - "pmap:min_admin_level", - 2 - ], - "paint": { - "line-color": "#adadad", - "line-width": 1, - "line-dasharray": [ - 3, - 2 - ] - } - }, - { - "id": "boundaries", - "type": "line", - "source": "protomaps", - "source-layer": "boundaries", - "filter": [ - ">", - "pmap:min_admin_level", - 2 - ], - "paint": { - "line-color": "#adadad", - "line-width": 0.5, - "line-dasharray": [ - 3, - 2 - ] - } - }, - { - "id": "roads_bridges_other_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "in", - "pmap:kind", - "other", - "path" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 14, - 0, - 20, - 7 - ] - } - }, - { - "id": "roads_bridges_link_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 12, - 0, - 12.5, - 1.5 - ] - } - }, - { - "id": "roads_bridges_minor_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 0.8 - ] - } - }, - { - "id": "roads_bridges_medium_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 12, - 1.2, - 15, - 3, - 18, - 13 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 10, - 0, - 10.5, - 1.5 - ] - } - }, - { - "id": "roads_bridges_major_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 0.5, - 18, - 10 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 9, - 0, - 9.5, - 1.5 - ] - } - }, - { - "id": "roads_bridges_other", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "in", - "pmap:kind", - "other", - "path" - ] - ], - "paint": { - "line-color": "#ebebeb", - "line-dasharray": [ - 2, - 1 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 14, - 0, - 20, - 7 - ] - } - }, - { - "id": "roads_bridges_minor", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "minor_road" - ] - ], - "paint": { - "line-color": "#ffffff", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 11, - 0, - 12.5, - 0.5, - 15, - 2, - 18, - 11 - ] - } - }, - { - "id": "roads_bridges_link", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#ffffff", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 13, - 0, - 13.5, - 1, - 18, - 11 - ] - } - }, - { - "id": "roads_bridges_medium", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "medium_road" - ] - ], - "paint": { - "line-color": "#f0eded", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 12, - 1.2, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_bridges_major", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "major_road" - ] - ], - "paint": { - "line-color": "#f5f5f5", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 6, - 0, - 12, - 1.6, - 15, - 3, - 18, - 13 - ] - } - }, - { - "id": "roads_bridges_highway_casing", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 12, - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#e0e0e0", - "line-gap-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 3.5, - 0.5, - 18, - 15 - ], - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 7, - 0, - 7.5, - 1, - 20, - 15 - ] - } - }, - { - "id": "roads_bridges_highway", - "type": "line", - "source": "protomaps", - "source-layer": "roads", - "filter": [ - "all", - [ - ">", - "pmap:level", - 0 - ], - [ - "==", - "pmap:kind", - "highway" - ], - [ - "!=", - "pmap:link", - 1 - ] - ], - "paint": { - "line-color": "#ffffff", - "line-width": [ - "interpolate", - [ - "exponential", - 1.6 - ], - [ - "zoom" - ], - 3, - 0, - 6, - 1.1, - 12, - 1.6, - 15, - 5, - 18, - 15 - ] - } - }, - { - "id": "physical_line_waterway_label", - "type": "symbol", - "source": "protomaps", - "source-layer": "physical_line", - "minzoom": 13, - "filter": [ - "all", - [ - "in", - "pmap:kind", - "river", - "stream" - ] - ], - "layout": { - "symbol-placement": "line", - "text-font": [ - "Noto Sans Regular" - ], - "text-field": [ - "get", - "name" - ], - "text-size": 12, - "text-letter-spacing": 0.3 - }, - "paint": { - "text-color": "#ffffff" - } - }, - { - "id": "physical_point_peak", - "type": "symbol", - "source": "protomaps", - "source-layer": "physical_point", - "filter": [ - "any", - [ - "==", - "pmap:kind", - "peak" - ] - ], - "layout": { - "text-font": [ - "Noto Sans Italic" - ], - "text-field": [ - "get", - "name" - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 10, - 8, - 16, - 12 - ], - "text-letter-spacing": 0.1, - "text-max-width": 9 - }, - "paint": { - "text-color": "#7e9aa0", - "text-halo-width": 1.5 - } - }, - { - "id": "roads_labels_minor", - "type": "symbol", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 15, - "filter": [ - "any", - [ - "in", - "pmap:kind", - "minor_road", - "other", - "path" - ] - ], - "layout": { - "symbol-sort-key": [ - "get", - "pmap:min_zoom" - ], - "symbol-placement": "line", - "text-font": [ - "Noto Sans Regular" - ], - "text-field": [ - "get", - "name" - ], - "text-size": 12 - }, - "paint": { - "text-color": "#91888b", - "text-halo-color": "#ffffff", - "text-halo-width": 2 - } - }, - { - "id": "physical_point_ocean", - "type": "symbol", - "source": "protomaps", - "source-layer": "physical_point", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "sea", - "ocean", - "lake", - "water", - "bay", - "strait", - "fjord" - ] - ], - "layout": { - "text-font": [ - "Noto Sans Medium" - ], - "text-field": [ - "get", - "name" - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 3, - 10, - 10, - 12 - ], - "text-letter-spacing": 0.1, - "text-max-width": 9, - "text-transform": "uppercase" - }, - "paint": { - "text-color": "#ffffff" - } - }, - { - "id": "physical_point_lakes", - "type": "symbol", - "source": "protomaps", - "source-layer": "physical_point", - "filter": [ - "any", - [ - "in", - "pmap:kind", - "lake", - "water" - ] - ], - "layout": { - "text-font": [ - "Noto Sans Medium" - ], - "text-field": [ - "get", - "name" - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 3, - 0, - 6, - 12, - 10, - 12 - ], - "text-letter-spacing": 0.1, - "text-max-width": 9 - }, - "paint": { - "text-color": "#ffffff" - } - }, - { - "id": "roads_labels_major", - "type": "symbol", - "source": "protomaps", - "source-layer": "roads", - "minzoom": 11, - "filter": [ - "any", - [ - "in", - "pmap:kind", - "highway", - "major_road", - "medium_road" - ] - ], - "layout": { - "symbol-sort-key": [ - "get", - "pmap:min_zoom" - ], - "symbol-placement": "line", - "text-font": [ - "Noto Sans Regular" - ], - "text-field": [ - "get", - "name" - ], - "text-size": 12 - }, - "paint": { - "text-color": "#938a8d", - "text-halo-color": "#ffffff", - "text-halo-width": 2 - } - }, - { - "id": "places_subplace", - "type": "symbol", - "source": "protomaps", - "source-layer": "places", - "filter": [ - "==", - "pmap:kind", - "neighbourhood" - ], - "layout": { - "symbol-sort-key": [ - "get", - "pmap:min_zoom" - ], - "text-field": "{name}", - "text-font": [ - "Noto Sans Regular" - ], - "text-max-width": 7, - "text-letter-spacing": 0.1, - "text-padding": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 5, - 2, - 8, - 4, - 12, - 18, - 15, - 20 - ], - "text-size": [ - "interpolate", - [ - "exponential", - 1.2 - ], - [ - "zoom" - ], - 11, - 8, - 14, - 14, - 18, - 24 - ], - "text-transform": "uppercase" - }, - "paint": { - "text-color": "#8f8f8f", - "text-halo-color": "#e0e0e0", - "text-halo-width": 1.5 - } - }, - { - "id": "places_locality", - "type": "symbol", - "source": "protomaps", - "source-layer": "places", - "filter": [ - "==", - "pmap:kind", - "locality" - ], - "layout": { - "icon-image": [ - "step", - [ - "zoom" - ], - "townspot", - 8, - "" - ], - "icon-size": 0.7, - "text-field": "{name}", - "text-font": [ - "case", - [ - "<=", - [ - "get", - "pmap:min_zoom" - ], - 5 - ], - [ - "literal", - [ - "Noto Sans Medium" - ] - ], - [ - "literal", - [ - "Noto Sans Regular" - ] - ] - ], - "text-padding": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 5, - 3, - 8, - 7, - 12, - 11 - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 2, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 13 - ], - 8, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 13 - ], - 13, - 0 - ], - 4, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 13 - ], - 10, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 13 - ], - 15, - 0 - ], - 6, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 12 - ], - 11, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 12 - ], - 17, - 0 - ], - 8, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 11 - ], - 11, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 11 - ], - 18, - 0 - ], - 10, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 9 - ], - 12, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 9 - ], - 20, - 0 - ], - 15, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 8 - ], - 12, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 8 - ], - 22, - 0 - ] - ], - "icon-padding": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 0, - 0, - 8, - 4, - 10, - 8, - 12, - 6, - 22, - 2 - ], - "text-anchor": [ - "step", - [ - "zoom" - ], - "left", - 8, - "center" - ], - "text-radial-offset": 0.4 - }, - "paint": { - "text-color": "#5c5c5c", - "text-halo-color": "#e0e0e0", - "text-halo-width": 1 - } - }, - { - "id": "places_region", - "type": "symbol", - "source": "protomaps", - "source-layer": "places", - "filter": [ - "==", - "pmap:kind", - "region" - ], - "layout": { - "symbol-sort-key": [ - "get", - "pmap:min_zoom" - ], - "text-field": [ - "step", - [ - "zoom" - ], - [ - "get", - "name:short" - ], - 6, - [ - "get", - "name" - ] - ], - "text-font": [ - "Noto Sans Regular" - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 3, - 11, - 7, - 16 - ], - "text-radial-offset": 0.2, - "text-anchor": "center", - "text-transform": "uppercase" - }, - "paint": { - "text-color": "#b3b3b3", - "text-halo-color": "#e0e0e0", - "text-halo-width": 2 - } - }, - { - "id": "places_country", - "type": "symbol", - "source": "protomaps", - "source-layer": "places", - "filter": [ - "==", - "pmap:kind", - "country" - ], - "layout": { - "symbol-sort-key": [ - "get", - "pmap:min_zoom" - ], - "text-field": "{name}", - "text-font": [ - "Noto Sans Medium" - ], - "text-size": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 2, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 10 - ], - 8, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 10 - ], - 12, - 0 - ], - 6, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 8 - ], - 10, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 8 - ], - 18, - 0 - ], - 8, - [ - "case", - [ - "<", - [ - "get", - "pmap:population_rank" - ], - 7 - ], - 11, - [ - ">=", - [ - "get", - "pmap:population_rank" - ], - 7 - ], - 20, - 0 - ] - ], - "icon-padding": [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 0, - 2, - 14, - 2, - 16, - 20, - 17, - 2, - 22, - 2 - ], - "text-transform": "uppercase" - }, - "paint": { - "text-color": "#a3a3a3" - } - } - ], - "sprite": "https://static.immich.cloud/tiles/sprites/v1/light", - "glyphs": "https://static.immich.cloud/tiles/fonts/{fontstack}/{range}.pbf" -} From 8dd0d7f34cca01583da992c2d3fad7ff2e4ddb53 Mon Sep 17 00:00:00 2001 From: Mert <101130780+mertalev@users.noreply.github.com> Date: Thu, 26 Mar 2026 13:21:52 -0400 Subject: [PATCH 022/156] fix(server): memory fragmentation (#27027) --- server/bin/start.sh | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/server/bin/start.sh b/server/bin/start.sh index 0a26be8e0b..15f4411959 100755 --- a/server/bin/start.sh +++ b/server/bin/start.sh @@ -15,13 +15,12 @@ log_message() { log_message "Initializing Immich $IMMICH_SOURCE_REF" -# TODO: Update to mimalloc v3 when verified memory isn't released issue is fixed -# lib_path="/usr/lib/$(arch)-linux-gnu/libmimalloc.so.3" -# if [ -f "$lib_path" ]; then -# export LD_PRELOAD="$lib_path" -# else -# echo "skipping libmimalloc - path not found $lib_path" -# fi +lib_path="/usr/lib/$(arch)-linux-gnu/libmimalloc.so.3" +if [ -f "$lib_path" ]; then + export LD_PRELOAD="$lib_path" +else + echo "skipping libmimalloc - path not found $lib_path" +fi export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/jellyfin-ffmpeg/lib" SERVER_HOME="$(readlink -f "$(dirname "$0")/..")" From fae25dbe65ab0127505fd457238b5567ffda0fa7 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Thu, 26 Mar 2026 13:22:03 -0400 Subject: [PATCH 023/156] chore: whitelist server deploy files (#27056) --- server/package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/package.json b/server/package.json index 3b0c5e198a..b95135b558 100644 --- a/server/package.json +++ b/server/package.json @@ -5,6 +5,10 @@ "author": "", "private": true, "license": "GNU Affero General Public License version 3", + "files": [ + "bin", + "dist" + ], "scripts": { "build": "nest build", "format": "prettier --cache --check .", From 940a1d4ab8170ea9642ca4dc3cc3095499889f02 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Thu, 26 Mar 2026 13:22:14 -0400 Subject: [PATCH 024/156] refactor: change location (#27201) --- .../asset-viewer/detail-panel-location.svelte | 27 +++------- .../actions/ChangeLocationAction.svelte | 28 ++++------ web/src/lib/index.spec.ts | 18 ++++++- web/src/lib/index.ts | 2 + .../managers/geolocation.manager.svelte.ts | 15 ++++++ .../GeolocationPointPickerModal.svelte} | 54 ++++++++++--------- .../GeolocationUpdateConfirmModal.svelte | 13 ++--- web/src/lib/stores/asset-editor.store.ts | 4 -- web/src/lib/types.ts | 2 + .../(user)/utilities/geolocation/+page.svelte | 52 ++++++++++-------- 10 files changed, 119 insertions(+), 96 deletions(-) create mode 100644 web/src/lib/managers/geolocation.manager.svelte.ts rename web/src/lib/{components/shared-components/change-location.svelte => modals/GeolocationPointPickerModal.svelte} (85%) delete mode 100644 web/src/lib/stores/asset-editor.store.ts diff --git a/web/src/lib/components/asset-viewer/detail-panel-location.svelte b/web/src/lib/components/asset-viewer/detail-panel-location.svelte index 1a3779f528..15ea4d94ca 100644 --- a/web/src/lib/components/asset-viewer/detail-panel-location.svelte +++ b/web/src/lib/components/asset-viewer/detail-panel-location.svelte @@ -1,24 +1,20 @@ {#if menuItem} - (isShowChangeLocation = true)} - /> -{/if} -{#if isShowChangeLocation} - + {/if} diff --git a/web/src/lib/index.spec.ts b/web/src/lib/index.spec.ts index bda5a9e722..20f1244d50 100644 --- a/web/src/lib/index.spec.ts +++ b/web/src/lib/index.spec.ts @@ -1,4 +1,4 @@ -import { cleanClass } from '$lib'; +import { cleanClass, isDefined } from '$lib'; describe('cleanClass', () => { it('should return a string of class names', () => { @@ -13,3 +13,19 @@ describe('cleanClass', () => { expect(cleanClass('class1', ['class2', 'class3'])).toBe('class1 class2 class3'); }); }); + +describe('isDefined', () => { + it('should return false for null', () => { + expect(isDefined(null)).toBe(false); + }); + + it('should return false for undefined', () => { + expect(isDefined(undefined)).toBe(false); + }); + + it('should return true for everything else', () => { + for (const value of [0, 1, 2, true, false, {}, 'foo', 'bar', []]) { + expect(isDefined(value)).toBe(true); + } + }); +}); diff --git a/web/src/lib/index.ts b/web/src/lib/index.ts index b4fc195626..e659dadd46 100644 --- a/web/src/lib/index.ts +++ b/web/src/lib/index.ts @@ -14,3 +14,5 @@ export const cleanClass = (...classNames: unknown[]) => { .join(' '), ); }; + +export const isDefined = (value: T): value is NonNullable => value !== null && value !== undefined; diff --git a/web/src/lib/managers/geolocation.manager.svelte.ts b/web/src/lib/managers/geolocation.manager.svelte.ts new file mode 100644 index 0000000000..d5b2c43912 --- /dev/null +++ b/web/src/lib/managers/geolocation.manager.svelte.ts @@ -0,0 +1,15 @@ +import type { LatLng } from '$lib/types'; + +class GeolocationManager { + #lastPoint = $state(); + + get lastPoint() { + return this.#lastPoint; + } + + onSelected(point: LatLng) { + this.#lastPoint = point; + } +} + +export const geolocationManager = new GeolocationManager(); diff --git a/web/src/lib/components/shared-components/change-location.svelte b/web/src/lib/modals/GeolocationPointPickerModal.svelte similarity index 85% rename from web/src/lib/components/shared-components/change-location.svelte rename to web/src/lib/modals/GeolocationPointPickerModal.svelte index 1abb2dacce..87b1df081a 100644 --- a/web/src/lib/components/shared-components/change-location.svelte +++ b/web/src/lib/modals/GeolocationPointPickerModal.svelte @@ -1,30 +1,27 @@ {#snippet prompt()}

{$t('update_location_action_prompt', { values: { count: assetCount } })}

-

- {$t('latitude')}: {location.latitude}

-

- {$t('longitude')}: {location.longitude}

+

- {$t('latitude')}: {point.lat}

+

- {$t('longitude')}: {point.lng}

{/snippet}
diff --git a/web/src/lib/stores/asset-editor.store.ts b/web/src/lib/stores/asset-editor.store.ts deleted file mode 100644 index cc764cf7ad..0000000000 --- a/web/src/lib/stores/asset-editor.store.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { writable } from 'svelte/store'; - -//-----other -export const lastChosenLocation = writable<{ lng: number; lat: number } | null>(null); diff --git a/web/src/lib/types.ts b/web/src/lib/types.ts index 25524f1eea..619195711a 100644 --- a/web/src/lib/types.ts +++ b/web/src/lib/types.ts @@ -5,6 +5,8 @@ import type { ActionItem } from '@immich/ui'; import type { DateTime } from 'luxon'; import type { SvelteSet } from 'svelte/reactivity'; +export type LatLng = { lng: number; lat: number }; + export interface ReleaseEvent { isAvailable: boolean; /** ISO8601 */ diff --git a/web/src/routes/(user)/utilities/geolocation/+page.svelte b/web/src/routes/(user)/utilities/geolocation/+page.svelte index 9c8ad035f4..d8cd0c3850 100644 --- a/web/src/routes/(user)/utilities/geolocation/+page.svelte +++ b/web/src/routes/(user)/utilities/geolocation/+page.svelte @@ -1,6 +1,6 @@ diff --git a/web/src/lib/components/album-page/album-viewer.svelte b/web/src/lib/components/album-page/album-viewer.svelte index 19634d5aa4..13ac213b1b 100644 --- a/web/src/lib/components/album-page/album-viewer.svelte +++ b/web/src/lib/components/album-page/album-viewer.svelte @@ -5,12 +5,12 @@ import SelectAllAssets from '$lib/components/timeline/actions/SelectAllAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import Timeline from '$lib/components/timeline/Timeline.svelte'; + import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { handleDownloadAlbum } from '$lib/services/album.service'; import { getGlobalActions } from '$lib/services/app.service'; import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; - import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { dragAndDropFilesStore } from '$lib/stores/drag-and-drop-files.store'; import { mediaQueryManager } from '$lib/stores/media-query-manager.svelte'; import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store'; @@ -34,7 +34,6 @@ const album = sharedLink.album as AlbumResponseDto; - let { isViewing: showAssetViewer, setAssetId } = assetViewingStore; let { slideshowState, slideshowNavigation } = slideshowStore; const options = $derived({ albumId: album.id, order: album.order }); @@ -55,7 +54,9 @@ ? await timelineManager.getRandomAsset() : timelineManager.months[0]?.dayGroups[0]?.viewerAssets[0]?.asset; if (asset) { - handlePromiseError(setAssetId(asset.id).then(() => ($slideshowState = SlideshowState.PlaySlideshow))); + handlePromiseError( + assetViewerManager.setAssetId(asset.id).then(() => ($slideshowState = SlideshowState.PlaySlideshow)), + ); } }; @@ -66,7 +67,7 @@ use:shortcut={{ shortcut: { key: 'Escape' }, onShortcut: () => { - if (!$showAssetViewer && assetInteraction.selectionActive) { + if (!assetViewerManager.isViewing && assetInteraction.selectionActive) { cancelMultiselect(assetInteraction); } }, diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte index c6e0de2955..e2981e2e55 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte @@ -14,7 +14,6 @@ import { editManager, EditToolType } from '$lib/managers/edit/edit-manager.svelte'; import { eventManager } from '$lib/managers/event-manager.svelte'; import { getAssetActions } from '$lib/services/asset.service'; - import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { isFaceEditMode } from '$lib/stores/face-edit.svelte'; import { ocrManager } from '$lib/stores/ocr.svelte'; import { alwaysLoadOriginalVideo } from '$lib/stores/preferences.store'; @@ -91,7 +90,6 @@ onRandom, }: Props = $props(); - const { setAssetId } = assetViewingStore; const { restartProgress: restartSlideshowProgress, stopProgress: stopSlideshowProgress, @@ -190,7 +188,7 @@ if (editManager.hasAppliedEdits) { const refreshedAsset = await getAssetInfo({ id: asset.id }); onAssetChange?.(refreshedAsset); - assetViewingStore.setAsset(refreshedAsset); + assetViewerManager.setAsset(refreshedAsset); } assetViewerManager.closeEditor(); }; @@ -241,7 +239,7 @@ } if ($slideshowRepeat && slideshowStartAssetId) { - await setAssetId(slideshowStartAssetId); + await assetViewerManager.setAssetId(slideshowStartAssetId); $restartSlideshowProgress = true; return; } @@ -257,7 +255,7 @@ let assetViewerHtmlElement = $state(); const slideshowHistory = new SlideshowHistory((asset) => { - handlePromiseError(setAssetId(asset.id).then(() => ($restartSlideshowProgress = true))); + handlePromiseError(assetViewerManager.setAssetId(asset.id).then(() => ($restartSlideshowProgress = true))); }); const handleVideoStarted = () => { diff --git a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte index 8dd7adaa5f..c5b4ab5ce7 100644 --- a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte +++ b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte @@ -1,12 +1,12 @@ handleNextAsset() }, diff --git a/web/src/lib/components/pages/SharedLinkPage.svelte b/web/src/lib/components/pages/SharedLinkPage.svelte index c6270d2de3..01a97fffe7 100644 --- a/web/src/lib/components/pages/SharedLinkPage.svelte +++ b/web/src/lib/components/pages/SharedLinkPage.svelte @@ -3,7 +3,7 @@ import IndividualSharedViewer from '$lib/components/share-page/individual-shared-viewer.svelte'; import ControlAppBar from '$lib/components/shared-components/control-app-bar.svelte'; import ThemeButton from '$lib/components/shared-components/theme-button.svelte'; - import { assetViewingStore } from '$lib/stores/asset-viewing.store'; + import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { user } from '$lib/stores/user.store'; import { setSharedLink } from '$lib/utils'; import { handleError } from '$lib/utils/handle-error'; @@ -31,7 +31,6 @@ const { data }: Props = $props(); - let { gridScrollTarget } = assetViewingStore; let { sharedLink, passwordRequired, key, slug, meta } = $state(data); let { title, description } = $state(meta); let isOwned = $derived($user ? $user.id === sharedLink?.userId : false); @@ -48,7 +47,7 @@ $t('shared_photos_and_videos_count', { values: { assetCount: sharedLink.assets.length } }); await tick(); await navigate( - { targetRoute: 'current', assetId: null, assetGridRouteSearchParams: $gridScrollTarget }, + { targetRoute: 'current', assetId: null, assetGridRouteSearchParams: assetViewerManager.gridScrollTarget }, { forceNavigate: true, replaceState: true }, ); } catch (error) { diff --git a/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte b/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte index 5d1254f8d9..9e14f8a074 100644 --- a/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte +++ b/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte @@ -2,16 +2,17 @@ import { goto } from '$app/navigation'; import { shortcuts, type ShortcutOptions } from '$lib/actions/shortcut'; import type { Action } from '$lib/components/asset-viewer/actions/action'; + import type { AssetCursor } from '$lib/components/asset-viewer/asset-viewer.svelte'; import Thumbnail from '$lib/components/assets/thumbnail/thumbnail.svelte'; import { AssetAction } from '$lib/constants'; import Portal from '$lib/elements/Portal.svelte'; + import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import type { TimelineAsset, Viewport } from '$lib/managers/timeline-manager/types'; import AssetDeleteConfirmModal from '$lib/modals/AssetDeleteConfirmModal.svelte'; import ShortcutsModal from '$lib/modals/ShortcutsModal.svelte'; import { Route } from '$lib/route'; import type { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; - import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { showDeleteModal } from '$lib/stores/preferences.store'; import { handlePromiseError } from '$lib/utils'; import { deleteAssets } from '$lib/utils/actions'; @@ -64,7 +65,6 @@ allowDeletion = true, }: Props = $props(); - let { isViewing: isViewerOpen, asset: viewingAsset } = assetViewingStore; const navigationAssets = $derived(viewerAssets ?? assets); const geometry = $derived( @@ -256,7 +256,7 @@ const shortcutList = $derived( (() => { - if ($isViewerOpen) { + if (assetViewerManager.isViewing) { return []; } @@ -351,10 +351,10 @@ } }); - const assetCursor = $derived({ - current: $viewingAsset, - nextAsset: getNextAsset(navigationAssets, $viewingAsset), - previousAsset: getPreviousAsset(navigationAssets, $viewingAsset), + const assetCursor = $derived({ + current: assetViewerManager.asset!, + nextAsset: getNextAsset(navigationAssets, assetViewerManager.asset), + previousAsset: getPreviousAsset(navigationAssets, assetViewerManager.asset), }); @@ -408,7 +408,7 @@ {/if} -{#if $isViewerOpen} +{#if assetViewerManager.isViewing} {#await import('$lib/components/asset-viewer/asset-viewer.svelte') then { default: AssetViewer }} { - assetViewingStore.showAssetViewer(false); + assetViewerManager.showAssetViewer(false); handlePromiseError(navigate({ targetRoute: 'current', assetId: null })); }} /> diff --git a/web/src/lib/components/timeline/Timeline.svelte b/web/src/lib/components/timeline/Timeline.svelte index d6ce722c96..0ebc4800ea 100644 --- a/web/src/lib/components/timeline/Timeline.svelte +++ b/web/src/lib/components/timeline/Timeline.svelte @@ -11,6 +11,7 @@ import HotModuleReload from '$lib/elements/HotModuleReload.svelte'; import Portal from '$lib/elements/Portal.svelte'; import Skeleton from '$lib/elements/Skeleton.svelte'; + import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import type { DayGroup } from '$lib/managers/timeline-manager/day-group.svelte'; import { isIntersecting } from '$lib/managers/timeline-manager/internal/intersection-support.svelte'; import type { MonthGroup } from '$lib/managers/timeline-manager/month-group.svelte'; @@ -18,7 +19,6 @@ import type { TimelineAsset, TimelineManagerOptions, ViewportTopMonth } from '$lib/managers/timeline-manager/types'; import { assetsSnapshot } from '$lib/managers/timeline-manager/utils.svelte'; import type { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; - import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { mediaQueryManager } from '$lib/stores/media-query-manager.svelte'; import { isAssetViewerRoute, navigate } from '$lib/utils/navigation'; import { getTimes, type ScrubberListener } from '$lib/utils/timeline-util'; @@ -88,10 +88,7 @@ onDestroy(() => timelineManager.destroy()); $effect(() => options && void timelineManager.updateOptions(options)); - let { isViewing: showAssetViewer, asset: viewingAsset, gridScrollTarget } = assetViewingStore; - let scrollableElement: HTMLElement | undefined = $state(); - let timelineElement: HTMLElement | undefined = $state(); let invisible = $state(true); // The percentage of scroll through the month that is currently intersecting the top boundary of the viewport. @@ -209,7 +206,7 @@ timelineManager.viewportWidth = rect.width; } } - const scrollTarget = $gridScrollTarget?.at; + const scrollTarget = assetViewerManager.gridScrollTarget?.at; let scrolled = false; if (scrollTarget) { scrolled = await scrollAndLoadAsset(scrollTarget); @@ -518,8 +515,8 @@ }); $effect(() => { - if ($showAssetViewer) { - const { localDateTime } = getTimes($viewingAsset.fileCreatedAt, DateTime.local().offset / 60); + if (assetViewerManager.asset && assetViewerManager.isViewing) { + const { localDateTime } = getTimes(assetViewerManager.asset.fileCreatedAt, DateTime.local().offset / 60); void timelineManager.loadMonthGroup({ year: localDateTime.year, month: localDateTime.month }); } }); @@ -565,7 +562,7 @@ onAfterUpdate={() => { const asset = page.url.searchParams.get('at'); if (asset) { - $gridScrollTarget = { at: asset }; + assetViewerManager.gridScrollTarget = { at: asset }; } void scrollAfterNavigate(); }} @@ -722,7 +719,7 @@ - {#if $showAssetViewer} + {#if assetViewerManager.isViewing} {/if} diff --git a/web/src/lib/components/timeline/TimelineAssetViewer.svelte b/web/src/lib/components/timeline/TimelineAssetViewer.svelte index cc0289e92b..47144dcca9 100644 --- a/web/src/lib/components/timeline/TimelineAssetViewer.svelte +++ b/web/src/lib/components/timeline/TimelineAssetViewer.svelte @@ -2,11 +2,11 @@ import type { Action } from '$lib/components/asset-viewer/actions/action'; import type { AssetCursor } from '$lib/components/asset-viewer/asset-viewer.svelte'; import { AssetAction } from '$lib/constants'; + import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { assetCacheManager } from '$lib/managers/AssetCacheManager.svelte'; import { authManager } from '$lib/managers/auth-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; - import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { websocketEvents } from '$lib/stores/websocket'; import { handlePromiseError } from '$lib/utils'; import { updateStackedAssetInTimeline, updateUnstackedAssetInTimeline } from '$lib/utils/actions'; @@ -18,8 +18,6 @@ import { onDestroy, onMount, untrack } from 'svelte'; import { t } from 'svelte-i18n'; - let { asset: viewingAsset, gridScrollTarget } = assetViewingStore; - interface Props { timelineManager: TimelineManager; invisible: boolean; @@ -65,7 +63,7 @@ }; let assetCursor = $state({ - current: $viewingAsset, + current: assetViewerManager.asset!, previousAsset: undefined, nextAsset: undefined, }); @@ -82,9 +80,10 @@ //TODO: replace this with async derived in svelte 6 $effect(() => { - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - $viewingAsset; - untrack(() => handlePromiseError(loadCloseAssets($viewingAsset))); + const asset = assetViewerManager.asset; + if (asset) { + untrack(() => handlePromiseError(loadCloseAssets(asset))); + } }); const handleRandom = async () => { @@ -99,8 +98,12 @@ const handleClose = async (asset: { id: string }) => { invisible = true; - $gridScrollTarget = { at: asset.id }; - await navigate({ targetRoute: 'current', assetId: null, assetGridRouteSearchParams: $gridScrollTarget }); + assetViewerManager.gridScrollTarget = { at: asset.id }; + await navigate({ + targetRoute: 'current', + assetId: null, + assetGridRouteSearchParams: assetViewerManager.gridScrollTarget, + }); }; const handleRemoveFromAlbum = async (assetIds: string[]) => { @@ -202,7 +205,7 @@ const restoredAsset = assets[0]; const asset = await getAssetInfo({ ...authManager.params, id: restoredAsset.id }); - assetViewingStore.setAsset(asset); + assetViewerManager.setAsset(asset); await navigate({ targetRoute: 'current', assetId: restoredAsset.id }); }; diff --git a/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte b/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte index a5fa34289b..612e7e22a3 100644 --- a/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte +++ b/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte @@ -5,6 +5,7 @@ setFocusToAsset as setFocusAssetInit, setFocusTo as setFocusToInit, } from '$lib/components/timeline/actions/focus-actions'; + import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { eventManager } from '$lib/managers/event-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; @@ -14,7 +15,6 @@ import ShortcutsModal from '$lib/modals/ShortcutsModal.svelte'; import { Route } from '$lib/route'; import type { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; - import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { showDeleteModal } from '$lib/stores/preferences.store'; import { searchStore } from '$lib/stores/search.svelte'; import { handlePromiseError } from '$lib/utils'; @@ -32,8 +32,6 @@ let { timelineManager = $bindable(), assetInteraction, onEscape, scrollToAsset }: Props = $props(); - const { isViewing: showAssetViewer } = assetViewingStore; - const trashOrDelete = async (forceRequested?: boolean) => { const force = forceRequested || !featureFlagsManager.value.trash; const selectedAssets = assetInteraction.selectedAssets; @@ -142,7 +140,7 @@ }; const shortcutList = $derived.by(() => { - if (searchStore.isSearchEnabled || $showAssetViewer || isModalOpen()) { + if (searchStore.isSearchEnabled || assetViewerManager.isViewing || isModalOpen()) { return []; } diff --git a/web/src/lib/components/utilities-page/duplicates/duplicates-compare-control.svelte b/web/src/lib/components/utilities-page/duplicates/duplicates-compare-control.svelte index aba2dc01f4..ab19f12079 100644 --- a/web/src/lib/components/utilities-page/duplicates/duplicates-compare-control.svelte +++ b/web/src/lib/components/utilities-page/duplicates/duplicates-compare-control.svelte @@ -2,8 +2,8 @@ import { shortcuts } from '$lib/actions/shortcut'; import DuplicateAsset from '$lib/components/utilities-page/duplicates/duplicate-asset.svelte'; import Portal from '$lib/elements/Portal.svelte'; + import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { authManager } from '$lib/managers/auth-manager.svelte'; - import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { handlePromiseError } from '$lib/utils'; import { getNextAsset, getPreviousAsset } from '$lib/utils/asset-utils'; import { suggestDuplicate } from '$lib/utils/duplicate-utils'; @@ -22,8 +22,6 @@ } let { assets, onResolve, onStack }: Props = $props(); - const { isViewing: showAssetViewer, asset: viewingAsset, setAsset } = assetViewingStore; - // eslint-disable-next-line svelte/no-unnecessary-state-wrap let selectedAssetIds = $state(new SvelteSet()); let trashCount = $derived(assets.length - selectedAssetIds.size); @@ -40,7 +38,7 @@ }); onDestroy(() => { - assetViewingStore.showAssetViewer(false); + assetViewerManager.showAssetViewer(false); }); const onRandom = async () => { @@ -71,7 +69,7 @@ const onViewAsset = async ({ id }: AssetResponseDto) => { const asset = await getAssetInfo({ ...authManager.params, id }); - setAsset(asset); + assetViewerManager.setAsset(asset); await navigate({ targetRoute: 'current', assetId: asset.id }); }; @@ -86,9 +84,9 @@ }; const assetCursor = $derived({ - current: $viewingAsset, - nextAsset: getNextAsset(assets, $viewingAsset), - previousAsset: getPreviousAsset(assets, $viewingAsset), + current: assetViewerManager.asset!, + nextAsset: getNextAsset(assets, assetViewerManager.asset), + previousAsset: getPreviousAsset(assets, assetViewerManager.asset), }); @@ -166,7 +164,7 @@
-{#if $showAssetViewer} +{#if assetViewerManager.isViewing} {#await import('$lib/components/asset-viewer/asset-viewer.svelte') then { default: AssetViewer }} 1} {onRandom} onClose={() => { - assetViewingStore.showAssetViewer(false); + assetViewerManager.showAssetViewer(false); handlePromiseError(navigate({ targetRoute: 'current', assetId: null })); }} /> diff --git a/web/src/lib/managers/asset-viewer-manager.svelte.ts b/web/src/lib/managers/asset-viewer-manager.svelte.ts index 0bab3aff80..f46be6b698 100644 --- a/web/src/lib/managers/asset-viewer-manager.svelte.ts +++ b/web/src/lib/managers/asset-viewer-manager.svelte.ts @@ -1,7 +1,10 @@ +import { authManager } from '$lib/managers/auth-manager.svelte'; import type { ImageLoaderStatus } from '$lib/utils/adaptive-image-loader.svelte'; import { canCopyImageToClipboard } from '$lib/utils/asset-utils'; import { BaseEventManager } from '$lib/utils/base-event-manager.svelte'; +import type { AssetGridRouteSearchParams } from '$lib/utils/navigation'; import { PersistedLocalStorage } from '$lib/utils/persisted'; +import { getAssetInfo, type AssetResponseDto } from '@immich/sdk'; import type { ZoomImageWheelState } from '@zoom-image/core'; import { cubicOut } from 'svelte/easing'; @@ -21,7 +24,7 @@ export type Events = { Copy: []; }; -export class AssetViewerManager extends BaseEventManager { +class AssetViewerManager extends BaseEventManager { #zoomState = $state(createDefaultZoomState()); #animationFrameId: number | null = null; @@ -40,6 +43,18 @@ export class AssetViewerManager extends BaseEventManager { isPlayingMotionPhoto = $state(false); isShowEditor = $state(false); + #viewingAssetStoreState = $state(); + #viewState = $state(false); + gridScrollTarget = $state(); + + get asset() { + return this.#viewingAssetStoreState; + } + + get isViewing() { + return this.#viewState; + } + get isImageLoading() { return this.#isImageLoading; } @@ -145,6 +160,21 @@ export class AssetViewerManager extends BaseEventManager { closeEditor() { this.isShowEditor = false; } + + setAsset(asset: AssetResponseDto) { + this.#viewingAssetStoreState = asset; + this.#viewState = true; + } + + async setAssetId(id: string): Promise { + const asset = await getAssetInfo({ ...authManager.params, id }); + this.setAsset(asset); + return asset; + } + + showAssetViewer(show: boolean) { + this.#viewState = show; + } } export const assetViewerManager = new AssetViewerManager(); diff --git a/web/src/lib/stores/asset-viewing.store.ts b/web/src/lib/stores/asset-viewing.store.ts deleted file mode 100644 index 3cd2cd9579..0000000000 --- a/web/src/lib/stores/asset-viewing.store.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { authManager } from '$lib/managers/auth-manager.svelte'; -import { type AssetGridRouteSearchParams } from '$lib/utils/navigation'; -import { getAssetInfo, type AssetResponseDto } from '@immich/sdk'; -import { readonly, writable } from 'svelte/store'; - -function createAssetViewingStore() { - const viewingAssetStoreState = writable(); - const viewState = writable(false); - const gridScrollTarget = writable(); - - const setAsset = (asset: AssetResponseDto) => { - viewingAssetStoreState.set(asset); - viewState.set(true); - }; - - const setAssetId = async (id: string): Promise => { - const asset = await getAssetInfo({ ...authManager.params, id }); - setAsset(asset); - return asset; - }; - - const showAssetViewer = (show: boolean) => { - viewState.set(show); - }; - - return { - asset: readonly(viewingAssetStoreState), - isViewing: viewState, - gridScrollTarget, - setAsset, - setAssetId, - showAssetViewer, - }; -} - -export const assetViewingStore = createAssetViewingStore(); diff --git a/web/src/routes/(user)/+layout.svelte b/web/src/routes/(user)/+layout.svelte index e6e349fe91..983d25eced 100644 --- a/web/src/routes/(user)/+layout.svelte +++ b/web/src/routes/(user)/+layout.svelte @@ -1,30 +1,28 @@ -
+
{@render children?.()}
diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 9a2d36ed95..9010efe535 100644 --- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -46,7 +46,6 @@ import { getGlobalActions } from '$lib/services/app.service'; import { getAssetBulkActions } from '$lib/services/asset.service'; import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; - import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store'; import { preferences, user } from '$lib/stores/user.store'; import { handlePromiseError } from '$lib/utils'; @@ -86,14 +85,9 @@ } let { data = $bindable() }: Props = $props(); - - let { isViewing: showAssetViewer, setAssetId, gridScrollTarget } = assetViewingStore; let { slideshowState, slideshowNavigation } = slideshowStore; - let oldAt: AssetGridRouteSearchParams | null | undefined = $state(); - let viewMode: AlbumPageViewMode = $state(AlbumPageViewMode.VIEW); - let timelineManager = $state() as TimelineManager; let showAlbumUsers = $derived(timelineManager?.showAssetOwners ?? false); @@ -114,7 +108,9 @@ ? await timelineManager.getRandomAsset() : timelineManager.months[0]?.dayGroups[0]?.viewerAssets[0]?.asset; if (asset) { - handlePromiseError(setAssetId(asset.id).then(() => ($slideshowState = SlideshowState.PlaySlideshow))); + handlePromiseError( + assetViewerManager.setAssetId(asset.id).then(() => ($slideshowState = SlideshowState.PlaySlideshow)), + ); } }; @@ -128,7 +124,7 @@ await handleCloseSelectAssets(); return; } - if ($showAssetViewer) { + if (assetViewerManager.isViewing) { return; } if (assetInteraction.selectionActive) { @@ -240,7 +236,7 @@ const isShared = $derived(viewMode === AlbumPageViewMode.SELECT_ASSETS ? false : album.albumUsers.length > 0); $effect(() => { - if ($showAssetViewer || !isShared) { + if (assetViewerManager.isViewing || !isShared) { return; } @@ -252,7 +248,9 @@ let isOwned = $derived($user.id == album.ownerId); let showActivityStatus = $derived( - album.albumUsers.length > 0 && !$showAssetViewer && (album.isActivityEnabled || activityManager.commentCount > 0), + album.albumUsers.length > 0 && + !assetViewerManager.isViewing && + (album.isActivityEnabled || activityManager.commentCount > 0), ); let isEditor = $derived( album.albumUsers.find(({ user: { id } }) => id === $user.id)?.role === AlbumUserRole.Editor || @@ -322,7 +320,7 @@ type: $t('command'), icon: mdiArrowLeft, onAction: handleEscape, - $if: () => !$showAssetViewer, + $if: () => !assetViewerManager.isViewing, shortcuts: { key: 'Escape' }, }); @@ -518,7 +516,7 @@ onclick={async () => { timelineManager.suspendTransitions = true; viewMode = AlbumPageViewMode.SELECT_ASSETS; - oldAt = { at: $gridScrollTarget?.at }; + oldAt = { at: assetViewerManager.gridScrollTarget?.at }; await navigate( { targetRoute: 'current', assetId: null, assetGridRouteSearchParams: { at: null } }, { replaceState: true }, @@ -621,7 +619,7 @@ {/if} {/if}
- {#if album.albumUsers.length > 0 && album && assetViewerManager.isShowActivityPanel && $user && !$showAssetViewer} + {#if album.albumUsers.length > 0 && album && assetViewerManager.isShowActivityPanel && $user && !assetViewerManager.isViewing}
()); let selectedClusterBBox = $state.raw(); let isTimelinePanelVisible = $state(false); @@ -34,7 +31,7 @@ } onDestroy(() => { - assetViewingStore.showAssetViewer(false); + assetViewerManager.showAssetViewer(false); }); if (!featureFlagsManager.value.map) { @@ -42,7 +39,7 @@ } async function onViewAssets(assetIds: string[]) { - await setAssetId(assetIds[0]); + await assetViewerManager.setAssetId(assetIds[0]); closeTimelinePanel(); } @@ -50,7 +47,7 @@ selectedClusterIds = new Set(assetIds); selectedClusterBBox = bbox; isTimelinePanelVisible = true; - assetViewingStore.showAssetViewer(false); + assetViewerManager.showAssetViewer(false); handlePromiseError(navigate({ targetRoute: 'current', assetId: null })); } @@ -89,13 +86,13 @@
- {#if $showAssetViewer} + {#if assetViewerManager.isViewing} {#await import('$lib/components/asset-viewer/asset-viewer.svelte') then { default: AssetViewer }} { - assetViewingStore.showAssetViewer(false); + assetViewerManager.showAssetViewer(false); handlePromiseError(navigate({ targetRoute: 'current', assetId: null })); }} isShared={false} diff --git a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte index 31a991fa8f..4d1775d7dc 100644 --- a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte @@ -20,11 +20,11 @@ import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import Timeline from '$lib/components/timeline/Timeline.svelte'; import { AssetAction } from '$lib/constants'; + import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; - import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { isFaceEditMode } from '$lib/stores/face-edit.svelte'; import { memoryStore } from '$lib/stores/memory.store.svelte'; import { preferences, user } from '$lib/stores/user.store'; @@ -43,7 +43,6 @@ import { mdiDotsVertical } from '@mdi/js'; import { t } from 'svelte-i18n'; - let { isViewing: showAssetViewer } = assetViewingStore; let timelineManager = $state() as TimelineManager; const options = { visibility: AssetVisibility.Timeline, withStacked: true, withPartners: true }; @@ -62,7 +61,7 @@ }); const handleEscape = () => { - if ($showAssetViewer) { + if (assetViewerManager.isViewing) { return; } if (assetInteraction.selectionActive) { diff --git a/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte index c7c0c146ad..c7d30febc7 100644 --- a/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -4,11 +4,11 @@ import { shortcuts } from '$lib/actions/shortcut'; import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte'; import DuplicatesCompareControl from '$lib/components/utilities-page/duplicates/duplicates-compare-control.svelte'; + import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import DuplicatesInformationModal from '$lib/modals/DuplicatesInformationModal.svelte'; import ShortcutsModal from '$lib/modals/ShortcutsModal.svelte'; import { Route } from '$lib/route'; - import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { locale } from '$lib/stores/preferences.store'; import { stackAssets } from '$lib/utils/asset-utils'; import { suggestDuplicate } from '$lib/utils/duplicate-utils'; @@ -57,7 +57,6 @@ }; let duplicates = $state(data.duplicates); - const { isViewing: showAssetViewer } = assetViewingStore; const correctDuplicatesIndex = (index: number) => { return Math.max(0, Math.min(index, duplicates.length - 1)); @@ -186,7 +185,7 @@ { if (asset) { - setAsset(asset); + assetViewerManager.setAsset(asset); } }); @@ -39,7 +39,7 @@ const onAction = (payload: Action) => { if (payload.type == 'trash') { assets = assets.filter((a) => a.id != payload.asset.id); - $showAssetViewer = false; + assetViewerManager.showAssetViewer(false); } }; @@ -48,9 +48,9 @@ }; const assetCursor = $derived({ - current: $viewingAsset, - nextAsset: getNextAsset(assets, $viewingAsset), - previousAsset: getPreviousAsset(assets, $viewingAsset), + current: assetViewerManager.asset!, + nextAsset: getNextAsset(assets, assetViewerManager.asset), + previousAsset: getPreviousAsset(assets, assetViewerManager.asset), }); @@ -68,7 +68,7 @@
-{#if $showAssetViewer} +{#if assetViewerManager.isViewing} {#await import('$lib/components/asset-viewer/asset-viewer.svelte') then { default: AssetViewer }} { - assetViewingStore.showAssetViewer(false); + assetViewerManager.showAssetViewer(false); handlePromiseError(navigate({ targetRoute: 'current', assetId: null })); }} /> From 74789ad1c457a6ee6899f710348e32d8d7c9d40a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:28:05 +0100 Subject: [PATCH 027/156] chore(deps): update dependency picomatch to v4.0.4 [security] (#27281) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 91 ++++++++++++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 48 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ffd7e02c4..bd0792bf1a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -528,7 +528,7 @@ importers: version: 2.12.0 picomatch: specifier: ^4.0.2 - version: 4.0.3 + version: 4.0.4 postgres: specifier: 3.4.8 version: 3.4.8 @@ -959,7 +959,7 @@ importers: version: 5.53.13 svelte-check: specifier: ^4.1.5 - version: 4.4.4(picomatch@4.0.3)(svelte@5.53.13)(typescript@5.9.3) + version: 4.4.4(picomatch@4.0.4)(svelte@5.53.13)(typescript@5.9.3) svelte-eslint-parser: specifier: ^1.3.3 version: 1.6.0(svelte@5.53.13) @@ -1682,8 +1682,8 @@ packages: resolution: {integrity: sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} '@babel/template@7.27.2': @@ -6855,9 +6855,6 @@ packages: engines: {node: '>= 4.0.0'} hasBin: true - devalue@5.6.3: - resolution: {integrity: sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==} - devalue@5.6.4: resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==} @@ -9733,16 +9730,16 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} picomatch@4.0.2: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} pify@2.3.0: @@ -13387,7 +13384,7 @@ snapshots: dependencies: core-js-pure: 3.47.0 - '@babel/runtime@7.28.6': {} + '@babel/runtime@7.29.2': {} '@babel/template@7.27.2': dependencies: @@ -13826,7 +13823,7 @@ snapshots: '@babel/preset-env': 7.28.5(@babel/core@7.28.5) '@babel/preset-react': 7.28.5(@babel/core@7.28.5) '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5) - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@babel/runtime-corejs3': 7.28.4 '@babel/traverse': 7.28.5 '@docusaurus/logger': 3.9.2 @@ -16393,7 +16390,7 @@ snapshots: dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.3 + picomatch: 4.0.4 optionalDependencies: rollup: 4.55.1 @@ -16495,7 +16492,7 @@ snapshots: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 invariant: 2.2.4 prop-types: 15.8.1 react: 18.3.1 @@ -16554,7 +16551,7 @@ snapshots: '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 - devalue: 5.6.3 + devalue: 5.6.4 esm-env: 1.2.2 kleur: 4.1.5 magic-string: 0.30.21 @@ -16801,7 +16798,7 @@ snapshots: '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.29.0 - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -17903,7 +17900,7 @@ snapshots: anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 2.3.1 + picomatch: 2.3.2 append-field@1.0.0: {} @@ -19214,8 +19211,6 @@ snapshots: transitivePeerDependencies: - supports-color - devalue@5.6.3: {} - devalue@5.6.4: {} devlop@1.1.0: @@ -19998,9 +19993,9 @@ snapshots: dependencies: websocket-driver: 0.7.4 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 feed@4.2.2: dependencies: @@ -20565,7 +20560,7 @@ snapshots: history@4.10.1: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 loose-envify: 1.4.0 resolve-pathname: 3.0.0 tiny-invariant: 1.3.3 @@ -21058,7 +21053,7 @@ snapshots: chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 - picomatch: 2.3.1 + picomatch: 2.3.2 jest-worker@27.5.1: dependencies: @@ -22129,7 +22124,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.33.0: {} @@ -22809,11 +22804,11 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} + picomatch@2.3.2: {} picomatch@4.0.2: {} - picomatch@4.0.3: {} + picomatch@4.0.4: {} pify@2.3.0: {} @@ -23590,7 +23585,7 @@ snapshots: react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.104.1): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' webpack: 5.104.1 @@ -23600,13 +23595,13 @@ snapshots: react-router-config@5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 react: 18.3.1 react-router: 5.3.4(react@18.3.1) react-router-dom@5.3.4(react@18.3.1): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -23617,7 +23612,7 @@ snapshots: react-router@5.3.4(react@18.3.1): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -23668,7 +23663,7 @@ snapshots: readdirp@3.6.0: dependencies: - picomatch: 2.3.1 + picomatch: 2.3.2 readdirp@4.1.2: {} @@ -23935,7 +23930,7 @@ snapshots: rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.9)(rollup@4.55.1): dependencies: open: 8.4.2 - picomatch: 4.0.3 + picomatch: 4.0.4 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: @@ -24643,11 +24638,11 @@ snapshots: dependencies: svelte: 5.53.13 - svelte-check@4.4.4(picomatch@4.0.3)(svelte@5.53.13)(typescript@5.9.3): + svelte-check@4.4.4(picomatch@4.0.4)(svelte@5.53.13)(typescript@5.9.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 - fdir: 6.5.0(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.4) picocolors: 1.1.1 sade: 1.8.1 svelte: 5.53.13 @@ -25031,8 +25026,8 @@ snapshots: tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 tinypool@1.1.1: {} @@ -25321,7 +25316,7 @@ snapshots: dependencies: '@jridgewell/remapping': 2.3.5 acorn: 8.16.0 - picomatch: 4.0.3 + picomatch: 4.0.4 webpack-virtual-modules: 0.6.2 update-browserslist-db@1.2.3(browserslist@4.28.1): @@ -25479,8 +25474,8 @@ snapshots: vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 postcss: 8.5.8 rollup: 4.55.1 tinyglobby: 0.2.15 @@ -25497,8 +25492,8 @@ snapshots: vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 postcss: 8.5.8 rollup: 4.55.1 tinyglobby: 0.2.15 @@ -25516,7 +25511,7 @@ snapshots: dependencies: '@oxc-project/runtime': 0.115.0 lightningcss: 1.32.0 - picomatch: 4.0.3 + picomatch: 4.0.4 postcss: 8.5.8 rolldown: 1.0.0-rc.9 tinyglobby: 0.2.15 @@ -25534,7 +25529,7 @@ snapshots: dependencies: '@oxc-project/runtime': 0.115.0 lightningcss: 1.32.0 - picomatch: 4.0.3 + picomatch: 4.0.4 postcss: 8.5.8 rolldown: 1.0.0-rc.9 tinyglobby: 0.2.15 @@ -25571,7 +25566,7 @@ snapshots: expect-type: 1.3.0 magic-string: 0.30.21 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.4 std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 0.3.2 @@ -25614,7 +25609,7 @@ snapshots: magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.4 std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 1.0.2 @@ -25654,7 +25649,7 @@ snapshots: magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.4 std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 1.0.2 @@ -25694,7 +25689,7 @@ snapshots: magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.4 std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 1.0.2 From 4436cab82792d3c1917c502f921b9d4365837596 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:28:46 +0100 Subject: [PATCH 028/156] chore(deps): update dependency yaml to v2.8.3 [security] (#27293) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 220 ++++++++++++++++++++++++------------------------- 1 file changed, 110 insertions(+), 110 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd0792bf1a..1cfa85904e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,7 +67,7 @@ importers: version: 24.12.0 '@vitest/coverage-v8': specifier: ^4.0.0 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) byte-size: specifier: ^9.0.0 version: 9.0.1 @@ -109,16 +109,16 @@ importers: version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^8.0.0 - version: 8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: ^4.0.0 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest-fetch-mock: specifier: ^0.4.0 - version: 0.4.5(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.4.5(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) yaml: specifier: ^2.3.1 - version: 2.8.2 + version: 2.8.3 docs: dependencies: @@ -169,7 +169,7 @@ importers: version: 18.3.1(react@18.3.1) tailwindcss: specifier: ^3.2.4 - version: 3.4.19(tsx@4.21.0)(yaml@2.8.2) + version: 3.4.19(tsx@4.21.0)(yaml@2.8.3) url: specifier: ^0.11.0 version: 0.11.4 @@ -284,10 +284,10 @@ importers: version: 5.2.1(encoding@0.1.13) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: ^4.0.0 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) e2e-auth-server: devDependencies: @@ -567,7 +567,7 @@ importers: version: 4.8.3 tailwindcss-preset-email: specifier: ^1.4.0 - version: 1.4.1(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) + version: 1.4.1(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.3)) thumbhash: specifier: ^0.1.1 version: 0.1.1 @@ -673,7 +673,7 @@ importers: version: 13.15.10 '@vitest/coverage-v8': specifier: ^3.0.0 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) eslint: specifier: ^10.0.0 version: 10.0.2(jiti@2.6.1) @@ -712,7 +712,7 @@ importers: version: 7.2.2 tailwindcss: specifier: ^3.4.0 - version: 3.4.19(tsx@4.21.0)(yaml@2.8.2) + version: 3.4.19(tsx@4.21.0)(yaml@2.8.3) testcontainers: specifier: ^11.0.0 version: 11.12.0 @@ -727,10 +727,10 @@ importers: version: 1.5.9(@swc/core@1.15.18(@swc/helpers@0.5.17))(rollup@4.55.1) vite-tsconfig-paths: specifier: ^6.0.0 - version: 6.1.1(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: ^3.0.0 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) web: dependencies: @@ -745,7 +745,7 @@ importers: version: link:../open-api/typescript-sdk '@immich/ui': specifier: ^0.67.2 - version: 0.67.2(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13) + version: 0.67.2(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) '@mapbox/mapbox-gl-rtl-text': specifier: 0.3.0 version: 0.3.0 @@ -872,25 +872,25 @@ importers: version: 3.1.2 '@sveltejs/adapter-static': specifier: ^3.0.8 - version: 3.0.10(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))) + version: 3.0.10(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) '@sveltejs/enhanced-img': specifier: ^0.10.4 - version: 0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(rollup@4.55.1)(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/kit': specifier: ^2.27.1 - version: 2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: 7.0.0 - version: 7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.2.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@testing-library/jest-dom': specifier: ^6.4.2 version: 6.9.1 '@testing-library/svelte': specifier: ^5.2.8 - version: 5.3.1(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.3.1(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@testing-library/user-event': specifier: ^14.5.2 version: 14.6.1(@testing-library/dom@10.4.1) @@ -914,7 +914,7 @@ importers: version: 1.5.6 '@vitest/coverage-v8': specifier: ^4.0.0 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) dotenv: specifier: ^17.0.0 version: 17.3.1 @@ -974,10 +974,10 @@ importers: version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^8.0.0 - version: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: ^4.0.0 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) packages: @@ -12384,12 +12384,12 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} hasBin: true @@ -15120,12 +15120,12 @@ snapshots: node-emoji: 2.2.0 svelte: 5.53.13 - '@immich/ui@0.67.2(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)': + '@immich/ui@0.67.2(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)': dependencies: '@immich/svelte-markdown-preprocess': 0.2.1(svelte@5.53.13) '@internationalized/date': 3.10.0 '@mdi/js': 7.4.47 - bits-ui: 2.16.0(@internationalized/date@3.10.0)(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13) + bits-ui: 2.16.0(@internationalized/date@3.10.0)(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) luxon: 3.7.2 simple-icons: 16.9.0 svelte: 5.53.13 @@ -15796,7 +15796,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) - yaml: 2.8.2 + yaml: 2.8.3 '@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0)': dependencies: @@ -16525,29 +16525,29 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))': + '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: - '@sveltejs/kit': 2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@sveltejs/kit': 2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@sveltejs/enhanced-img@0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(rollup@4.55.1)(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@sveltejs/enhanced-img@0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) magic-string: 0.30.21 sharp: 0.34.5 svelte: 5.53.13 svelte-parse-markup: 0.1.5(svelte@5.53.13) - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vite-imagetools: 9.0.3(rollup@4.55.1) zimmerframe: 1.1.4 transitivePeerDependencies: - rollup - supports-color - '@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -16559,19 +16559,19 @@ snapshots: set-cookie-parser: 3.0.1 sirv: 3.0.2 svelte: 5.53.13 - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: '@opentelemetry/api': 1.9.0 typescript: 5.9.3 - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 svelte: 5.53.13 - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vitefu: 1.1.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.5)': dependencies: @@ -16788,12 +16788,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - '@tailwindcss/vite@4.2.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tailwindcss/vite@4.2.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) '@testing-library/dom@10.4.1': dependencies: @@ -16819,14 +16819,14 @@ snapshots: dependencies: svelte: 5.53.13 - '@testing-library/svelte@5.3.1(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@testing-library/svelte@5.3.1(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@testing-library/dom': 10.4.1 '@testing-library/svelte-core': 1.0.0(svelte@5.53.13) svelte: 5.53.13 optionalDependencies: - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: @@ -17525,7 +17525,7 @@ snapshots: '@vercel/oidc@3.0.5': {} - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -17540,11 +17540,11 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.2 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -17556,9 +17556,9 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -17570,7 +17570,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/expect@3.2.4': dependencies: @@ -17589,29 +17589,29 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -18112,15 +18112,15 @@ snapshots: binary-extensions@2.3.0: {} - bits-ui@2.16.0(@internationalized/date@3.10.0)(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13): + bits-ui@2.16.0(@internationalized/date@3.10.0)(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13): dependencies: '@floating-ui/core': 1.7.3 '@floating-ui/dom': 1.7.4 '@internationalized/date': 3.10.0 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13) + runed: 0.35.1(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) svelte: 5.53.13 - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -19246,7 +19246,7 @@ snapshots: docker-compose@1.3.1: dependencies: - yaml: 2.8.2 + yaml: 2.8.3 docker-modem@5.0.6: dependencies: @@ -23021,18 +23021,18 @@ snapshots: postcss-load-config@3.1.4(postcss@8.5.8): dependencies: lilconfig: 2.1.0 - yaml: 1.10.2 + yaml: 1.10.3 optionalDependencies: postcss: 8.5.8 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.2): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 postcss: 8.5.8 tsx: 4.21.0 - yaml: 2.8.2 + yaml: 2.8.3 postcss-loader@7.3.4(postcss@8.5.8)(typescript@5.9.3)(webpack@5.104.1): dependencies: @@ -24003,14 +24003,14 @@ snapshots: dependencies: queue-microtask: 1.2.3 - runed@0.35.1(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13): + runed@0.35.1(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 svelte: 5.53.13 optionalDependencies: - '@sveltejs/kit': 2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@sveltejs/kit': 2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) rw@1.3.3: {} @@ -24737,10 +24737,10 @@ snapshots: dependencies: svelte-floating-ui: 1.5.8 - svelte-toolbelt@0.10.6(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.13) + runed: 0.35.1(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) style-to-object: 1.0.14 svelte: 5.53.13 transitivePeerDependencies: @@ -24808,21 +24808,21 @@ snapshots: optionalDependencies: tailwind-merge: 3.5.0 - tailwindcss-email-variants@3.0.5(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)): + tailwindcss-email-variants@3.0.5(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.3)): dependencies: - tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.2) + tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.3) - tailwindcss-mso@2.0.3(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)): + tailwindcss-mso@2.0.3(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.3)): dependencies: - tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.2) + tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.3) - tailwindcss-preset-email@1.4.1(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)): + tailwindcss-preset-email@1.4.1(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.3)): dependencies: - tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.2) - tailwindcss-email-variants: 3.0.5(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) - tailwindcss-mso: 2.0.3(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) + tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.3) + tailwindcss-email-variants: 3.0.5(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.3)) + tailwindcss-mso: 2.0.3(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.3)) - tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2): + tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.3): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -24841,7 +24841,7 @@ snapshots: postcss: 8.5.8 postcss-import: 15.1.0(postcss@8.5.8) postcss-js: 4.1.0(postcss@8.5.8) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.2) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3) postcss-nested: 6.2.0(postcss@8.5.8) postcss-selector-parser: 6.1.2 resolve: 1.22.11 @@ -25440,13 +25440,13 @@ snapshots: - rollup - supports-color - vite-node@3.2.4(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.4(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -25461,17 +25461,17 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - typescript - vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.4) @@ -25487,9 +25487,9 @@ snapshots: sass: 1.97.1 terser: 5.44.1 tsx: 4.21.0 - yaml: 2.8.2 + yaml: 2.8.3 - vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.4) @@ -25505,9 +25505,9 @@ snapshots: sass: 1.97.1 terser: 5.44.1 tsx: 4.21.0 - yaml: 2.8.2 + yaml: 2.8.3 - vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@oxc-project/runtime': 0.115.0 lightningcss: 1.32.0 @@ -25523,9 +25523,9 @@ snapshots: sass: 1.97.1 terser: 5.44.1 tsx: 4.21.0 - yaml: 2.8.2 + yaml: 2.8.3 - vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@oxc-project/runtime': 0.115.0 lightningcss: 1.32.0 @@ -25541,21 +25541,21 @@ snapshots: sass: 1.97.1 terser: 5.44.1 tsx: 4.21.0 - yaml: 2.8.2 + yaml: 2.8.3 - vitefu@1.1.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): + vitefu@1.1.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vitest-fetch-mock@0.4.5(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): + vitest-fetch-mock@0.4.5(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -25573,8 +25573,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -25595,10 +25595,10 @@ snapshots: - tsx - yaml - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -25615,7 +25615,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -25635,10 +25635,10 @@ snapshots: - tsx - yaml - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -25655,7 +25655,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -25675,10 +25675,10 @@ snapshots: - tsx - yaml - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -25695,7 +25695,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -26047,9 +26047,9 @@ snapshots: yallist@5.0.0: {} - yaml@1.10.2: {} + yaml@1.10.3: {} - yaml@2.8.2: {} + yaml@2.8.3: {} yargs-parser@18.1.3: dependencies: From f7827826628749c9f06ea17acda0297e274febde Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:29:53 +0100 Subject: [PATCH 029/156] fix(deps): update dependency kysely to v0.28.14 [security] (#27068) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 26 +++++++++++++------------- server/package.json | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1cfa85904e..f315c58bf0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -485,11 +485,11 @@ importers: specifier: ^9.0.2 version: 9.0.3 kysely: - specifier: 0.28.11 - version: 0.28.11 + specifier: 0.28.14 + version: 0.28.14 kysely-postgres-js: specifier: ^3.0.0 - version: 3.0.0(kysely@0.28.11)(postgres@3.4.8) + version: 3.0.0(kysely@0.28.14)(postgres@3.4.8) lodash: specifier: ^4.17.21 version: 4.17.23 @@ -510,7 +510,7 @@ importers: version: 5.4.3(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) nestjs-kysely: specifier: 3.1.2 - version: 3.1.2(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(kysely@0.28.11)(reflect-metadata@0.2.2) + version: 3.1.2(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(kysely@0.28.14)(reflect-metadata@0.2.2) nestjs-otel: specifier: ^7.0.0 version: 7.0.1(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16) @@ -8501,8 +8501,8 @@ packages: postgres: optional: true - kysely@0.28.11: - resolution: {integrity: sha512-zpGIFg0HuoC893rIjYX1BETkVWdDnzTzF5e0kWXJFg5lE0k1/LfNWBejrcnOFu8Q2Rfq/hTDTU7XLUM8QOrpzg==} + kysely@0.28.14: + resolution: {integrity: sha512-SU3lgh0rPvq7upc6vvdVrCsSMUG1h3ChvHVOY7wJ2fw4C9QEB7X3d5eyYEyULUX7UQtxZJtZXGuT6U2US72UYA==} engines: {node: '>=20.0.0'} langium@3.3.1: @@ -15108,8 +15108,8 @@ snapshots: '@immich/sql-tools@0.3.2': dependencies: commander: 14.0.3 - kysely: 0.28.11 - kysely-postgres-js: 3.0.0(kysely@0.28.11)(postgres@3.4.8) + kysely: 0.28.14 + kysely-postgres-js: 3.0.0(kysely@0.28.14)(postgres@3.4.8) pg-connection-string: 2.12.0 postgres: 3.4.8 @@ -21276,13 +21276,13 @@ snapshots: type-is: 2.0.1 vary: 1.1.2 - kysely-postgres-js@3.0.0(kysely@0.28.11)(postgres@3.4.8): + kysely-postgres-js@3.0.0(kysely@0.28.14)(postgres@3.4.8): dependencies: - kysely: 0.28.11 + kysely: 0.28.14 optionalDependencies: postgres: 3.4.8 - kysely@0.28.11: {} + kysely@0.28.14: {} langium@3.3.1: dependencies: @@ -22348,11 +22348,11 @@ snapshots: reflect-metadata: 0.2.2 rxjs: 7.8.2 - nestjs-kysely@3.1.2(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(kysely@0.28.11)(reflect-metadata@0.2.2): + nestjs-kysely@3.1.2(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(kysely@0.28.14)(reflect-metadata@0.2.2): dependencies: '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) - kysely: 0.28.11 + kysely: 0.28.14 reflect-metadata: 0.2.2 tslib: 2.8.1 diff --git a/server/package.json b/server/package.json index b95135b558..cc36ec3367 100644 --- a/server/package.json +++ b/server/package.json @@ -86,7 +86,7 @@ "jose": "^5.10.0", "js-yaml": "^4.1.0", "jsonwebtoken": "^9.0.2", - "kysely": "0.28.11", + "kysely": "0.28.14", "kysely-postgres-js": "^3.0.0", "lodash": "^4.17.21", "luxon": "^3.4.2", From 44ae0fa7ede7df6ba501ea36bc23d3611f461509 Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Thu, 26 Mar 2026 17:30:14 +0000 Subject: [PATCH 030/156] fix(database restores): don't assume onboarding has completed (#27052) --- .../server/database-backups.e2e-spec.ts | 8 +++-- server/src/app.common.ts | 4 +-- server/src/app.module.ts | 2 ++ server/src/constants.ts | 2 ++ .../maintenance-health.repository.ts | 35 +++++-------------- .../services/database-backup.service.spec.ts | 28 +++++++++++++++ .../src/services/database-backup.service.ts | 9 +++++ 7 files changed, 58 insertions(+), 30 deletions(-) diff --git a/e2e/src/specs/maintenance/server/database-backups.e2e-spec.ts b/e2e/src/specs/maintenance/server/database-backups.e2e-spec.ts index 2b0f6ae61a..b69bd099ed 100644 --- a/e2e/src/specs/maintenance/server/database-backups.e2e-spec.ts +++ b/e2e/src/specs/maintenance/server/database-backups.e2e-spec.ts @@ -10,7 +10,9 @@ describe('/admin/database-backups', () => { beforeAll(async () => { await utils.resetDatabase(); - admin = await utils.adminSetup(); + admin = await utils.adminSetup({ + onboarding: false, + }); await utils.resetBackups(admin.accessToken); }); @@ -94,7 +96,9 @@ describe('/admin/database-backups', () => { ({ status, body }) => status === 200 && !body.maintenanceMode, ); - admin = await utils.adminSetup(); + admin = await utils.adminSetup({ + onboarding: false, + }); }); it.sequential('should not work when the server is configured', async () => { diff --git a/server/src/app.common.ts b/server/src/app.common.ts index 934c13343f..98161f69d1 100644 --- a/server/src/app.common.ts +++ b/server/src/app.common.ts @@ -4,7 +4,7 @@ import compression from 'compression'; import cookieParser from 'cookie-parser'; import { existsSync } from 'node:fs'; import sirv from 'sirv'; -import { excludePaths, serverVersion } from 'src/constants'; +import { IMMICH_SERVER_START, excludePaths, serverVersion } from 'src/constants'; import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service'; import { WebSocketAdapter } from 'src/middleware/websocket.adapter'; import { ConfigRepository } from 'src/repositories/config.repository'; @@ -83,5 +83,5 @@ export async function configureExpress( const server = await (host ? app.listen(port, host) : app.listen(port)); server.requestTimeout = 24 * 60 * 60 * 1000; - logger.log(`Immich Server is listening on ${await app.getUrl()} [v${serverVersion}] [${environment}] `); + logger.log(`${IMMICH_SERVER_START} on ${await app.getUrl()} [v${serverVersion}] [${environment}] `); } diff --git a/server/src/app.module.ts b/server/src/app.module.ts index 49b779ca18..b59317577f 100644 --- a/server/src/app.module.ts +++ b/server/src/app.module.ts @@ -29,6 +29,7 @@ import { ProcessRepository } from 'src/repositories/process.repository'; import { StorageRepository } from 'src/repositories/storage.repository'; import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; import { teardownTelemetry, TelemetryRepository } from 'src/repositories/telemetry.repository'; +import { UserRepository } from 'src/repositories/user.repository'; import { WebsocketRepository } from 'src/repositories/websocket.repository'; import { services } from 'src/services'; import { AuthService } from 'src/services/auth.service'; @@ -111,6 +112,7 @@ export class ApiModule extends BaseModule {} StorageRepository, ProcessRepository, DatabaseRepository, + UserRepository, SystemMetadataRepository, AppRepository, MaintenanceHealthRepository, diff --git a/server/src/constants.ts b/server/src/constants.ts index e24057beba..4f8d9342c7 100644 --- a/server/src/constants.ts +++ b/server/src/constants.ts @@ -4,6 +4,8 @@ import { dirname, join } from 'node:path'; import { SemVer } from 'semver'; import { ApiTag, AudioCodec, DatabaseExtension, ExifOrientation, VectorIndex } from 'src/enum'; +export const IMMICH_SERVER_START = 'Immich Server is listening'; + export const ErrorMessages = { InconsistentMediaLocation: 'Detected an inconsistent media location. For more information, see https://docs.immich.app/errors#inconsistent-media-location', diff --git a/server/src/maintenance/maintenance-health.repository.ts b/server/src/maintenance/maintenance-health.repository.ts index aeef93ec51..6eab265677 100644 --- a/server/src/maintenance/maintenance-health.repository.ts +++ b/server/src/maintenance/maintenance-health.repository.ts @@ -1,6 +1,7 @@ import { Injectable } from '@nestjs/common'; import { fork } from 'node:child_process'; import { dirname, join } from 'node:path'; +import { IMMICH_SERVER_START } from 'src/constants'; @Injectable() export class MaintenanceHealthRepository { @@ -20,45 +21,27 @@ export class MaintenanceHealthRepository { stdio: ['ignore', 'pipe', 'ignore', 'ipc'], }); - async function checkHealth() { - try { - const response = await fetch('http://127.0.0.1:33001/api/server/config'); - const { isOnboarded } = await response.json(); - if (isOnboarded) { - resolve(); - } else { - reject(new Error('Server health check failed, no admin exists.')); - } - } catch (error) { - reject(error); - } finally { - if (worker.exitCode === null) { - worker.kill('SIGTERM'); - } - } - } - - let output = '', - alive = false; + let output = ''; worker.stdout?.on('data', (data) => { - if (alive) { + if (worker.exitCode !== null) { return; } output += data; - if (output.includes('Immich Server is listening')) { - alive = true; - void checkHealth(); + if (output.includes(IMMICH_SERVER_START)) { + resolve(); + worker.kill('SIGTERM'); } }); - worker.on('exit', reject); - worker.on('error', reject); + worker.on('exit', (code, signal) => reject(`Server health check failed, server exited with ${signal ?? code}`)); + worker.on('error', (error) => reject(`Server health check failed, process threw: ${error}`)); setTimeout(() => { if (worker.exitCode === null) { + reject('Server health check failed, took too long to start.'); worker.kill('SIGTERM'); } }, 20_000); diff --git a/server/src/services/database-backup.service.spec.ts b/server/src/services/database-backup.service.spec.ts index 429e60aede..37964e7b6f 100644 --- a/server/src/services/database-backup.service.spec.ts +++ b/server/src/services/database-backup.service.spec.ts @@ -27,6 +27,7 @@ describe(DatabaseBackupService.name, () => { mocks.systemMetadata as never, mocks.process, mocks.database as never, + mocks.user as never, mocks.cron as never, mocks.job as never, maintenanceHealthRepositoryMock as never, @@ -187,6 +188,7 @@ describe(DatabaseBackupService.name, () => { mocks.systemMetadata as never, mocks.process, mocks.database as never, + mocks.user as never, mocks.cron as never, mocks.job as never, void 0 as never, @@ -400,6 +402,7 @@ describe(DatabaseBackupService.name, () => { mocks.systemMetadata as never, mocks.process, mocks.database as never, + mocks.user as never, mocks.cron as never, mocks.job as never, void 0 as never, @@ -474,6 +477,7 @@ describe(DatabaseBackupService.name, () => { mocks.systemMetadata as never, mocks.process, mocks.database as never, + mocks.user as never, mocks.cron as never, mocks.job as never, void 0 as never, @@ -536,6 +540,7 @@ describe(DatabaseBackupService.name, () => { mocks.systemMetadata as never, mocks.process, mocks.database as never, + mocks.user as never, mocks.cron as never, mocks.job as never, void 0 as never, @@ -663,6 +668,7 @@ describe(DatabaseBackupService.name, () => { mocks.systemMetadata as never, mocks.process, mocks.database as never, + mocks.user as never, mocks.cron as never, mocks.job as never, maintenanceHealthRepositoryMock, @@ -678,6 +684,8 @@ describe(DatabaseBackupService.name, () => { it('should successfully restore a backup', async () => { let writtenToPsql = ''; + mocks.user.hasAdmin.mockResolvedValue(true); + mocks.process.spawnDuplexStream.mockImplementationOnce(() => mockDuplex()('command', 0, 'data', '')); mocks.process.spawnDuplexStream.mockImplementationOnce(() => mockDuplex()('command', 0, 'data', '')); mocks.process.spawnDuplexStream.mockImplementationOnce(() => { @@ -740,6 +748,8 @@ describe(DatabaseBackupService.name, () => { it('should generate pg_dumpall specific SQL instructions', async () => { let writtenToPsql = ''; + mocks.user.hasAdmin.mockResolvedValue(true); + mocks.process.spawnDuplexStream.mockImplementationOnce(() => mockDuplex()('command', 0, 'data', '')); mocks.process.spawnDuplexStream.mockImplementationOnce(() => mockDuplex()('command', 0, 'data', '')); mocks.process.spawnDuplexStream.mockImplementationOnce(() => { @@ -834,7 +844,24 @@ describe(DatabaseBackupService.name, () => { expect(mocks.process.spawnDuplexStream).toHaveBeenCalledTimes(4); }); + it('should rollback if there is no admin user', async () => { + mocks.user.hasAdmin.mockResolvedValue(false); + + const progress = vitest.fn(); + await expect( + sut.restoreDatabaseBackup('development-filename.sql', progress), + ).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: Server health check failed, no admin exists.]`); + + expect(progress).toHaveBeenCalledWith('backup', 0.05); + expect(progress).toHaveBeenCalledWith('migrations', 0.9); + expect(progress).toHaveBeenCalledWith('rollback', 0); + + expect(mocks.user.hasAdmin).toHaveBeenCalled(); + expect(mocks.process.spawnDuplexStream).toHaveBeenCalledTimes(4); + }); + it('should rollback if API healthcheck fails', async () => { + mocks.user.hasAdmin.mockResolvedValue(true); maintenanceHealthRepositoryMock.checkApiHealth.mockRejectedValue(new Error('Health Error')); const progress = vitest.fn(); @@ -846,6 +873,7 @@ describe(DatabaseBackupService.name, () => { expect(progress).toHaveBeenCalledWith('migrations', 0.9); expect(progress).toHaveBeenCalledWith('rollback', 0); + expect(mocks.user.hasAdmin).toHaveBeenCalled(); expect(maintenanceHealthRepositoryMock.checkApiHealth).toHaveBeenCalled(); expect(mocks.process.spawnDuplexStream).toHaveBeenCalledTimes(4); }); diff --git a/server/src/services/database-backup.service.ts b/server/src/services/database-backup.service.ts index 3c964c950c..666ddcff0a 100644 --- a/server/src/services/database-backup.service.ts +++ b/server/src/services/database-backup.service.ts @@ -20,6 +20,7 @@ import { LoggingRepository } from 'src/repositories/logging.repository'; import { ProcessRepository } from 'src/repositories/process.repository'; import { StorageRepository } from 'src/repositories/storage.repository'; import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; +import { UserRepository } from 'src/repositories/user.repository'; import { getConfig } from 'src/utils/config'; import { findDatabaseBackupVersion, @@ -40,6 +41,7 @@ export class DatabaseBackupService { private readonly systemMetadataRepository: SystemMetadataRepository, private readonly processRepository: ProcessRepository, private readonly databaseRepository: DatabaseRepository, + private readonly userRepository: UserRepository, @Optional() private readonly cronRepository: CronRepository, @Optional() @@ -405,7 +407,14 @@ export class DatabaseBackupService { try { progressCb?.('migrations', 0.9); + await this.databaseRepository.runMigrations(); + + const hasAdmin = await this.userRepository.hasAdmin(); + if (!hasAdmin) { + throw new Error('Server health check failed, no admin exists.'); + } + await this.maintenanceHealthRepository.checkApiHealth(); } catch (error) { progressCb?.('rollback', 0); From 5c159d70a7c2eef069f262e0566386ebe17ada02 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:30:38 +0100 Subject: [PATCH 031/156] chore(deps): update node.js to v24.14.0 (#26972) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/.nvmrc | 2 +- cli/.nvmrc | 2 +- cli/package.json | 2 +- docs/.nvmrc | 2 +- docs/package.json | 2 +- e2e/.nvmrc | 2 +- e2e/package.json | 2 +- mise.toml | 2 +- open-api/typescript-sdk/.nvmrc | 2 +- open-api/typescript-sdk/package.json | 2 +- server/.nvmrc | 2 +- server/package.json | 2 +- web/.nvmrc | 2 +- web/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/.nvmrc b/.github/.nvmrc index 32f8c50de0..d845d9d88d 100644 --- a/.github/.nvmrc +++ b/.github/.nvmrc @@ -1 +1 @@ -24.13.1 +24.14.0 diff --git a/cli/.nvmrc b/cli/.nvmrc index 32f8c50de0..d845d9d88d 100644 --- a/cli/.nvmrc +++ b/cli/.nvmrc @@ -1 +1 @@ -24.13.1 +24.14.0 diff --git a/cli/package.json b/cli/package.json index 2346ba298f..9cc34ddbb9 100644 --- a/cli/package.json +++ b/cli/package.json @@ -68,6 +68,6 @@ "micromatch": "^4.0.8" }, "volta": { - "node": "24.13.1" + "node": "24.14.0" } } diff --git a/docs/.nvmrc b/docs/.nvmrc index 32f8c50de0..d845d9d88d 100644 --- a/docs/.nvmrc +++ b/docs/.nvmrc @@ -1 +1 @@ -24.13.1 +24.14.0 diff --git a/docs/package.json b/docs/package.json index 60a6dccf87..b5c9ca7421 100644 --- a/docs/package.json +++ b/docs/package.json @@ -58,6 +58,6 @@ "node": ">=20" }, "volta": { - "node": "24.13.1" + "node": "24.14.0" } } diff --git a/e2e/.nvmrc b/e2e/.nvmrc index 32f8c50de0..d845d9d88d 100644 --- a/e2e/.nvmrc +++ b/e2e/.nvmrc @@ -1 +1 @@ -24.13.1 +24.14.0 diff --git a/e2e/package.json b/e2e/package.json index 0193e1bb79..b218bf0e9a 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -58,6 +58,6 @@ "vitest": "^4.0.0" }, "volta": { - "node": "24.13.1" + "node": "24.14.0" } } diff --git a/mise.toml b/mise.toml index 0ec32de20c..fcfa3866e5 100644 --- a/mise.toml +++ b/mise.toml @@ -14,7 +14,7 @@ config_roots = [ ] [tools] -node = "24.13.1" +node = "24.14.0" flutter = "3.35.7" pnpm = "10.30.3" terragrunt = "0.99.4" diff --git a/open-api/typescript-sdk/.nvmrc b/open-api/typescript-sdk/.nvmrc index 32f8c50de0..d845d9d88d 100644 --- a/open-api/typescript-sdk/.nvmrc +++ b/open-api/typescript-sdk/.nvmrc @@ -1 +1 @@ -24.13.1 +24.14.0 diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 886f80fdf5..f9ccb934ef 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -28,6 +28,6 @@ "directory": "open-api/typescript-sdk" }, "volta": { - "node": "24.13.1" + "node": "24.14.0" } } diff --git a/server/.nvmrc b/server/.nvmrc index 32f8c50de0..d845d9d88d 100644 --- a/server/.nvmrc +++ b/server/.nvmrc @@ -1 +1 @@ -24.13.1 +24.14.0 diff --git a/server/package.json b/server/package.json index cc36ec3367..a553052046 100644 --- a/server/package.json +++ b/server/package.json @@ -172,7 +172,7 @@ "vitest": "^3.0.0" }, "volta": { - "node": "24.13.1" + "node": "24.14.0" }, "overrides": { "sharp": "^0.34.5" diff --git a/web/.nvmrc b/web/.nvmrc index 32f8c50de0..d845d9d88d 100644 --- a/web/.nvmrc +++ b/web/.nvmrc @@ -1 +1 @@ -24.13.1 +24.14.0 diff --git a/web/package.json b/web/package.json index b6f4ca6c4e..3ca5fdc57b 100644 --- a/web/package.json +++ b/web/package.json @@ -110,6 +110,6 @@ "vitest": "^4.0.0" }, "volta": { - "node": "24.13.1" + "node": "24.14.0" } } From eeb55c279b9008d305583cafa43f4688941a1cc3 Mon Sep 17 00:00:00 2001 From: Michael Maycock Date: Thu, 26 Mar 2026 17:30:47 +0000 Subject: [PATCH 032/156] fix(web): preserve timezone when changing timestamp (Closes #25354) (#27095) --- .../lib/modals/AssetChangeDateModal.spec.ts | 67 +++++++++++++++++++ .../lib/modals/AssetChangeDateModal.svelte | 18 +++-- 2 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 web/src/lib/modals/AssetChangeDateModal.spec.ts diff --git a/web/src/lib/modals/AssetChangeDateModal.spec.ts b/web/src/lib/modals/AssetChangeDateModal.spec.ts new file mode 100644 index 0000000000..fc23f75651 --- /dev/null +++ b/web/src/lib/modals/AssetChangeDateModal.spec.ts @@ -0,0 +1,67 @@ +import { getAnimateMock } from '$lib/__mocks__/animate.mock'; +import { getIntersectionObserverMock } from '$lib/__mocks__/intersection-observer.mock'; +import { getVisualViewportMock } from '$lib/__mocks__/visual-viewport.mock'; +import { fireEvent, render, screen, waitFor } from '@testing-library/svelte'; +import { DateTime } from 'luxon'; +import { afterAll, beforeEach, describe, expect, test, vi } from 'vitest'; +import AssetChangeDateModal from './AssetChangeDateModal.svelte'; + +describe('AssetChangeDateModal component', () => { + const initialDate = DateTime.fromISO('2026-03-19T23:31:30.112'); + const initialTimeZone = 'Europe/Lisbon'; + const onClose = vi.fn(); + + const getDateInput = async () => (await screen.findByDisplayValue('2026-03-19T23:31:30.112')) as HTMLInputElement; + const getTimeZoneInput = () => screen.getByRole('combobox', { name: /timezone/i }) as HTMLInputElement; + + beforeEach(() => { + vi.stubGlobal('IntersectionObserver', getIntersectionObserverMock()); + vi.stubGlobal('visualViewport', getVisualViewportMock()); + vi.resetAllMocks(); + Element.prototype.animate = getAnimateMock(); + }); + + afterAll(async () => { + await waitFor(() => { + expect(document.body.style.pointerEvents).not.toBe('none'); + }); + }); + + test('preserves the selected timezone when changing the datetime', async () => { + render(AssetChangeDateModal, { + props: { + initialDate, + initialTimeZone, + timezoneInput: true, + asset: { id: 'asset-id' } as never, + onClose, + }, + }); + + const timezoneInput = getTimeZoneInput(); + const datetimeInput = await getDateInput(); + + const initialTimezoneValue = timezoneInput.value; + + await fireEvent.focus(timezoneInput); + await fireEvent.input(timezoneInput, { target: { value: 'Pacific/Pitcairn' } }); + + const option = await screen.findByText(/Pacific\/Pitcairn/i); + await fireEvent.click(option); + + expect(timezoneInput.value).toBe('Pacific/Pitcairn (-08:00)'); + expect(timezoneInput.value).not.toBe(initialTimezoneValue); + + const beforeDatetime = datetimeInput.value; + + await fireEvent.input(datetimeInput, { + target: { value: '2026-03-19T23:31:31.113' }, + }); + await fireEvent.change(datetimeInput, { + target: { value: '2026-03-19T23:31:31.113' }, + }); + + expect(datetimeInput.value).not.toBe(beforeDatetime); + expect(timezoneInput.value).toBe('Pacific/Pitcairn (-08:00)'); + }); +}); diff --git a/web/src/lib/modals/AssetChangeDateModal.svelte b/web/src/lib/modals/AssetChangeDateModal.svelte index ec4cb0f077..fe9d1baf25 100644 --- a/web/src/lib/modals/AssetChangeDateModal.svelte +++ b/web/src/lib/modals/AssetChangeDateModal.svelte @@ -23,10 +23,7 @@ let selectedDate = $state(initialDate.toFormat("yyyy-MM-dd'T'HH:mm:ss.SSS")); const timezones = $derived(getTimezones(selectedDate)); - // svelte-ignore state_referenced_locally - let lastSelectedTimezone = $state(getPreferredTimeZone(initialDate, initialTimeZone, timezones)); - // the offsets (and validity) for time zones may change if the date is changed, which is why we recompute the list - let selectedOption = $derived(getPreferredTimeZone(initialDate, initialTimeZone, timezones, lastSelectedTimezone)); + let selectedOption = $state(getPreferredTimeZone(initialDate, initialTimeZone, getTimezones(selectedDate))); const onSubmit = async () => { if (!date.isValid || !selectedOption) { @@ -45,6 +42,12 @@ } }; + const updateSelectedDate = (value: string) => { + selectedDate = value; + + selectedOption = getPreferredTimeZone(initialDate, initialTimeZone, getTimezones(value), selectedOption); + }; + // when changing the time zone, assume the configured date/time is meant for that time zone (instead of updating it) const date = $derived(DateTime.fromISO(selectedDate, { zone: selectedOption?.value, setZone: true })); @@ -59,7 +62,12 @@ size="small" > - + selectedDate, updateSelectedDate} + /> {#if timezoneInput}
From 42fe86d24c302a989928cbfe9b7ce33d258f586e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:31:08 +0100 Subject: [PATCH 033/156] chore(deps): update grafana/grafana docker tag to v12.4.1 (#26969) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docker/docker-compose.prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.prod.yml b/docker/docker-compose.prod.yml index 4d07794fea..10a78b12ba 100644 --- a/docker/docker-compose.prod.yml +++ b/docker/docker-compose.prod.yml @@ -97,7 +97,7 @@ services: command: ['./run.sh', '-disable-reporting'] ports: - 3000:3000 - image: grafana/grafana:12.3.2-ubuntu@sha256:6cca4b429a1dc0d37d401dee54825c12d40056c3c6f3f56e3f0d6318ce77749b + image: grafana/grafana:12.4.1-ubuntu@sha256:1a20dea76a2778773df17dbc365db86b1a4f2d57772b8590b6311038a3acb1db volumes: - grafana-data:/var/lib/grafana From 7d58d5be12c49c43c2419ba82d3e6b625f0abcbe Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Thu, 26 Mar 2026 13:36:25 -0400 Subject: [PATCH 034/156] refactor: memory manager (#27206) --- .../components/memory-page/memory-viewer.svelte | 16 ++++++++-------- .../memory-manager.svelte.ts} | 4 ++-- .../(user)/photos/[[assetId=id]]/+page.svelte | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) rename web/src/lib/{stores/memory.store.svelte.ts => managers/memory-manager.svelte.ts} (98%) diff --git a/web/src/lib/components/memory-page/memory-viewer.svelte b/web/src/lib/components/memory-page/memory-viewer.svelte index 3de451bdba..ab3256df49 100644 --- a/web/src/lib/components/memory-page/memory-viewer.svelte +++ b/web/src/lib/components/memory-page/memory-viewer.svelte @@ -21,11 +21,11 @@ import { QueryParameter } from '$lib/constants'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { authManager } from '$lib/managers/auth-manager.svelte'; + import { memoryManager, type MemoryAsset } from '$lib/managers/memory-manager.svelte'; import type { TimelineAsset, Viewport } from '$lib/managers/timeline-manager/types'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; - import { memoryStore, type MemoryAsset } from '$lib/stores/memory.store.svelte'; import { locale, videoViewerMuted, videoViewerVolume } from '$lib/stores/preferences.store'; import { preferences } from '$lib/stores/user.store'; import { getAssetMediaUrl, handlePromiseError, memoryLaneTitle } from '$lib/utils'; @@ -186,7 +186,7 @@ if (!current) { return; } - memoryStore.hideAssetsFromMemory(ids); + memoryManager.hideAssetsFromMemory(ids); init(page); }; @@ -195,7 +195,7 @@ return; } - await memoryStore.deleteAssetFromMemory(current.asset.id); + await memoryManager.deleteAssetFromMemory(current.asset.id); init(page); }; @@ -204,7 +204,7 @@ return; } - await memoryStore.deleteMemory(current.memory.id); + await memoryManager.deleteMemory(current.memory.id); toastManager.primary($t('removed_memory')); init(page); }; @@ -215,7 +215,7 @@ } const newSavedState = !current.memory.isSaved; - await memoryStore.updateMemorySaved(current.memory.id, newSavedState); + await memoryManager.updateMemorySaved(current.memory.id, newSavedState); toastManager.primary(newSavedState ? $t('added_to_favorites') : $t('removed_from_favorites')); init(page); }; @@ -253,11 +253,11 @@ const loadFromParams = (page: Page | NavigationTarget | null) => { const assetId = page?.params?.assetId ?? page?.url.searchParams.get(QueryParameter.ID) ?? undefined; - return memoryStore.getMemoryAsset(assetId); + return memoryManager.getMemoryAsset(assetId); }; const init = (target: Page | NavigationTarget | null) => { - if (memoryStore.memories.length === 0) { + if (memoryManager.memories.length === 0) { return handlePromiseError(goto(Route.photos())); } @@ -290,7 +290,7 @@ }; afterNavigate(({ from, to }) => { - memoryStore.ready().then( + memoryManager.ready().then( () => { let target; if (to?.params?.assetId) { diff --git a/web/src/lib/stores/memory.store.svelte.ts b/web/src/lib/managers/memory-manager.svelte.ts similarity index 98% rename from web/src/lib/stores/memory.store.svelte.ts rename to web/src/lib/managers/memory-manager.svelte.ts index cdd6af9606..9e34ff2d0e 100644 --- a/web/src/lib/stores/memory.store.svelte.ts +++ b/web/src/lib/managers/memory-manager.svelte.ts @@ -21,7 +21,7 @@ export type MemoryAsset = MemoryIndex & { nextMemory?: MemoryResponseDto; }; -class MemoryStoreSvelte { +class MemoryManager { #loading: Promise | undefined; constructor() { @@ -135,4 +135,4 @@ class MemoryStoreSvelte { } } -export const memoryStore = new MemoryStoreSvelte(); +export const memoryManager = new MemoryManager(); diff --git a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte index 4d1775d7dc..21f51a8f49 100644 --- a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte @@ -21,12 +21,12 @@ import Timeline from '$lib/components/timeline/Timeline.svelte'; import { AssetAction } from '$lib/constants'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; + import { memoryManager } from '$lib/managers/memory-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { isFaceEditMode } from '$lib/stores/face-edit.svelte'; - import { memoryStore } from '$lib/stores/memory.store.svelte'; import { preferences, user } from '$lib/stores/user.store'; import { getAssetMediaUrl, memoryLaneTitle } from '$lib/utils'; import { @@ -90,7 +90,7 @@ }); const items = $derived( - memoryStore.memories.map((memory) => ({ + memoryManager.memories.map((memory) => ({ id: memory.id, title: $memoryLaneTitle(memory), href: Route.memories({ id: memory.assets[0].id }), From dbaf4b548b624109c22db97fe7770eb74640e267 Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Thu, 26 Mar 2026 18:37:23 +0100 Subject: [PATCH 035/156] fix: pin success-check-action to correct tag (#27230) --- .github/workflows/docker.yml | 4 ++-- .github/workflows/test.yml | 2 +- .github/workflows/weblate-lock.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index a9a873ac7d..d5c327b9e7 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -178,7 +178,7 @@ jobs: runs-on: ubuntu-latest if: always() steps: - - uses: immich-app/devtools/actions/success-check@68f10eb389bb02a3cf9d1156111964c549eb421b # 0.0.4 + - uses: immich-app/devtools/actions/success-check@53bb77345ee9f953f93bd6fd9980f07a2f24965e # success-check-action-v0.0.5 with: needs: ${{ toJSON(needs) }} @@ -189,6 +189,6 @@ jobs: runs-on: ubuntu-latest if: always() steps: - - uses: immich-app/devtools/actions/success-check@68f10eb389bb02a3cf9d1156111964c549eb421b # 0.0.4 + - uses: immich-app/devtools/actions/success-check@53bb77345ee9f953f93bd6fd9980f07a2f24965e # success-check-action-v0.0.5 with: needs: ${{ toJSON(needs) }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6da8b8d434..bb1e24be5c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -566,7 +566,7 @@ jobs: runs-on: ubuntu-latest if: always() steps: - - uses: immich-app/devtools/actions/success-check@68f10eb389bb02a3cf9d1156111964c549eb421b # 0.0.4 + - uses: immich-app/devtools/actions/success-check@53bb77345ee9f953f93bd6fd9980f07a2f24965e # success-check-action-v0.0.5 with: needs: ${{ toJSON(needs) }} mobile-unit-tests: diff --git a/.github/workflows/weblate-lock.yml b/.github/workflows/weblate-lock.yml index 954b1dd2e7..09024063c0 100644 --- a/.github/workflows/weblate-lock.yml +++ b/.github/workflows/weblate-lock.yml @@ -68,6 +68,6 @@ jobs: permissions: {} if: always() steps: - - uses: immich-app/devtools/actions/success-check@68f10eb389bb02a3cf9d1156111964c549eb421b # 0.0.4 + - uses: immich-app/devtools/actions/success-check@53bb77345ee9f953f93bd6fd9980f07a2f24965e # success-check-action-v0.0.5 with: needs: ${{ toJSON(needs) }} From b33874ef12337db5ca6c786f97c716d6aba3d622 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Thu, 26 Mar 2026 13:41:23 -0400 Subject: [PATCH 036/156] feat: add support for helmet configuration (#27058) --- docker/docker-compose.dev.yml | 1 + docs/docs/install/environment-variables.md | 33 ++++++++++--------- pnpm-lock.yaml | 9 +++++ server/helmet.json | 21 ++++++++++++ server/package.json | 4 ++- server/src/app.common.ts | 9 ++++- server/src/dtos/env.dto.ts | 4 +++ server/src/repositories/config.repository.ts | 29 ++++++++++++++++ .../repositories/config.repository.mock.ts | 4 +++ 9 files changed, 96 insertions(+), 18 deletions(-) create mode 100644 server/helmet.json diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 6e435b3c6b..1dac8f2c50 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -90,6 +90,7 @@ services: IMMICH_THIRD_PARTY_BUG_FEATURE_URL: https://github.com/immich-app/immich/issues IMMICH_THIRD_PARTY_DOCUMENTATION_URL: https://docs.immich.app IMMICH_THIRD_PARTY_SUPPORT_URL: https://docs.immich.app/community-guides + IMMICH_HELMET_FILE: 'true' ports: - 9230:9230 - 9231:9231 diff --git a/docs/docs/install/environment-variables.md b/docs/docs/install/environment-variables.md index e9e3bb032c..41068dee97 100644 --- a/docs/docs/install/environment-variables.md +++ b/docs/docs/install/environment-variables.md @@ -29,22 +29,23 @@ These environment variables are used by the `docker-compose.yml` file and do **N ## General -| Variable | Description | Default | Containers | Workers | -| :---------------------------------- | :---------------------------------------------------------------------------------------- | :--------------------------: | :----------------------- | :----------------- | -| `TZ` | Timezone | \*1 | server | microservices | -| `IMMICH_ENV` | Environment (production, development) | `production` | server, machine learning | api, microservices | -| `IMMICH_LOG_LEVEL` | Log level (verbose, debug, log, warn, error) | `log` | server, machine learning | api, microservices | -| `IMMICH_LOG_FORMAT` | Log output format (`console`, `json`) | `console` | server | api, microservices | -| `IMMICH_MEDIA_LOCATION` | Media location inside the container ⚠️**You probably shouldn't set this**\*2⚠️ | `/data` | server | api, microservices | -| `IMMICH_CONFIG_FILE` | Path to config file | | server | api, microservices | -| `NO_COLOR` | Set to `true` to disable color-coded log output | `false` | server, machine learning | | -| `CPU_CORES` | Number of cores available to the Immich server | auto-detected CPU core count | server | | -| `IMMICH_API_METRICS_PORT` | Port for the OTEL metrics | `8081` | server | api | -| `IMMICH_MICROSERVICES_METRICS_PORT` | Port for the OTEL metrics | `8082` | server | microservices | -| `IMMICH_PROCESS_INVALID_IMAGES` | When `true`, generate thumbnails for invalid images | | server | microservices | -| `IMMICH_TRUSTED_PROXIES` | List of comma-separated IPs set as trusted proxies | | server | api | -| `IMMICH_IGNORE_MOUNT_CHECK_ERRORS` | See [System Integrity](/administration/system-integrity) | | server | api, microservices | -| `IMMICH_ALLOW_SETUP` | When `false` disables the `/auth/admin-sign-up` endpoint | `true` | server | api | +| Variable | Description | Default | Containers | Workers | +| :---------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------: | :----------------------- | :----------------- | +| `TZ` | Timezone | \*1 | server | microservices | +| `IMMICH_ENV` | Environment (production, development) | `production` | server, machine learning | api, microservices | +| `IMMICH_LOG_LEVEL` | Log level (verbose, debug, log, warn, error) | `log` | server, machine learning | api, microservices | +| `IMMICH_LOG_FORMAT` | Log output format (`console`, `json`) | `console` | server | api, microservices | +| `IMMICH_MEDIA_LOCATION` | Media location inside the container ⚠️**You probably shouldn't set this**\*2⚠️ | `/data` | server | api, microservices | +| `IMMICH_CONFIG_FILE` | Path to config file | | server | api, microservices | +| `IMMICH_HELMET_FILE` | Path to a json file with [helmet](https://www.npmjs.com/package/helmet) options. Set to `false` to disable. Set to `true` to use `server/helmet.json`. | `false` | server | api, microservices | +| `NO_COLOR` | Set to `true` to disable color-coded log output | `false` | server, machine learning | | +| `CPU_CORES` | Number of cores available to the Immich server | auto-detected CPU core count | server | | +| `IMMICH_API_METRICS_PORT` | Port for the OTEL metrics | `8081` | server | api | +| `IMMICH_MICROSERVICES_METRICS_PORT` | Port for the OTEL metrics | `8082` | server | microservices | +| `IMMICH_PROCESS_INVALID_IMAGES` | When `true`, generate thumbnails for invalid images | | server | microservices | +| `IMMICH_TRUSTED_PROXIES` | List of comma-separated IPs set as trusted proxies | | server | api | +| `IMMICH_IGNORE_MOUNT_CHECK_ERRORS` | See [System Integrity](/administration/system-integrity) | | server | api, microservices | +| `IMMICH_ALLOW_SETUP` | When `false` disables the `/auth/admin-sign-up` endpoint | `true` | server | api | \*1: `TZ` should be set to a `TZ identifier` from [this list][tz-list]. For example, `TZ="Etc/UTC"`. `TZ` is used by `exiftool` as a fallback in case the timezone cannot be determined from the image metadata. It is also used for logfile timestamps and cron job execution. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f315c58bf0..e8bd9f5bc3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -469,6 +469,9 @@ importers: handlebars: specifier: ^4.7.8 version: 4.7.8 + helmet: + specifier: ^8.1.0 + version: 8.1.0 i18n-iso-countries: specifier: ^7.6.0 version: 7.14.0 @@ -7837,6 +7840,10 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + helmet@8.1.0: + resolution: {integrity: sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==} + engines: {node: '>=18.0.0'} + highlight.js@11.11.1: resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} engines: {node: '>=12.0.0'} @@ -20556,6 +20563,8 @@ snapshots: he@1.2.0: {} + helmet@8.1.0: {} + highlight.js@11.11.1: {} history@4.10.1: diff --git a/server/helmet.json b/server/helmet.json new file mode 100644 index 0000000000..ec31752a52 --- /dev/null +++ b/server/helmet.json @@ -0,0 +1,21 @@ +{ + "contentSecurityPolicy": { + "directives": { + "default-src": ["'self'"], + "script-src": ["'self'", "'wasm-unsafe-eval", "'unsafe-inline'", "https://www.gstatic.com"], + "style-src": ["'self'", "'unsafe-inline'"], + "img-src": ["'self'", "'data:'", "'blob:'"], + "connect-src": [ + "'self'", + "blob:", + "https://pay.futo.org", + "https://static.immich.cloud", + "https://tiles.immich.cloud" + ], + "worker-src": ["'self'", "blob:"], + "frame-src": ["'none'"], + "object-src": ["'none'"], + "base-uri": ["'self'"] + } + } +} diff --git a/server/package.json b/server/package.json index a553052046..c209384aef 100644 --- a/server/package.json +++ b/server/package.json @@ -7,7 +7,8 @@ "license": "GNU Affero General Public License version 3", "files": [ "bin", - "dist" + "dist", + "helmet.json" ], "scripts": { "build": "nest build", @@ -81,6 +82,7 @@ "fluent-ffmpeg": "^2.1.2", "geo-tz": "^8.0.0", "handlebars": "^4.7.8", + "helmet": "^8.1.0", "i18n-iso-countries": "^7.6.0", "ioredis": "^5.8.2", "jose": "^5.10.0", diff --git a/server/src/app.common.ts b/server/src/app.common.ts index 98161f69d1..2159721932 100644 --- a/server/src/app.common.ts +++ b/server/src/app.common.ts @@ -2,6 +2,7 @@ import { NestExpressApplication } from '@nestjs/platform-express'; import { json } from 'body-parser'; import compression from 'compression'; import cookieParser from 'cookie-parser'; +import helmetMiddleware from 'helmet'; import { existsSync } from 'node:fs'; import sirv from 'sirv'; import { IMMICH_SERVER_START, excludePaths, serverVersion } from 'src/constants'; @@ -39,7 +40,7 @@ export async function configureExpress( }, ) { const configRepository = app.get(ConfigRepository); - const { environment, host, port, resourcePaths, network } = configRepository.getEnv(); + const { environment, host, port, helmet, resourcePaths, network } = configRepository.getEnv(); const logger = await app.resolve(LoggingRepository); logger.setContext('Bootstrap'); @@ -47,6 +48,12 @@ export async function configureExpress( app.set('trust proxy', ['loopback', ...network.trustedProxies]); app.set('etag', 'strong'); + + if (helmet.config) { + app.use(helmetMiddleware(helmet.config)); + logger.log('Initialized helmet middleware'); + } + app.use(cookieParser()); app.use(json({ limit: '10mb' })); diff --git a/server/src/dtos/env.dto.ts b/server/src/dtos/env.dto.ts index b04366c273..bdcf3614fd 100644 --- a/server/src/dtos/env.dto.ts +++ b/server/src/dtos/env.dto.ts @@ -42,6 +42,10 @@ export class EnvDto { @Optional() IMMICH_CONFIG_FILE?: string; + @IsString() + @Optional() + IMMICH_HELMET_FILE?: string; + @IsEnum(ImmichEnvironment) @Optional() IMMICH_ENV?: ImmichEnvironment; diff --git a/server/src/repositories/config.repository.ts b/server/src/repositories/config.repository.ts index 7e8082a582..1864733f87 100644 --- a/server/src/repositories/config.repository.ts +++ b/server/src/repositories/config.repository.ts @@ -5,9 +5,11 @@ import { QueueOptions } from 'bullmq'; import { plainToInstance } from 'class-transformer'; import { validateSync } from 'class-validator'; import { Request, Response } from 'express'; +import { HelmetOptions } from 'helmet'; import { RedisOptions } from 'ioredis'; import { CLS_ID, ClsModuleOptions } from 'nestjs-cls'; import { OpenTelemetryModuleOptions } from 'nestjs-otel/lib/interfaces'; +import { readFileSync } from 'node:fs'; import { join } from 'node:path'; import { citiesFile, excludePaths, IWorker } from 'src/constants'; import { Telemetry } from 'src/decorators'; @@ -58,6 +60,10 @@ export interface EnvData { config: ClsModuleOptions; }; + helmet: { + config?: HelmetOptions; + }; + database: { config: DatabaseConnectionParams; skipMigrations: boolean; @@ -143,6 +149,25 @@ const asSet = (value: string | undefined, defaults: T[]) => { return new Set(values.length === 0 ? defaults : (values as T[])); }; +const resolveHelmetFile = (helmetFile: 'true' | 'false' | string | undefined) => { + // default is off + if (!helmetFile || helmetFile === 'false') { + return; + } + + helmetFile = + helmetFile === 'true' + ? // eslint-disable-next-line unicorn/prefer-module + join(__dirname, '..', '..', 'helmet.json') + : helmetFile; + + try { + return JSON.parse(readFileSync(helmetFile).toString()) as HelmetOptions; + } catch (error) { + throw new Error(`Failed to read helmet file: ${helmetFile}`, { cause: error }); + } +}; + const getEnv = (): EnvData => { const dto = plainToInstance(EnvDto, process.env); const errors = validateSync(dto); @@ -289,6 +314,10 @@ const getEnv = (): EnvData => { vectorExtension, }, + helmet: { + config: resolveHelmetFile(dto.IMMICH_HELMET_FILE), + }, + licensePublicKey: isProd ? productionKeys : stagingKeys, network: { diff --git a/server/test/repositories/config.repository.mock.ts b/server/test/repositories/config.repository.mock.ts index 62e498372e..b5ab6e2054 100644 --- a/server/test/repositories/config.repository.mock.ts +++ b/server/test/repositories/config.repository.mock.ts @@ -35,6 +35,10 @@ const envData: EnvData = { vectorExtension: DatabaseExtension.Vectors, }, + helmet: { + config: {}, + }, + licensePublicKey: { client: 'client-public-key', server: 'server-public-key', From 1bd2d474d73d44188e1e2062a1ddc5a1938df95f Mon Sep 17 00:00:00 2001 From: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:45:14 +0100 Subject: [PATCH 037/156] fix: various comamnd palette usages (#27304) --- pnpm-lock.yaml | 10 +++++----- web/package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e8bd9f5bc3..d1c905d021 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -747,8 +747,8 @@ importers: specifier: workspace:* version: link:../open-api/typescript-sdk '@immich/ui': - specifier: ^0.67.2 - version: 0.67.2(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) + specifier: ^0.69.0 + version: 0.69.0(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) '@mapbox/mapbox-gl-rtl-text': specifier: 0.3.0 version: 0.3.0 @@ -3041,8 +3041,8 @@ packages: peerDependencies: svelte: ^5.0.0 - '@immich/ui@0.67.2': - resolution: {integrity: sha512-GsaoJRiRORJ34CT+W3pAOdhbLr61nNlgFaOzDcnVnSWFonu7+HR3CXdCxbSdyU4+r3xEmcawwo6rMuLgRplHfw==} + '@immich/ui@0.69.0': + resolution: {integrity: sha512-YQ+27pGQhzdRBOo/7cHcbXnax5BUrrJeYjUc+VdRYp6KMS8SlGWAKQhvZPdcqiPB332fxJMmpHjV+VqXJJjrqg==} peerDependencies: svelte: ^5.0.0 @@ -15127,7 +15127,7 @@ snapshots: node-emoji: 2.2.0 svelte: 5.53.13 - '@immich/ui@0.67.2(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)': + '@immich/ui@0.69.0(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)': dependencies: '@immich/svelte-markdown-preprocess': 0.2.1(svelte@5.53.13) '@internationalized/date': 3.10.0 diff --git a/web/package.json b/web/package.json index 3ca5fdc57b..ac2e54dc57 100644 --- a/web/package.json +++ b/web/package.json @@ -27,7 +27,7 @@ "@formatjs/icu-messageformat-parser": "^3.0.0", "@immich/justified-layout-wasm": "^0.4.3", "@immich/sdk": "workspace:*", - "@immich/ui": "^0.67.2", + "@immich/ui": "^0.69.0", "@mapbox/mapbox-gl-rtl-text": "0.3.0", "@mdi/js": "^7.4.47", "@photo-sphere-viewer/core": "^5.14.0", From 144a57ddffd34a5edd8d0b5d71092e365de80f5b Mon Sep 17 00:00:00 2001 From: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:51:00 +0100 Subject: [PATCH 038/156] refactor(server): use helpers for shared link queries (#27088) * fix(server): prevent album shared link from breaking after uploads * update test * add withSharedAssets helper * remove options * add more helpers * update selects --- server/src/queries/shared.link.repository.sql | 174 +++++++++++++----- .../repositories/shared-link.repository.ts | 154 +++++----------- .../services/shared-link.service.spec.ts | 37 ++++ 3 files changed, 212 insertions(+), 153 deletions(-) diff --git a/server/src/queries/shared.link.repository.sql b/server/src/queries/shared.link.repository.sql index f002110735..e1177bba28 100644 --- a/server/src/queries/shared.link.repository.sql +++ b/server/src/queries/shared.link.repository.sql @@ -3,37 +3,64 @@ -- SharedLinkRepository.get select "shared_link".*, - coalesce( - json_agg("a") filter ( - where - "a"."id" is not null - ), - '[]' + ( + select + coalesce(json_agg(agg), '[]') + from + ( + select + "asset".*, + to_json("exifInfo") as "exifInfo" + from + "shared_link_asset" + inner join "asset" on "asset"."id" = "shared_link_asset"."assetId" + inner join lateral ( + select + "asset_exif"."assetId", + "asset_exif"."autoStackId", + "asset_exif"."bitsPerSample", + "asset_exif"."city", + "asset_exif"."colorspace", + "asset_exif"."country", + "asset_exif"."dateTimeOriginal", + "asset_exif"."description", + "asset_exif"."exifImageHeight", + "asset_exif"."exifImageWidth", + "asset_exif"."exposureTime", + "asset_exif"."fileSizeInByte", + "asset_exif"."fNumber", + "asset_exif"."focalLength", + "asset_exif"."fps", + "asset_exif"."iso", + "asset_exif"."latitude", + "asset_exif"."lensModel", + "asset_exif"."livePhotoCID", + "asset_exif"."longitude", + "asset_exif"."make", + "asset_exif"."model", + "asset_exif"."modifyDate", + "asset_exif"."orientation", + "asset_exif"."profileDescription", + "asset_exif"."projectionType", + "asset_exif"."rating", + "asset_exif"."state", + "asset_exif"."tags", + "asset_exif"."timeZone" + from + "asset_exif" + where + "asset_exif"."assetId" = "asset"."id" + ) as "exifInfo" on true + where + "shared_link"."id" = "shared_link_asset"."sharedLinkId" + and "asset"."deletedAt" is null + order by + "asset"."fileCreatedAt" asc + ) as agg ) as "assets", to_json("album") as "album" from "shared_link" - left join lateral ( - select - "asset".*, - to_json("exifInfo") as "exifInfo" - from - "shared_link_asset" - inner join "asset" on "asset"."id" = "shared_link_asset"."assetId" - inner join lateral ( - select - "asset_exif".* - from - "asset_exif" - where - "asset_exif"."assetId" = "asset"."id" - ) as "exifInfo" on true - where - "shared_link"."id" = "shared_link_asset"."sharedLinkId" - and "asset"."deletedAt" is null - order by - "asset"."fileCreatedAt" asc - ) as "a" on true left join lateral ( select "album".*, @@ -60,7 +87,36 @@ from "asset" inner join lateral ( select - "asset_exif".* + "asset_exif"."assetId", + "asset_exif"."autoStackId", + "asset_exif"."bitsPerSample", + "asset_exif"."city", + "asset_exif"."colorspace", + "asset_exif"."country", + "asset_exif"."dateTimeOriginal", + "asset_exif"."description", + "asset_exif"."exifImageHeight", + "asset_exif"."exifImageWidth", + "asset_exif"."exposureTime", + "asset_exif"."fileSizeInByte", + "asset_exif"."fNumber", + "asset_exif"."focalLength", + "asset_exif"."fps", + "asset_exif"."iso", + "asset_exif"."latitude", + "asset_exif"."lensModel", + "asset_exif"."livePhotoCID", + "asset_exif"."longitude", + "asset_exif"."make", + "asset_exif"."model", + "asset_exif"."modifyDate", + "asset_exif"."orientation", + "asset_exif"."profileDescription", + "asset_exif"."projectionType", + "asset_exif"."rating", + "asset_exif"."state", + "asset_exif"."tags", + "asset_exif"."timeZone" from "asset_exif" where @@ -74,7 +130,12 @@ from ) as "assets" on true inner join lateral ( select - "user".* + "id", + "name", + "email", + "avatarColor", + "profileImagePath", + "profileChangedAt" from "user" where @@ -95,9 +156,6 @@ where "shared_link"."type" = $3 or "album"."id" is not null ) -group by - "shared_link"."id", - "album".* order by "shared_link"."createdAt" desc @@ -134,21 +192,12 @@ from "album" inner join lateral ( select - "user"."id", - "user"."email", - "user"."createdAt", - "user"."profileImagePath", - "user"."isAdmin", - "user"."shouldChangePassword", - "user"."deletedAt", - "user"."oauthId", - "user"."updatedAt", - "user"."storageLabel", - "user"."name", - "user"."quotaSizeInBytes", - "user"."quotaUsageInBytes", - "user"."status", - "user"."profileChangedAt" + "id", + "name", + "email", + "avatarColor", + "profileImagePath", + "profileChangedAt" from "user" where @@ -267,7 +316,36 @@ from "asset" inner join lateral ( select - * + "asset_exif"."assetId", + "asset_exif"."autoStackId", + "asset_exif"."bitsPerSample", + "asset_exif"."city", + "asset_exif"."colorspace", + "asset_exif"."country", + "asset_exif"."dateTimeOriginal", + "asset_exif"."description", + "asset_exif"."exifImageHeight", + "asset_exif"."exifImageWidth", + "asset_exif"."exposureTime", + "asset_exif"."fileSizeInByte", + "asset_exif"."fNumber", + "asset_exif"."focalLength", + "asset_exif"."fps", + "asset_exif"."iso", + "asset_exif"."latitude", + "asset_exif"."lensModel", + "asset_exif"."livePhotoCID", + "asset_exif"."longitude", + "asset_exif"."make", + "asset_exif"."model", + "asset_exif"."modifyDate", + "asset_exif"."orientation", + "asset_exif"."profileDescription", + "asset_exif"."projectionType", + "asset_exif"."rating", + "asset_exif"."state", + "asset_exif"."tags", + "asset_exif"."timeZone" from "asset_exif" where diff --git a/server/src/repositories/shared-link.repository.ts b/server/src/repositories/shared-link.repository.ts index 1ad5d7bd77..ddfe37ef35 100644 --- a/server/src/repositories/shared-link.repository.ts +++ b/server/src/repositories/shared-link.repository.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, Selectable, ShallowDehydrateObject, sql, Updateable } from 'kysely'; +import { ExpressionBuilder, Insertable, Kysely, Selectable, ShallowDehydrateObject, sql, Updateable } from 'kysely'; import { jsonArrayFrom, jsonObjectFrom } from 'kysely/helpers/postgres'; import _ from 'lodash'; import { InjectKysely } from 'nestjs-kysely'; @@ -17,6 +17,41 @@ export type SharedLinkSearchOptions = { albumId?: string; }; +const withSharedAssets = (eb: ExpressionBuilder) => { + return eb + .selectFrom('shared_link_asset') + .whereRef('shared_link.id', '=', 'shared_link_asset.sharedLinkId') + .innerJoin('asset', 'asset.id', 'shared_link_asset.assetId') + .where('asset.deletedAt', 'is', null) + .selectAll('asset') + .orderBy('asset.fileCreatedAt', 'asc'); +}; + +export const withExifInfo = (eb: ExpressionBuilder) => { + return eb + .selectFrom('asset_exif') + .select(columns.exif) + .whereRef('asset_exif.assetId', '=', 'asset.id') + .as('exifInfo'); +}; + +const withAlbumOwner = (eb: ExpressionBuilder) => { + return eb + .selectFrom('user') + .select(columns.user) + .whereRef('user.id', '=', 'album.ownerId') + .where('user.deletedAt', 'is', null) + .as('owner'); +}; + +const withSharedLinkAlbum = (eb: ExpressionBuilder) => { + return eb + .selectFrom('album') + .selectAll('album') + .whereRef('album.id', '=', 'shared_link.albumId') + .where('album.deletedAt', 'is', null); +}; + @Injectable() export class SharedLinkRepository { constructor(@InjectKysely() private db: Kysely) {} @@ -26,35 +61,16 @@ export class SharedLinkRepository { return this.db .selectFrom('shared_link') .selectAll('shared_link') - .leftJoinLateral( - (eb) => - eb - .selectFrom('shared_link_asset') - .whereRef('shared_link.id', '=', 'shared_link_asset.sharedLinkId') - .innerJoin('asset', 'asset.id', 'shared_link_asset.assetId') - .where('asset.deletedAt', 'is', null) - .selectAll('asset') - .innerJoinLateral( - (eb) => - eb - .selectFrom('asset_exif') - .selectAll('asset_exif') - .whereRef('asset_exif.assetId', '=', 'asset.id') - .as('exifInfo'), - (join) => join.onTrue(), - ) - .select((eb) => eb.fn.toJson('exifInfo').as('exifInfo')) - .orderBy('asset.fileCreatedAt', 'asc') - .as('a'), - (join) => join.onTrue(), + .select((eb) => + jsonArrayFrom( + withSharedAssets(eb) + .innerJoinLateral(withExifInfo, (join) => join.onTrue()) + .select((eb) => eb.fn.toJson('exifInfo').as('exifInfo')), + ).as('assets'), ) .leftJoinLateral( (eb) => - eb - .selectFrom('album') - .selectAll('album') - .whereRef('album.id', '=', 'shared_link.albumId') - .where('album.deletedAt', 'is', null) + withSharedLinkAlbum(eb) .leftJoin('album_asset', 'album_asset.albumId', 'album.id') .leftJoinLateral( (eb) => @@ -63,30 +79,13 @@ export class SharedLinkRepository { .selectAll('asset') .whereRef('album_asset.assetId', '=', 'asset.id') .where('asset.deletedAt', 'is', null) - .innerJoinLateral( - (eb) => - eb - .selectFrom('asset_exif') - .selectAll('asset_exif') - .whereRef('asset_exif.assetId', '=', 'asset.id') - .as('exifInfo'), - (join) => join.onTrue(), - ) + .innerJoinLateral(withExifInfo, (join) => join.onTrue()) .select((eb) => eb.fn.toJson(eb.table('exifInfo')).as('exifInfo')) .orderBy('asset.fileCreatedAt', 'asc') .as('assets'), (join) => join.onTrue(), ) - .innerJoinLateral( - (eb) => - eb - .selectFrom('user') - .selectAll('user') - .whereRef('user.id', '=', 'album.ownerId') - .where('user.deletedAt', 'is', null) - .as('owner'), - (join) => join.onTrue(), - ) + .innerJoinLateral(withAlbumOwner, (join) => join.onTrue()) .select((eb) => eb.fn .coalesce( @@ -104,17 +103,6 @@ export class SharedLinkRepository { .as('album'), (join) => join.onTrue(), ) - .select((eb) => - eb.fn - .coalesce(eb.fn.jsonAgg('a').filterWhere('a.id', 'is not', null), sql`'[]'`) - .$castTo< - (ShallowDehydrateObject> & { - exifInfo: ShallowDehydrateObject>; - })[] - >() - .as('assets'), - ) - .groupBy(['shared_link.id', sql`"album".*`]) .select((eb) => eb.fn.toJson(eb.table('album')).$castTo | null>().as('album')) .where('shared_link.id', '=', id) .where('shared_link.userId', '=', userId) @@ -128,53 +116,13 @@ export class SharedLinkRepository { return this.db .selectFrom('shared_link') .selectAll('shared_link') + .select((eb) => jsonArrayFrom(withSharedAssets(eb).limit(1)).as('assets')) .where('shared_link.userId', '=', userId) - .select((eb) => - jsonArrayFrom( - eb - .selectFrom('shared_link_asset') - .whereRef('shared_link.id', '=', 'shared_link_asset.sharedLinkId') - .innerJoin('asset', 'asset.id', 'shared_link_asset.assetId') - .where('asset.deletedAt', 'is', null) - .selectAll('asset') - .orderBy('asset.fileCreatedAt', 'asc') - .limit(1), - ).as('assets'), - ) .leftJoinLateral( (eb) => - eb - .selectFrom('album') - .selectAll('album') - .whereRef('album.id', '=', 'shared_link.albumId') - .innerJoinLateral( - (eb) => - eb - .selectFrom('user') - .select([ - 'user.id', - 'user.email', - 'user.createdAt', - 'user.profileImagePath', - 'user.isAdmin', - 'user.shouldChangePassword', - 'user.deletedAt', - 'user.oauthId', - 'user.updatedAt', - 'user.storageLabel', - 'user.name', - 'user.quotaSizeInBytes', - 'user.quotaUsageInBytes', - 'user.status', - 'user.profileChangedAt', - ]) - .whereRef('user.id', '=', 'album.ownerId') - .where('user.deletedAt', 'is', null) - .as('owner'), - (join) => join.onTrue(), - ) + withSharedLinkAlbum(eb) + .innerJoinLateral(withAlbumOwner, (join) => join.onTrue()) .select((eb) => eb.fn.toJson('owner').as('owner')) - .where('album.deletedAt', 'is', null) .as('album'), (join) => join.onTrue(), ) @@ -283,11 +231,7 @@ export class SharedLinkRepository { .selectFrom('asset') .whereRef('asset.id', '=', 'shared_link_asset.assetId') .selectAll('asset') - .innerJoinLateral( - (eb) => - eb.selectFrom('asset_exif').whereRef('asset_exif.assetId', '=', 'asset.id').selectAll().as('exifInfo'), - (join) => join.onTrue(), - ) + .innerJoinLateral(withExifInfo, (join) => join.onTrue()) .as('assets'), (join) => join.onTrue(), ) diff --git a/server/test/medium/specs/services/shared-link.service.spec.ts b/server/test/medium/specs/services/shared-link.service.spec.ts index 5873d469a5..347e2e9506 100644 --- a/server/test/medium/specs/services/shared-link.service.spec.ts +++ b/server/test/medium/specs/services/shared-link.service.spec.ts @@ -372,6 +372,43 @@ describe(SharedLinkService.name, () => { }); describe('get', () => { + it('should return an album shared link with assets', async () => { + const { sut, ctx } = setup(); + const { user } = await ctx.newUser(); + const auth = factory.auth({ user }); + const { album } = await ctx.newAlbum({ ownerId: user.id }); + + const [{ asset: asset1 }, { asset: asset2 }] = await Promise.all([ + ctx.newAsset({ ownerId: user.id }), + ctx.newAsset({ ownerId: user.id }), + ]); + await Promise.all([ + ctx.newExif({ assetId: asset1.id, make: 'Canon' }), + ctx.newExif({ assetId: asset2.id, make: 'Canon' }), + ]); + + const sharedLinkRepo = ctx.get(SharedLinkRepository); + const sharedLink = await sharedLinkRepo.create({ + key: randomBytes(16), + id: factory.uuid(), + userId: user.id, + albumId: album.id, + allowUpload: true, + type: SharedLinkType.Album, + }); + + await sharedLinkRepo.addAssets(sharedLink.id, [asset1.id, asset2.id]); + const result = await sut.get(auth, sharedLink.id); + const assetIds = result.assets.map((asset) => asset.id); + + expect(result).toMatchObject({ + id: sharedLink.id, + album: expect.objectContaining({ id: album.id }), + }); + expect(assetIds).toHaveLength(2); + expect(assetIds).toEqual(expect.arrayContaining([asset1.id, asset2.id])); + }); + it('should not return trashed assets for an individual shared link', async () => { const { sut, ctx } = setup(); const { user } = await ctx.newUser(); From 00da7b88a19241ea055d7ead8f2a5156c258a831 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 13:52:45 -0400 Subject: [PATCH 039/156] chore(deps): update dependency @types/node to ^24.12.0 (#26966) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- cli/package.json | 2 +- e2e/package.json | 2 +- open-api/typescript-sdk/package.json | 2 +- pnpm-lock.yaml | 8 ++++---- server/package.json | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli/package.json b/cli/package.json index 9cc34ddbb9..29df0822d9 100644 --- a/cli/package.json +++ b/cli/package.json @@ -20,7 +20,7 @@ "@types/lodash-es": "^4.17.12", "@types/micromatch": "^4.0.9", "@types/mock-fs": "^4.13.1", - "@types/node": "^24.11.0", + "@types/node": "^24.12.0", "@vitest/coverage-v8": "^4.0.0", "byte-size": "^9.0.0", "cli-progress": "^3.12.0", diff --git a/e2e/package.json b/e2e/package.json index b218bf0e9a..2be3ce04b6 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -32,7 +32,7 @@ "@playwright/test": "^1.44.1", "@socket.io/component-emitter": "^3.1.2", "@types/luxon": "^3.4.2", - "@types/node": "^24.11.0", + "@types/node": "^24.12.0", "@types/pg": "^8.15.1", "@types/pngjs": "^6.0.4", "@types/supertest": "^6.0.2", diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index f9ccb934ef..1a2d6fe79d 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -19,7 +19,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^24.11.0", + "@types/node": "^24.12.0", "typescript": "^5.3.3" }, "repository": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d1c905d021..52a83a0588 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -63,7 +63,7 @@ importers: specifier: ^4.13.1 version: 4.13.4 '@types/node': - specifier: ^24.11.0 + specifier: ^24.12.0 version: 24.12.0 '@vitest/coverage-v8': specifier: ^4.0.0 @@ -217,7 +217,7 @@ importers: specifier: ^3.4.2 version: 3.7.1 '@types/node': - specifier: ^24.11.0 + specifier: ^24.12.0 version: 24.12.0 '@types/pg': specifier: ^8.15.1 @@ -320,7 +320,7 @@ importers: version: 1.2.0 devDependencies: '@types/node': - specifier: ^24.11.0 + specifier: ^24.12.0 version: 24.12.0 typescript: specifier: ^5.3.3 @@ -645,7 +645,7 @@ importers: specifier: ^2.0.0 version: 2.1.0 '@types/node': - specifier: ^24.11.0 + specifier: ^24.12.0 version: 24.12.0 '@types/nodemailer': specifier: ^7.0.0 diff --git a/server/package.json b/server/package.json index c209384aef..8c4a65bb57 100644 --- a/server/package.json +++ b/server/package.json @@ -142,7 +142,7 @@ "@types/luxon": "^3.6.2", "@types/mock-fs": "^4.13.1", "@types/multer": "^2.0.0", - "@types/node": "^24.11.0", + "@types/node": "^24.12.0", "@types/nodemailer": "^7.0.0", "@types/picomatch": "^4.0.0", "@types/pngjs": "^6.0.5", From 9f699fdfc3ec7a54900af30cb53caafa952beea9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 19:02:27 +0100 Subject: [PATCH 040/156] chore(deps): update typescript-projects (#26973) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Dietzler --- mise.toml | 2 +- package.json | 2 +- plugins/package-lock.json | 214 ++-- pnpm-lock.yaml | 1955 ++++++++++++++++++------------------- web/package.json | 2 +- 5 files changed, 1068 insertions(+), 1107 deletions(-) diff --git a/mise.toml b/mise.toml index fcfa3866e5..8991680528 100644 --- a/mise.toml +++ b/mise.toml @@ -16,7 +16,7 @@ config_roots = [ [tools] node = "24.14.0" flutter = "3.35.7" -pnpm = "10.30.3" +pnpm = "10.32.1" terragrunt = "0.99.4" opentofu = "1.11.5" java = "21.0.2" diff --git a/package.json b/package.json index f60a54f77f..e33d46df96 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "2.6.3", "description": "Monorepo for Immich", "private": true, - "packageManager": "pnpm@10.30.3+sha512.c961d1e0a2d8e354ecaa5166b822516668b7f44cb5bd95122d590dd81922f606f5473b6d23ec4a5be05e7fcd18e8488d47d978bbe981872f1145d06e9a740017", + "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be", "engines": { "pnpm": ">=10.0.0" } diff --git a/plugins/package-lock.json b/plugins/package-lock.json index 9ebaa59a02..3f004d7dba 100644 --- a/plugins/package-lock.json +++ b/plugins/package-lock.json @@ -15,9 +15,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", - "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", "cpu": [ "ppc64" ], @@ -32,9 +32,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", - "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", "cpu": [ "arm" ], @@ -49,9 +49,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", - "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", "cpu": [ "arm64" ], @@ -66,9 +66,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", - "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", "cpu": [ "x64" ], @@ -83,9 +83,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", - "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", "cpu": [ "arm64" ], @@ -100,9 +100,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", - "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", "cpu": [ "x64" ], @@ -117,9 +117,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", - "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", "cpu": [ "arm64" ], @@ -134,9 +134,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", - "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", "cpu": [ "x64" ], @@ -151,9 +151,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", - "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", "cpu": [ "arm" ], @@ -168,9 +168,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", - "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", "cpu": [ "arm64" ], @@ -185,9 +185,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", - "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", "cpu": [ "ia32" ], @@ -202,9 +202,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", - "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", "cpu": [ "loong64" ], @@ -219,9 +219,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", - "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", "cpu": [ "mips64el" ], @@ -236,9 +236,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", - "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", "cpu": [ "ppc64" ], @@ -253,9 +253,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", - "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", "cpu": [ "riscv64" ], @@ -270,9 +270,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", - "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", "cpu": [ "s390x" ], @@ -287,9 +287,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", - "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", "cpu": [ "x64" ], @@ -304,9 +304,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", - "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", "cpu": [ "arm64" ], @@ -321,9 +321,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", - "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", "cpu": [ "x64" ], @@ -338,9 +338,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", - "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", "cpu": [ "arm64" ], @@ -355,9 +355,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", - "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", "cpu": [ "x64" ], @@ -372,9 +372,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", - "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", "cpu": [ "arm64" ], @@ -389,9 +389,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", - "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", "cpu": [ "x64" ], @@ -406,9 +406,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", - "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", "cpu": [ "arm64" ], @@ -423,9 +423,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", - "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", "cpu": [ "ia32" ], @@ -440,9 +440,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", - "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", "cpu": [ "x64" ], @@ -467,9 +467,9 @@ } }, "node_modules/esbuild": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", - "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -480,32 +480,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.3", - "@esbuild/android-arm": "0.27.3", - "@esbuild/android-arm64": "0.27.3", - "@esbuild/android-x64": "0.27.3", - "@esbuild/darwin-arm64": "0.27.3", - "@esbuild/darwin-x64": "0.27.3", - "@esbuild/freebsd-arm64": "0.27.3", - "@esbuild/freebsd-x64": "0.27.3", - "@esbuild/linux-arm": "0.27.3", - "@esbuild/linux-arm64": "0.27.3", - "@esbuild/linux-ia32": "0.27.3", - "@esbuild/linux-loong64": "0.27.3", - "@esbuild/linux-mips64el": "0.27.3", - "@esbuild/linux-ppc64": "0.27.3", - "@esbuild/linux-riscv64": "0.27.3", - "@esbuild/linux-s390x": "0.27.3", - "@esbuild/linux-x64": "0.27.3", - "@esbuild/netbsd-arm64": "0.27.3", - "@esbuild/netbsd-x64": "0.27.3", - "@esbuild/openbsd-arm64": "0.27.3", - "@esbuild/openbsd-x64": "0.27.3", - "@esbuild/openharmony-arm64": "0.27.3", - "@esbuild/sunos-x64": "0.27.3", - "@esbuild/win32-arm64": "0.27.3", - "@esbuild/win32-ia32": "0.27.3", - "@esbuild/win32-x64": "0.27.3" + "@esbuild/aix-ppc64": "0.27.4", + "@esbuild/android-arm": "0.27.4", + "@esbuild/android-arm64": "0.27.4", + "@esbuild/android-x64": "0.27.4", + "@esbuild/darwin-arm64": "0.27.4", + "@esbuild/darwin-x64": "0.27.4", + "@esbuild/freebsd-arm64": "0.27.4", + "@esbuild/freebsd-x64": "0.27.4", + "@esbuild/linux-arm": "0.27.4", + "@esbuild/linux-arm64": "0.27.4", + "@esbuild/linux-ia32": "0.27.4", + "@esbuild/linux-loong64": "0.27.4", + "@esbuild/linux-mips64el": "0.27.4", + "@esbuild/linux-ppc64": "0.27.4", + "@esbuild/linux-riscv64": "0.27.4", + "@esbuild/linux-s390x": "0.27.4", + "@esbuild/linux-x64": "0.27.4", + "@esbuild/netbsd-arm64": "0.27.4", + "@esbuild/netbsd-x64": "0.27.4", + "@esbuild/openbsd-arm64": "0.27.4", + "@esbuild/openbsd-x64": "0.27.4", + "@esbuild/openharmony-arm64": "0.27.4", + "@esbuild/sunos-x64": "0.27.4", + "@esbuild/win32-arm64": "0.27.4", + "@esbuild/win32-ia32": "0.27.4", + "@esbuild/win32-x64": "0.27.4" } }, "node_modules/typescript": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 52a83a0588..75ccb8fe35 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,7 +43,7 @@ importers: devDependencies: '@eslint/js': specifier: ^10.0.0 - version: 10.0.1(eslint@10.0.2(jiti@2.6.1)) + version: 10.0.1(eslint@10.1.0(jiti@2.6.1)) '@immich/sdk': specifier: workspace:* version: link:../open-api/typescript-sdk @@ -67,7 +67,7 @@ importers: version: 24.12.0 '@vitest/coverage-v8': specifier: ^4.0.0 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) byte-size: specifier: ^9.0.0 version: 9.0.1 @@ -79,16 +79,16 @@ importers: version: 12.1.0 eslint: specifier: ^10.0.0 - version: 10.0.2(jiti@2.6.1) + version: 10.1.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.0.2(jiti@2.6.1)) + version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.0.2(jiti@2.6.1)))(eslint@10.0.2(jiti@2.6.1))(prettier@3.8.1) + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1) eslint-plugin-unicorn: specifier: ^63.0.0 - version: 63.0.0(eslint@10.0.2(jiti@2.6.1)) + version: 63.0.0(eslint@10.1.0(jiti@2.6.1)) globals: specifier: ^17.0.0 version: 17.4.0 @@ -106,16 +106,16 @@ importers: version: 5.9.3 typescript-eslint: specifier: ^8.28.0 - version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^8.0.0 - version: 8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: ^4.0.0 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest-fetch-mock: specifier: ^0.4.0 - version: 0.4.5(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.4.5(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) yaml: specifier: ^2.3.1 version: 2.8.3 @@ -194,7 +194,7 @@ importers: devDependencies: '@eslint/js': specifier: ^10.0.0 - version: 10.0.1(eslint@10.0.2(jiti@2.6.1)) + version: 10.0.1(eslint@10.1.0(jiti@2.6.1)) '@faker-js/faker': specifier: ^10.1.0 version: 10.3.0 @@ -221,7 +221,7 @@ importers: version: 24.12.0 '@types/pg': specifier: ^8.15.1 - version: 8.18.0 + version: 8.20.0 '@types/pngjs': specifier: ^6.0.4 version: 6.0.5 @@ -233,16 +233,16 @@ importers: version: 17.3.1 eslint: specifier: ^10.0.0 - version: 10.0.2(jiti@2.6.1) + version: 10.1.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.0.2(jiti@2.6.1)) + version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.0.2(jiti@2.6.1)))(eslint@10.0.2(jiti@2.6.1))(prettier@3.8.1) + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1) eslint-plugin-unicorn: specifier: ^63.0.0 - version: 63.0.0(eslint@10.0.2(jiti@2.6.1)) + version: 63.0.0(eslint@10.1.0(jiti@2.6.1)) exiftool-vendored: specifier: ^35.0.0 version: 35.13.1 @@ -278,16 +278,16 @@ importers: version: 5.9.3 typescript-eslint: specifier: ^8.28.0 - version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) utimes: specifier: ^5.2.1 version: 5.2.1(encoding@0.1.13) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 6.1.1(typescript@5.9.3)(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: ^4.0.0 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) e2e-auth-server: devDependencies: @@ -299,7 +299,7 @@ importers: version: 5.10.0 oidc-provider: specifier: ^9.0.0 - version: 9.6.1 + version: 9.7.1 tsx: specifier: ^4.20.6 version: 4.21.0 @@ -333,7 +333,7 @@ importers: version: 1.1.1 esbuild: specifier: ^0.27.0 - version: 0.27.3 + version: 0.27.4 typescript: specifier: ^5.3.2 version: 5.9.3 @@ -348,28 +348,28 @@ importers: version: 0.3.2 '@nestjs/bullmq': specifier: ^11.0.1 - version: 11.0.4(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(bullmq@5.70.4) + version: 11.0.4(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(bullmq@5.71.0) '@nestjs/common': specifier: ^11.0.4 - version: 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + version: 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': specifier: ^11.0.4 - version: 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + version: 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/platform-express': specifier: ^11.0.4 - version: 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16) + version: 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17) '@nestjs/platform-socket.io': specifier: ^11.0.4 - version: 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.16)(rxjs@7.8.2) + version: 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.17)(rxjs@7.8.2) '@nestjs/schedule': specifier: ^6.0.0 - version: 6.1.1(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16) + version: 6.1.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17) '@nestjs/swagger': specifier: ^11.0.2 - version: 11.2.6(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2) + version: 11.2.6(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2) '@nestjs/websockets': specifier: ^11.0.4 - version: 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(@nestjs/platform-socket.io@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + version: 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@nestjs/platform-socket.io@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@opentelemetry/api': specifier: ^1.9.0 version: 1.9.0 @@ -429,7 +429,7 @@ importers: version: 2.2.2 bullmq: specifier: ^5.51.0 - version: 5.70.4 + version: 5.71.0 chokidar: specifier: ^4.0.3 version: 4.0.3 @@ -465,7 +465,7 @@ importers: version: 2.1.3 geo-tz: specifier: ^8.0.0 - version: 8.1.5 + version: 8.1.6 handlebars: specifier: ^4.7.8 version: 4.7.8 @@ -477,7 +477,7 @@ importers: version: 7.14.0 ioredis: specifier: ^5.8.2 - version: 5.10.0 + version: 5.10.1 jose: specifier: ^5.10.0 version: 5.10.0 @@ -507,16 +507,16 @@ importers: version: 2.1.1 nest-commander: specifier: ^3.16.0 - version: 3.20.1(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(@types/inquirer@8.2.12)(@types/node@24.12.0)(typescript@5.9.3) + version: 3.20.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@types/inquirer@8.2.12)(@types/node@24.12.0)(typescript@5.9.3) nestjs-cls: specifier: ^5.0.0 - version: 5.4.3(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + version: 5.4.3(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) nestjs-kysely: specifier: 3.1.2 - version: 3.1.2(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(kysely@0.28.14)(reflect-metadata@0.2.2) + version: 3.1.2(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(kysely@0.28.14)(reflect-metadata@0.2.2) nestjs-otel: specifier: ^7.0.0 - version: 7.0.1(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16) + version: 7.0.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17) nodemailer: specifier: ^7.0.0 version: 7.0.13 @@ -552,10 +552,10 @@ importers: version: 7.8.2 sanitize-filename: specifier: ^1.6.3 - version: 1.6.3 + version: 1.6.4 sanitize-html: specifier: ^2.14.0 - version: 2.17.1 + version: 2.17.2 semver: specifier: ^7.6.2 version: 7.7.4 @@ -589,16 +589,16 @@ importers: devDependencies: '@eslint/js': specifier: ^10.0.0 - version: 10.0.1(eslint@10.0.2(jiti@2.6.1)) + version: 10.0.1(eslint@10.1.0(jiti@2.6.1)) '@nestjs/cli': specifier: ^11.0.2 - version: 11.0.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(@types/node@24.12.0)(esbuild@0.27.3) + version: 11.0.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(@types/node@24.12.0)(esbuild@0.27.4) '@nestjs/schematics': specifier: ^11.0.0 version: 11.0.9(chokidar@4.0.3)(typescript@5.9.3) '@nestjs/testing': specifier: ^11.0.4 - version: 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(@nestjs/platform-express@11.1.16) + version: 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@nestjs/platform-express@11.1.17) '@swc/core': specifier: ^1.4.14 version: 1.15.18(@swc/helpers@0.5.17) @@ -676,19 +676,19 @@ importers: version: 13.15.10 '@vitest/coverage-v8': specifier: ^3.0.0 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.4)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) eslint: specifier: ^10.0.0 - version: 10.0.2(jiti@2.6.1) + version: 10.1.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.0.2(jiti@2.6.1)) + version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.0.2(jiti@2.6.1)))(eslint@10.0.2(jiti@2.6.1))(prettier@3.8.1) + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1) eslint-plugin-unicorn: specifier: ^63.0.0 - version: 63.0.0(eslint@10.0.2(jiti@2.6.1)) + version: 63.0.0(eslint@10.1.0(jiti@2.6.1)) globals: specifier: ^17.0.0 version: 17.4.0 @@ -718,28 +718,28 @@ importers: version: 3.4.19(tsx@4.21.0)(yaml@2.8.3) testcontainers: specifier: ^11.0.0 - version: 11.12.0 + version: 11.13.0 typescript: specifier: ^5.9.2 version: 5.9.3 typescript-eslint: specifier: ^8.28.0 - version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) unplugin-swc: specifier: ^1.4.5 version: 1.5.9(@swc/core@1.15.18(@swc/helpers@0.5.17))(rollup@4.55.1) vite-tsconfig-paths: specifier: ^6.0.0 - version: 6.1.1(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 6.1.1(typescript@5.9.3)(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: ^3.0.0 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.4)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) web: dependencies: '@formatjs/icu-messageformat-parser': specifier: ^3.0.0 - version: 3.5.1 + version: 3.5.3 '@immich/justified-layout-wasm': specifier: ^0.4.3 version: 0.4.3 @@ -748,7 +748,7 @@ importers: version: link:../open-api/typescript-sdk '@immich/ui': specifier: ^0.69.0 - version: 0.69.0(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) + version: 0.69.0(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) '@mapbox/mapbox-gl-rtl-text': specifier: 0.3.0 version: 0.3.0 @@ -781,7 +781,7 @@ importers: version: 0.42.0 '@zoom-image/svelte': specifier: ^0.3.0 - version: 0.3.9(svelte@5.53.13) + version: 0.3.9(svelte@5.54.1) dom-to-image: specifier: ^2.6.0 version: 2.6.0 @@ -799,10 +799,10 @@ importers: version: 4.7.8 happy-dom: specifier: ^20.0.0 - version: 20.8.3 + version: 20.8.4 intl-messageformat: specifier: ^11.0.0 - version: 11.1.2 + version: 11.2.0 justified-layout: specifier: ^4.1.0 version: 4.1.0 @@ -814,7 +814,7 @@ importers: version: 3.7.2 maplibre-gl: specifier: ^5.6.2 - version: 5.19.0 + version: 5.21.0 pmtiles: specifier: ^4.3.0 version: 4.4.0 @@ -832,16 +832,16 @@ importers: version: 5.2.2 svelte-i18n: specifier: ^4.0.1 - version: 4.0.1(svelte@5.53.13) + version: 4.0.1(svelte@5.54.1) svelte-jsoneditor: specifier: ^3.10.0 - version: 3.11.0(svelte@5.53.13) + version: 3.11.0(svelte@5.54.1) svelte-maplibre: specifier: ^1.2.5 - version: 1.2.6(svelte@5.53.13) + version: 1.2.6(svelte@5.54.1) svelte-persisted-store: specifier: ^0.12.0 - version: 0.12.0(svelte@5.53.13) + version: 0.12.0(svelte@5.54.1) tabbable: specifier: ^6.2.0 version: 6.4.0 @@ -863,37 +863,37 @@ importers: devDependencies: '@eslint/js': specifier: ^10.0.0 - version: 10.0.1(eslint@10.0.2(jiti@2.6.1)) + version: 10.0.1(eslint@10.1.0(jiti@2.6.1)) '@faker-js/faker': specifier: ^10.0.0 version: 10.3.0 '@koddsson/eslint-plugin-tscompat': specifier: ^0.2.0 - version: 0.2.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + version: 0.2.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) '@socket.io/component-emitter': specifier: ^3.1.0 version: 3.1.2 '@sveltejs/adapter-static': specifier: ^3.0.8 - version: 3.0.10(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 3.0.10(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) '@sveltejs/enhanced-img': specifier: ^0.10.4 - version: 0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/kit': specifier: ^2.27.1 - version: 2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: 7.0.0 - version: 7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.2.2(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@testing-library/jest-dom': specifier: ^6.4.2 version: 6.9.1 '@testing-library/svelte': specifier: ^5.2.8 - version: 5.3.1(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.3.1(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) '@testing-library/user-event': specifier: ^14.5.2 version: 14.6.1(@testing-library/dom@10.4.1) @@ -917,25 +917,25 @@ importers: version: 1.5.6 '@vitest/coverage-v8': specifier: ^4.0.0 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) dotenv: specifier: ^17.0.0 version: 17.3.1 eslint: specifier: ^10.0.0 - version: 10.0.2(jiti@2.6.1) + version: 10.1.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.0.2(jiti@2.6.1)) + version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-compat: specifier: ^6.0.2 - version: 6.2.1(eslint@10.0.2(jiti@2.6.1)) + version: 6.2.1(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-svelte: specifier: ^3.12.4 - version: 3.15.0(eslint@10.0.2(jiti@2.6.1))(svelte@5.53.13) + version: 3.16.0(eslint@10.1.0(jiti@2.6.1))(svelte@5.54.1) eslint-plugin-unicorn: specifier: ^63.0.0 - version: 63.0.0(eslint@10.0.2(jiti@2.6.1)) + version: 63.0.0(eslint@10.1.0(jiti@2.6.1)) factory.ts: specifier: ^1.4.1 version: 1.4.2 @@ -953,19 +953,19 @@ importers: version: 4.2.0(prettier@3.8.1) prettier-plugin-svelte: specifier: ^3.3.3 - version: 3.5.1(prettier@3.8.1)(svelte@5.53.13) + version: 3.5.1(prettier@3.8.1)(svelte@5.54.1) rollup-plugin-visualizer: specifier: ^6.0.0 - version: 6.0.11(rolldown@1.0.0-rc.9)(rollup@4.55.1) + version: 6.0.11(rolldown@1.0.0-rc.10)(rollup@4.55.1) svelte: - specifier: 5.53.13 - version: 5.53.13 + specifier: 5.54.1 + version: 5.54.1 svelte-check: specifier: ^4.1.5 - version: 4.4.4(picomatch@4.0.4)(svelte@5.53.13)(typescript@5.9.3) + version: 4.4.5(picomatch@4.0.4)(svelte@5.54.1)(typescript@5.9.3) svelte-eslint-parser: specifier: ^1.3.3 - version: 1.6.0(svelte@5.53.13) + version: 1.6.0(svelte@5.54.1) tailwindcss: specifier: ^4.2.2 version: 4.2.2 @@ -974,13 +974,13 @@ importers: version: 5.9.3 typescript-eslint: specifier: ^8.45.0 - version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^8.0.0 - version: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: ^4.0.0 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages: @@ -1234,8 +1234,8 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} engines: {node: '>=6.0.0'} hasBin: true @@ -1708,8 +1708,8 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@borewit/text-codec@0.2.1': - resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==} + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} '@braintree/sanitize-url@7.1.1': resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} @@ -2264,11 +2264,11 @@ packages: resolution: {integrity: sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==} engines: {node: '>=20.0'} - '@emnapi/core@1.9.0': - resolution: {integrity: sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==} + '@emnapi/core@1.9.1': + resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} - '@emnapi/runtime@1.7.1': - resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + '@emnapi/runtime@1.9.1': + resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} '@emnapi/wasi-threads@1.2.0': resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} @@ -2285,8 +2285,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.3': - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + '@esbuild/aix-ppc64@0.27.4': + resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -2303,8 +2303,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.3': - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + '@esbuild/android-arm64@0.27.4': + resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -2321,8 +2321,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.3': - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + '@esbuild/android-arm@0.27.4': + resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -2339,8 +2339,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.3': - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + '@esbuild/android-x64@0.27.4': + resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -2357,8 +2357,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.3': - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + '@esbuild/darwin-arm64@0.27.4': + resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -2375,8 +2375,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.3': - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + '@esbuild/darwin-x64@0.27.4': + resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -2393,8 +2393,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.3': - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + '@esbuild/freebsd-arm64@0.27.4': + resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -2411,8 +2411,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.3': - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + '@esbuild/freebsd-x64@0.27.4': + resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -2429,8 +2429,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.3': - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + '@esbuild/linux-arm64@0.27.4': + resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -2447,8 +2447,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.3': - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + '@esbuild/linux-arm@0.27.4': + resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -2465,8 +2465,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.3': - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + '@esbuild/linux-ia32@0.27.4': + resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -2483,8 +2483,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.3': - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + '@esbuild/linux-loong64@0.27.4': + resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -2501,8 +2501,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.3': - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + '@esbuild/linux-mips64el@0.27.4': + resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -2519,8 +2519,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.3': - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + '@esbuild/linux-ppc64@0.27.4': + resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -2537,8 +2537,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.3': - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + '@esbuild/linux-riscv64@0.27.4': + resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -2555,8 +2555,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.3': - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + '@esbuild/linux-s390x@0.27.4': + resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -2573,8 +2573,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.3': - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + '@esbuild/linux-x64@0.27.4': + resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -2585,8 +2585,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.3': - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + '@esbuild/netbsd-arm64@0.27.4': + resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -2603,8 +2603,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.3': - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + '@esbuild/netbsd-x64@0.27.4': + resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -2615,8 +2615,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.3': - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + '@esbuild/openbsd-arm64@0.27.4': + resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -2633,8 +2633,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.3': - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + '@esbuild/openbsd-x64@0.27.4': + resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -2645,8 +2645,8 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.3': - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + '@esbuild/openharmony-arm64@0.27.4': + resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -2663,8 +2663,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.3': - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + '@esbuild/sunos-x64@0.27.4': + resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -2681,8 +2681,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.3': - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + '@esbuild/win32-arm64@0.27.4': + resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -2699,8 +2699,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.3': - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + '@esbuild/win32-ia32@0.27.4': + resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -2717,8 +2717,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.3': - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + '@esbuild/win32-x64@0.27.4': + resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2733,16 +2733,16 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.23.2': - resolution: {integrity: sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==} + '@eslint/config-array@0.23.3': + resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.2': - resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==} + '@eslint/config-helpers@0.5.3': + resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@1.1.0': - resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} + '@eslint/core@1.1.1': + resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/js@10.0.1': @@ -2754,12 +2754,12 @@ packages: eslint: optional: true - '@eslint/object-schema@3.0.2': - resolution: {integrity: sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==} + '@eslint/object-schema@3.0.3': + resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.6.0': - resolution: {integrity: sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==} + '@eslint/plugin-kit@0.6.1': + resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@extism/extism@2.0.0-rc13': @@ -2786,35 +2786,38 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@formatjs/bigdecimal@0.2.0': + resolution: {integrity: sha512-GeaxHZbUoYvHL9tC5eltHLs+1zU70aPw0s7LwqgktIzF5oMhNY4o4deEtusJMsq7WFJF3Ye2zQEzdG8beVk73w==} + '@formatjs/ecma402-abstract@2.3.6': resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==} - '@formatjs/ecma402-abstract@3.1.1': - resolution: {integrity: sha512-jhZbTwda+2tcNrs4kKvxrPLPjx8QsBCLCUgrrJ/S+G9YrGHWLhAyFMMBHJBnBoOwuLHd7L14FgYudviKaxkO2Q==} + '@formatjs/ecma402-abstract@3.2.0': + resolution: {integrity: sha512-dHnqHgBo6GXYGRsepaE1wmsC2etaivOWd5VaJstZd+HI2zR3DCUjbDVZRtoPGkkXZmyHvBwrdEUuqfvzhF/DtQ==} '@formatjs/fast-memoize@2.2.7': resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} - '@formatjs/fast-memoize@3.1.0': - resolution: {integrity: sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==} + '@formatjs/fast-memoize@3.1.1': + resolution: {integrity: sha512-CbNbf+tlJn1baRnPkNePnBqTLxGliG6DDgNa/UtV66abwIjwsliPMOt0172tzxABYzSuxZBZfcp//qI8AvBWPg==} '@formatjs/icu-messageformat-parser@2.11.4': resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==} - '@formatjs/icu-messageformat-parser@3.5.1': - resolution: {integrity: sha512-sSDmSvmmoVQ92XqWb499KrIhv/vLisJU8ITFrx7T7NZHUmMY7EL9xgRowAosaljhqnj/5iufG24QrdzB6X3ItA==} + '@formatjs/icu-messageformat-parser@3.5.3': + resolution: {integrity: sha512-HJWZ9S6JWey6iY5+YXE3Kd0ofWU1sC2KTTp56e1168g/xxWvVvr8k9G4fexIgwYV9wbtjY7kGYK5FjoWB3B2OQ==} '@formatjs/icu-skeleton-parser@1.8.16': resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==} - '@formatjs/icu-skeleton-parser@2.1.1': - resolution: {integrity: sha512-PSFABlcNefjI6yyk8f7nyX1DC7NHmq6WaCHZLySEXBrXuLOB2f935YsnzuPjlz+ibhb9yWTdPeVX1OVcj24w2Q==} + '@formatjs/icu-skeleton-parser@2.1.3': + resolution: {integrity: sha512-9mFp8TJ166ZM2pcjKwsBWXrDnOJGT7vMEScVgLygUODPOsE8S6f/FHoacvrlHK1B4dYZk8vSCNruyPU64AfgJQ==} '@formatjs/intl-localematcher@0.6.2': resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} - '@formatjs/intl-localematcher@0.8.1': - resolution: {integrity: sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==} + '@formatjs/intl-localematcher@0.8.2': + resolution: {integrity: sha512-q05KMYGJLyqFNFtIb8NhWLF5X3aK/k0wYt7dnRFuy6aLQL+vUwQ1cg5cO4qawEiINybeCPXAWlprY2mSBjSXAQ==} '@fortawesome/fontawesome-common-types@7.1.0': resolution: {integrity: sha512-l/BQM7fYntsCI//du+6sEnHOP6a74UixFyOYUyz2DLMXKx+6DEhfR3F2NYGE45XH1JJuIamacb4IZs9S0ZOWLA==} @@ -3296,8 +3299,8 @@ packages: resolution: {integrity: sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==} engines: {node: '>= 14.0.0'} - '@koa/router@15.3.0': - resolution: {integrity: sha512-s87hWJjFYky2Z97u8jzah73sSHp4IZivD/2PZCuspHRvcKU69OPLoBIbKigVlBmS50yFTh9GHFfr1hDag4+wXw==} + '@koa/router@15.4.0': + resolution: {integrity: sha512-vKYlXtoCfcAN8z4dHiveYX55rTYOgHEYJNumK1WM9ZAwaArhreGVkyC1LTMGfUQUJyIO/SbwRFBOHeOCY8/MaQ==} engines: {node: '>= 20'} peerDependencies: koa: ^2.0.0 || ^3.0.0 @@ -3327,10 +3330,6 @@ packages: resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} - '@mapbox/geojson-rewind@0.5.2': - resolution: {integrity: sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==} - hasBin: true - '@mapbox/jsonlint-lines-primitives@2.0.2': resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} engines: {node: '>= 0.6'} @@ -3361,12 +3360,15 @@ packages: '@maplibre/geojson-vt@5.0.4': resolution: {integrity: sha512-KGg9sma45S+stfH9vPCJk1J0lSDLWZgCT9Y8u8qWZJyjFlP8MNP1WGTxIMYJZjDvVT3PDn05kN1C95Sut1HpgQ==} - '@maplibre/maplibre-gl-style-spec@24.6.0': - resolution: {integrity: sha512-+lxMYE+DvInshwVrqSQ3CkW9YRwVlRXeDzfthVOa1c9pwK5d7YgCwhgFwlSmjJLvTXn4gL8EvPUGT620sk2Pzg==} + '@maplibre/geojson-vt@6.0.4': + resolution: {integrity: sha512-HYv3POhMRCdhP3UPPATM/hfcy6/WuVIf5FKboH8u/ZuFMTnAIcSVlq5nfOqroLokd925w2QtE7YwquFOIacwVQ==} + + '@maplibre/maplibre-gl-style-spec@24.7.0': + resolution: {integrity: sha512-Ed7rcKYU5iELfablg9Mj+TVCsXsPBgdMyXPRAxb2v7oWg9YJnpQdZ5msDs1LESu/mtXy3Z48Vdppv2t/x5kAhw==} hasBin: true - '@maplibre/mlt@1.1.6': - resolution: {integrity: sha512-rgtY3x65lrrfXycLf6/T22ZnjTg5WgIOsptOIoCaMZy4O4UAKTyZlYY0h6v8le721pTptF94U65yMDQkug+URw==} + '@maplibre/mlt@1.1.8': + resolution: {integrity: sha512-8vtfYGidr1rNkv5IwIoU2lfe3Oy+Wa8HluzQYcQi9cveU9K3pweAal/poQj4GJ0K/EW4bTQp2wVAs09g2yDRZg==} '@maplibre/vt-pbf@4.3.0': resolution: {integrity: sha512-jIvp8F5hQCcreqOOpEt42TJMUlsrEcpf/kI1T2v85YrQRV6PPXUcEXUg5karKtH6oh47XJZ4kHu56pUkOuqA7w==} @@ -3463,8 +3465,8 @@ packages: '@swc/core': optional: true - '@nestjs/common@11.1.16': - resolution: {integrity: sha512-JSIeW+USuMJkkcNbiOdcPkVCeI3TSnXstIVEPpp3HiaKnPRuSbUUKm9TY9o/XpIcPHWUOQItAtC5BiAwFdVITQ==} + '@nestjs/common@11.1.17': + resolution: {integrity: sha512-hLODw5Abp8OQgA+mUO4tHou4krKgDtUcM9j5Ihxncst9XeyxYBTt2bwZm4e4EQr5E352S4Fyy6V3iFx9ggxKAg==} peerDependencies: class-transformer: '>=0.4.1' class-validator: '>=0.13.2' @@ -3476,8 +3478,8 @@ packages: class-validator: optional: true - '@nestjs/core@11.1.16': - resolution: {integrity: sha512-tXWXyCiqWthelJjrE0KLFjf0O98VEt+WPVx5CrqCf+059kIxJ8y1Vw7Cy7N4fwQafWNrmFL2AfN87DDMbVAY0w==} + '@nestjs/core@11.1.17': + resolution: {integrity: sha512-lD5mAYekTTurF3vDaa8C2OKPnjiz4tsfxIc5XlcSUzOhkwWf6Ay3HKvt6FmvuWQam6uIIHX52Clg+e6tAvf/cg==} engines: {node: '>= 20'} peerDependencies: '@nestjs/common': ^11.0.0 @@ -3507,14 +3509,14 @@ packages: class-validator: optional: true - '@nestjs/platform-express@11.1.16': - resolution: {integrity: sha512-IOegr5+ZfUiMKgk+garsSU4MOkPRhm46e6w8Bp1GcO4vCdl9Piz6FlWAzKVfa/U3Hn/DdzSVJOW3TWcQQFdBDw==} + '@nestjs/platform-express@11.1.17': + resolution: {integrity: sha512-mAf4eOsSBsTOn/VbrUO1gsjW6dVh91qqXPMXun4dN8SnNjf7PTQagM9o8d6ab8ZBpNe6UdZftdrZoDetU+n4Qg==} peerDependencies: '@nestjs/common': ^11.0.0 '@nestjs/core': ^11.0.0 - '@nestjs/platform-socket.io@11.1.16': - resolution: {integrity: sha512-3fYQTi8F2hb7HDkes/ArGhY8lkjB/Df29F5CN4cjbk4cmfpRVy89p6N1BC7PjVOHMAzdwqeX8FabqspdSAnywA==} + '@nestjs/platform-socket.io@11.1.17': + resolution: {integrity: sha512-BSOAsENdmTtsnDL0hb4takbWzPy9WoPybjlM57ab3/rQgm0biMFYUupH2uzmCjmmIXJL/EFbAWznVl8xw2Sa6Q==} peerDependencies: '@nestjs/common': ^11.0.0 '@nestjs/websockets': ^11.0.0 @@ -3548,8 +3550,8 @@ packages: class-validator: optional: true - '@nestjs/testing@11.1.16': - resolution: {integrity: sha512-E7/aUCxzeMSJV80L5GWGIuiMyR/1ncS7uOIetAImfbS4ATE1/h2GBafk0qpk+vjFtPIbtoh9BWDGICzUEU5jDA==} + '@nestjs/testing@11.1.17': + resolution: {integrity: sha512-lNffw+z+2USewmw4W0tsK+Rq94A2N4PiHbcqoRUu5y8fnqxQeIWGHhjo5BFCqj7eivqJBhT7WdRydxVq4rAHzg==} peerDependencies: '@nestjs/common': ^11.0.0 '@nestjs/core': ^11.0.0 @@ -3561,8 +3563,8 @@ packages: '@nestjs/platform-express': optional: true - '@nestjs/websockets@11.1.16': - resolution: {integrity: sha512-kfLhCFsq6139JVFCQpbFB6LOEjZzdpE7JzXsZtRbVjqmsgTKVSIh8gKRgzpcq27rbLNqHhhZavboOltOfSxZow==} + '@nestjs/websockets@11.1.17': + resolution: {integrity: sha512-YbwQ0QfVj0lxkKQhdIIgk14ZSVWDqGk1J8nNSN6SLjf36sVv58Ma5ro+dtQua8wj3l2Ub7JJCVFixEhKtYc/rQ==} peerDependencies: '@nestjs/common': ^11.0.0 '@nestjs/core': ^11.0.0 @@ -3813,12 +3815,8 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 - '@oxc-project/runtime@0.115.0': - resolution: {integrity: sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@oxc-project/types@0.115.0': - resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} + '@oxc-project/types@0.120.0': + resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==} '@paralleldrive/cuid2@2.3.1': resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==} @@ -4134,103 +4132,103 @@ packages: '@codemirror/state': ^6.0.0 '@codemirror/view': ^6.0.0 - '@rolldown/binding-android-arm64@1.0.0-rc.9': - resolution: {integrity: sha512-lcJL0bN5hpgJfSIz/8PIf02irmyL43P+j1pTCfbD1DbLkmGRuFIA4DD3B3ZOvGqG0XiVvRznbKtN0COQVaKUTg==} + '@rolldown/binding-android-arm64@1.0.0-rc.10': + resolution: {integrity: sha512-jOHxwXhxmFKuXztiu1ORieJeTbx5vrTkcOkkkn2d35726+iwhrY1w/+nYY/AGgF12thg33qC3R1LMBF5tHTZHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.9': - resolution: {integrity: sha512-J7Zk3kLYFsLtuH6U+F4pS2sYVzac0qkjcO5QxHS7OS7yZu2LRs+IXo+uvJ/mvpyUljDJ3LROZPoQfgBIpCMhdQ==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.10': + resolution: {integrity: sha512-gED05Teg/vtTZbIJBc4VNMAxAFDUPkuO/rAIyyxZjTj1a1/s6z5TII/5yMGZ0uLRCifEtwUQn8OlYzuYc0m70w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.9': - resolution: {integrity: sha512-iwtmmghy8nhfRGeNAIltcNXzD0QMNaaA5U/NyZc1Ia4bxrzFByNMDoppoC+hl7cDiUq5/1CnFthpT9n+UtfFyg==} + '@rolldown/binding-darwin-x64@1.0.0-rc.10': + resolution: {integrity: sha512-rI15NcM1mA48lqrIxVkHfAqcyFLcQwyXWThy+BQ5+mkKKPvSO26ir+ZDp36AgYoYVkqvMcdS8zOE6SeBsR9e8A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.9': - resolution: {integrity: sha512-DLFYI78SCiZr5VvdEplsVC2Vx53lnA4/Ga5C65iyldMVaErr86aiqCoNBLl92PXPfDtUYjUh+xFFor40ueNs4Q==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.10': + resolution: {integrity: sha512-XZRXHdTa+4ME1MuDVp021+doQ+z6Ei4CCFmNc5/sKbqb8YmkiJdj8QKlV3rCI0AJtAeSB5n0WGPuJWNL9p/L2w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': - resolution: {integrity: sha512-CsjTmTwd0Hri6iTw/DRMK7kOZ7FwAkrO4h8YWKoX/kcj833e4coqo2wzIFywtch/8Eb5enQ/lwLM7w6JX1W5RQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10': + resolution: {integrity: sha512-R0SQMRluISSLzFE20sPWYHVmJdDQnRyc/FzSCN72BqQmh2SOZUFG+N3/vBZpR4C6WpEUVYJLrYUXaj43sJsNLA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': - resolution: {integrity: sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-Y1reMrV/o+cwpduYhJuOE3OMKx32RMYCidf14y+HssARRmhDuWXJ4yVguDg2R/8SyyGNo+auzz64LnPK9Hq6jg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': - resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10': + resolution: {integrity: sha512-vELN+HNb2IzuzSBUOD4NHmP9yrGwl1DVM29wlQvx1OLSclL0NgVWnVDKl/8tEks79EFek/kebQKnNJkIAA4W2g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': - resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-ZqrufYTgzxbHwpqOjzSsb0UV/aV2TFIY5rP8HdsiPTv/CuAgCRjM6s9cYFwQ4CNH+hf9Y4erHW1GjZuZ7WoI7w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': - resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-gSlmVS1FZJSRicA6IyjoRoKAFK7IIHBs7xJuHRSmjImqk3mPPWbR7RhbnfH2G6bcmMEllCt2vQ/7u9e6bBnByg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': - resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-eOCKUpluKgfObT2pHjztnaWEIbUabWzk3qPZ5PuacuPmr4+JtQG4k2vGTY0H15edaTnicgU428XW/IH6AimcQw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': - resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.10': + resolution: {integrity: sha512-Xdf2jQbfQowJnLcgYfD/m0Uu0Qj5OdxKallD78/IPPfzaiaI4KRAwZzHcKQ4ig1gtg1SuzC7jovNiM2TzQsBXA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': - resolution: {integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.10': + resolution: {integrity: sha512-o1hYe8hLi1EY6jgPFyxQgQ1wcycX+qz8eEbVmot2hFkgUzPxy9+kF0u0NIQBeDq+Mko47AkaFFaChcvZa9UX9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': - resolution: {integrity: sha512-rgFN6sA/dyebil3YTlL2evvi/M+ivhfnyxec7AccTpRPccno/rPoNlqybEZQBkcbZu8Hy+eqNJCqfBR8P7Pg8g==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.10': + resolution: {integrity: sha512-Ugv9o7qYJudqQO5Y5y2N2SOo6S4WiqiNOpuQyoPInnhVzCY+wi/GHltcLHypG9DEUYMB0iTB/huJrpadiAcNcA==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': - resolution: {integrity: sha512-lHVNUG/8nlF1IQk1C0Ci574qKYyty2goMiPlRqkC5R+3LkXDkL5Dhx8ytbxq35m+pkHVIvIxviD+TWLdfeuadA==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10': + resolution: {integrity: sha512-7UODQb4fQUNT/vmgDZBl3XOBAIOutP5R3O/rkxg0aLfEGQ4opbCgU5vOw/scPe4xOqBwL9fw7/RP1vAMZ6QlAQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': - resolution: {integrity: sha512-G0oA4+w1iY5AGi5HcDTxWsoxF509hrFIPB2rduV5aDqS9FtDg1CAfa7V34qImbjfhIcA8C+RekocJZA96EarwQ==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10': + resolution: {integrity: sha512-PYxKHMVHOb5NJuDL53vBUl1VwUjymDcYI6rzpIni0C9+9mTiJedvUxSk7/RPp7OOAm3v+EjgMu9bIy3N6b408w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.9': - resolution: {integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==} + '@rolldown/pluginutils@1.0.0-rc.10': + resolution: {integrity: sha512-UkVDEFk1w3mveXeKgaTuYfKWtPbvgck1dT8TUG3bnccrH0XtLTuAyfCoks4Q/M5ZGToSVJTIQYCzy2g/atAOeg==} '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} @@ -4446,8 +4444,8 @@ packages: svelte: ^5.0.0 vite: ^6.3.0 || >=7.0.0 - '@sveltejs/kit@2.53.4': - resolution: {integrity: sha512-iAIPEahFgDJJyvz8g0jP08KvqnM6JvdW8YfsygZ+pMeMvyM2zssWMltcsotETvjSZ82G3VlitgDtBIvpQSZrTA==} + '@sveltejs/kit@2.55.0': + resolution: {integrity: sha512-MdFRjevVxmAknf2NbaUkDF16jSIzXMWd4Nfah0Qp8TtQVoSp3bV4jKt8mX7z7qTUTWvgSaxtR0EG5WJf53gcuA==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -4771,14 +4769,14 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} - '@turf/boolean-point-in-polygon@7.3.2': - resolution: {integrity: sha512-PAfPDQ0TW1+VLgZ7tReTSyZ/X41AW7/nMRQxVpY+h/aG7JomZJ779lojnODT4dWCn3IMTA3xD2dDDfVYBAQMYg==} + '@turf/boolean-point-in-polygon@7.3.4': + resolution: {integrity: sha512-v/4hfyY90Vz9cDgs2GwjQf+Lft8o7mNCLJOTz/iv8SHAIgMMX0czEoIaNVOJr7tBqPqwin1CGwsncrkf5C9n8Q==} - '@turf/helpers@7.3.2': - resolution: {integrity: sha512-5HFN42rgWjSobdTMxbuq+ZdXPcqp1IbMgFYULTLCplEQM3dXhsyRFe7DCss4Eiw12iW3q6Z5UeTNVfITsE5lgA==} + '@turf/helpers@7.3.4': + resolution: {integrity: sha512-U/S5qyqgx3WTvg4twaH0WxF3EixoTCfDsmk98g1E3/5e2YKp7JKYZdz0vivsS5/UZLJeZDEElOSFH4pUgp+l7g==} - '@turf/invariant@7.3.2': - resolution: {integrity: sha512-brGmL1EFhZH/YNXhq6S+8sPWBEnmvEyxMWJO8bUNOFZyWHYiRTwxQHZM+An1blkbQ77PiEzsdNAspZqE1j7YKA==} + '@turf/invariant@7.3.4': + resolution: {integrity: sha512-88Eo4va4rce9sNZs6XiMJowWkikM3cS2TBhaCKlU+GFHdNf8PFEpiU42VDU8q5tOF6/fu21Rvlke5odgOGW4AQ==} '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -5109,8 +5107,8 @@ packages: '@types/node@24.12.0': resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==} - '@types/node@25.4.0': - resolution: {integrity: sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==} + '@types/node@25.5.0': + resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} '@types/nodemailer@7.0.11': resolution: {integrity: sha512-E+U4RzR2dKrx+u3N4DlsmLaDC6mMZOM/TPROxA0UAPiTgI0y4CEFBmZE+coGWTjakDriRsXG368lNk1u9Q0a2g==} @@ -5127,8 +5125,8 @@ packages: '@types/pg@8.15.6': resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==} - '@types/pg@8.18.0': - resolution: {integrity: sha512-gT+oueVQkqnj6ajGJXblFR4iavIXWsGAFCk3dP4Kki5+a9R4NMt0JARdk6s8cUKcfUoqP5dAtDSLU8xYUTFV+Q==} + '@types/pg@8.20.0': + resolution: {integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==} '@types/picomatch@4.0.2': resolution: {integrity: sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==} @@ -5241,63 +5239,63 @@ packages: '@types/yargs@17.0.35': resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typescript-eslint/eslint-plugin@8.56.1': - resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==} + '@typescript-eslint/eslint-plugin@8.57.1': + resolution: {integrity: sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.56.1 + '@typescript-eslint/parser': ^8.57.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.56.1': - resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==} + '@typescript-eslint/parser@8.57.1': + resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.56.1': - resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==} + '@typescript-eslint/project-service@8.57.1': + resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.56.1': - resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} + '@typescript-eslint/scope-manager@8.57.1': + resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.56.1': - resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==} + '@typescript-eslint/tsconfig-utils@8.57.1': + resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.56.1': - resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==} + '@typescript-eslint/type-utils@8.57.1': + resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.56.1': - resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} + '@typescript-eslint/types@8.57.1': + resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.56.1': - resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} + '@typescript-eslint/typescript-estree@8.57.1': + resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.56.1': - resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} + '@typescript-eslint/utils@8.57.1': + resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.56.1': - resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} + '@typescript-eslint/visitor-keys@8.57.1': + resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -5316,11 +5314,11 @@ packages: '@vitest/browser': optional: true - '@vitest/coverage-v8@4.0.18': - resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==} + '@vitest/coverage-v8@4.1.0': + resolution: {integrity: sha512-nDWulKeik2bL2Va/Wl4x7DLuTKAXa906iRFooIRPR+huHkcvp9QDkPQ2RJdmjOFrqOqvNfoSQLF68deE3xC3CQ==} peerDependencies: - '@vitest/browser': 4.0.18 - vitest: 4.0.18 + '@vitest/browser': 4.1.0 + vitest: 4.1.0 peerDependenciesMeta: '@vitest/browser': optional: true @@ -5328,8 +5326,8 @@ packages: '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/expect@4.0.18': - resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} + '@vitest/expect@4.1.0': + resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==} '@vitest/mocker@3.2.4': resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} @@ -5342,11 +5340,11 @@ packages: vite: optional: true - '@vitest/mocker@4.0.18': - resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} + '@vitest/mocker@4.1.0': + resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==} peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: msw: optional: true @@ -5356,32 +5354,32 @@ packages: '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/pretty-format@4.0.18': - resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} + '@vitest/pretty-format@4.1.0': + resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==} '@vitest/runner@3.2.4': resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/runner@4.0.18': - resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} + '@vitest/runner@4.1.0': + resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==} '@vitest/snapshot@3.2.4': resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/snapshot@4.0.18': - resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} + '@vitest/snapshot@4.1.0': + resolution: {integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==} '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/spy@4.0.18': - resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} + '@vitest/spy@4.1.0': + resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==} '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vitest/utils@4.0.18': - resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + '@vitest/utils@4.1.0': + resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -5667,6 +5665,9 @@ packages: ast-v8-to-istanbul@0.3.12: resolution: {integrity: sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==} + ast-v8-to-istanbul@1.0.0: + resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} + astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true @@ -5697,8 +5698,8 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} - b4a@1.7.3: - resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} + b4a@1.8.0: + resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} peerDependencies: react-native-b4a: '*' peerDependenciesMeta: @@ -5751,8 +5752,8 @@ packages: bare-abort-controller: optional: true - bare-fs@4.5.4: - resolution: {integrity: sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==} + bare-fs@4.5.6: + resolution: {integrity: sha512-1QovqDrR80Pmt5HPAsMsXTCFcDYr+NSUKW6nd6WO5v0JBmnItc/irNRzm2KOQ5oZ69P37y+AMujNyNtG+1Rggw==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -5760,26 +5761,29 @@ packages: bare-buffer: optional: true - bare-os@3.6.2: - resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} + bare-os@3.8.0: + resolution: {integrity: sha512-Dc9/SlwfxkXIGYhvMQNUtKaXCaGkZYGcd1vuNUUADVqzu4/vQfvnMkYYOUnt2VwQ2AqKr/8qAVFRtwETljgeFg==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.8.0: - resolution: {integrity: sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==} + bare-stream@2.11.0: + resolution: {integrity: sha512-Y/+iQ49fL3rIn6w/AVxI/2+BRrpmzJvdWt5Jv8Za6Ngqc6V227c+pYjYYgLdpR3MwQ9ObVXD0ZrqoBztakM0rw==} peerDependencies: + bare-abort-controller: '*' bare-buffer: '*' bare-events: '*' peerDependenciesMeta: + bare-abort-controller: + optional: true bare-buffer: optional: true bare-events: optional: true - bare-url@2.3.2: - resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} + bare-url@2.4.0: + resolution: {integrity: sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -5855,8 +5859,8 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - brace-expansion@5.0.4: - resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -5892,8 +5896,8 @@ packages: resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} engines: {node: '>=18.20'} - bullmq@5.70.4: - resolution: {integrity: sha512-S58YT/tGdhc4pEPcIahtZRBR1TcTLpss1UKiXimF+Vy4yZwF38pW2IvhHqs4j4dEbZqDt8oi0jGGN/WYQHbPDg==} + bullmq@5.71.0: + resolution: {integrity: sha512-aeNWh4drsafSKnAJeiNH/nZP/5O8ZdtdMbnOPZmpjXj7NZUP5YC901U3bIH41iZValm7d1i3c34ojv7q31m30w==} bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} @@ -6898,16 +6902,16 @@ packages: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} - docker-compose@1.3.1: - resolution: {integrity: sha512-rF0wH69G3CCcmkN9J1RVMQBaKe8o77LT/3XmqcLIltWWVxcWAzp2TnO7wS3n/umZHN3/EVrlT3exSBMal+Ou1w==} + docker-compose@1.3.3: + resolution: {integrity: sha512-LzcZ6Dk+Ps5SbLZ4iqAcagzYFZ+bBWQ52uzUNfORNkXyash2EjHZI4REf1ccG19emroS0iWElfQN8RQJ8HOIIg==} engines: {node: '>= 6.0.0'} - docker-modem@5.0.6: - resolution: {integrity: sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==} + docker-modem@5.0.7: + resolution: {integrity: sha512-XJgGhoR/CLpqshm4d3L7rzH6t8NgDFUIIpztYlLHIApeJjMZKYJMz2zxPsYxnejq5h3ELYSw/RBsi3t5h7gNTA==} engines: {node: '>= 8.0'} - dockerode@4.0.9: - resolution: {integrity: sha512-iND4mcOWhPaCNh54WmK/KoSb35AFqPAUWFMffTQcp52uQt36b5uNwEJTSXntJZBbeGad72Crbi/hvDIv6us/6Q==} + dockerode@4.0.10: + resolution: {integrity: sha512-8L/P9JynLBiG7/coiA4FlQXegHltRqS0a+KqI44P1zgQh8QLHTg7FKOwhkBgSJwZTeHsq30WRoVFLuwkfK0YFg==} engines: {node: '>= 8.0'} docusaurus-lunr-search@3.6.0: @@ -7110,8 +7114,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.3: - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + esbuild@0.27.4: + resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} engines: {node: '>=18'} hasBin: true @@ -7164,8 +7168,8 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-svelte@3.15.0: - resolution: {integrity: sha512-QKB7zqfuB8aChOfBTComgDptMf2yxiJx7FE04nneCmtQzgTHvY8UJkuh8J2Rz7KB9FFV9aTHX6r7rdYGvG8T9Q==} + eslint-plugin-svelte@3.16.0: + resolution: {integrity: sha512-DJXxqpYZUxcE0SfYo8EJzV2ZC+zAD7fJp1n1HwcEMRR1cOEUYvjT9GuzJeNghMjgb7uxuK3IJAzI+x6zzUxO5A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.1 || ^9.0.0 || ^10.0.0 @@ -7188,8 +7192,8 @@ packages: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-scope@9.1.1: - resolution: {integrity: sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==} + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: @@ -7204,8 +7208,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.0.2: - resolution: {integrity: sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==} + eslint@10.1.0: + resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -7225,8 +7229,8 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@11.1.1: - resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==} + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} esprima@4.0.1: @@ -7445,8 +7449,8 @@ packages: file-source@0.6.1: resolution: {integrity: sha512-1R1KneL7eTXmXfKxC10V/9NeGOdbsAXJ+lQ//fvvcHUgtaZcZDWNJNblxAoVOyV1cj45pOtUrR3vZTBwqcW8XA==} - file-type@21.3.0: - resolution: {integrity: sha512-8kPJMIGz1Yt/aPEwOsrR97ZyZaD1Iqm8PClb1nYFclUCkBi0Ma5IsYNQzvSFS9ib51lWyIw5mIT9rWzI/xjpzA==} + file-type@21.3.2: + resolution: {integrity: sha512-DLkUvGwep3poOV2wpzbHCOnSKGk1LzyXTv+aHFgN2VFl96wnp8YA9YjO2qPzg5PuL8q/SW9Pdi6WTkYOIh995w==} engines: {node: '>=20'} fill-range@7.1.1: @@ -7489,8 +7493,8 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} fluent-ffmpeg@2.1.3: resolution: {integrity: sha512-Be3narBNt2s6bsaqP6Jzq91heDgOEaDCJAXcE3qcma/EJBSy5FB4cvO31XBInuAuKBx8Kptf8dkhjK0IOru39Q==} @@ -7604,8 +7608,8 @@ packages: geo-coordinates-parser@1.7.4: resolution: {integrity: sha512-gVGxBW+s1csexXVMf5bIwz3TH9n4sCEglOOOqmrPk8YazUI5f79jCowKjTw05m/0h1//3+Z2m/nv8IIozgZyUw==} - geo-tz@8.1.5: - resolution: {integrity: sha512-C0g6Zyo/4/wtaONcprVq6gHq4LnbheC7HXXi0nZMG8lbxqvOj8IZcTolCd0MeOmBekXnyXKKeDlh6g2o4Yy3qw==} + geo-tz@8.1.6: + resolution: {integrity: sha512-6YEper1rtHi1l3ZS99oy9ZBvrBO4qsLzvQwZoxYtV3fyxPuxh7yqiOUWRVs1bzSj693EXEO4k60jKXQmkY/JnQ==} engines: {node: '>=16'} geobuf@3.0.2: @@ -7631,8 +7635,8 @@ packages: get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - get-port@7.1.0: - resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} + get-port@7.2.0: + resolution: {integrity: sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==} engines: {node: '>=16'} get-proto@1.0.1: @@ -7755,8 +7759,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.8.3: - resolution: {integrity: sha512-lMHQRRwIPyJ70HV0kkFT7jH/gXzSI7yDkQFe07E2flwmNDFoWUTRMKpW2sglsnpeA7b6S2TJPp98EbQxai8eaQ==} + happy-dom@20.8.4: + resolution: {integrity: sha512-GKhjq4OQCYB4VLFBzv8mmccUadwlAusOZOI7hC1D9xDIT5HhzkJK17c4el2f6R6C715P9xB4uiMxeKUa2nHMwQ==} engines: {node: '>=20.0.0'} has-flag@4.0.0: @@ -8085,14 +8089,14 @@ packages: intl-messageformat@10.7.18: resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==} - intl-messageformat@11.1.2: - resolution: {integrity: sha512-ucSrQmZGAxfiBHfBRXW/k7UC8MaGFlEj4Ry1tKiDcmgwQm1y3EDl40u+4VNHYomxJQMJi9NEI3riDRlth96jKg==} + intl-messageformat@11.2.0: + resolution: {integrity: sha512-IhghAA8n4KSlXuWKzYsWyWb82JoYTzShfyvdSF85oJPnNOjvv4kAo7S7Jtkm3/vJ53C7dQNRO+Gpnj3iWgTjBQ==} invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ioredis@5.10.0: - resolution: {integrity: sha512-HVBe9OFuqs+Z6n64q09PQvP1/R4Bm+30PAyyD4wIEqssh3v9L21QjCVk4kRLucMBcDokJTcLjsGeVRlq/nH6DA==} + ioredis@5.10.1: + resolution: {integrity: sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA==} engines: {node: '>=12.22.0'} ioredis@5.9.3: @@ -8361,8 +8365,8 @@ packages: jose@5.10.0: resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + jose@6.2.2: + resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -8494,8 +8498,8 @@ packages: koa-compose@4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} - koa@3.1.1: - resolution: {integrity: sha512-KDDuvpfqSK0ZKEO2gCPedNjl5wYpfj+HNiuVRlbhd1A88S3M0ySkdf2V/EJ4NWt5dwh5PXCdcenrKK2IQJAxsg==} + koa@3.1.2: + resolution: {integrity: sha512-2LOQnFKu3m0VxpE+5sb5+BRTSKrXmNxGgxVRiKwD9s5KQB1zID/FRXhtzeV7RT1L2GVpdEEAfVuclFOMGl1ikA==} engines: {node: '>= 18'} kysely-postgres-js@3.0.0: @@ -8794,8 +8798,8 @@ packages: resolution: {integrity: sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==} engines: {node: ^20.17.0 || >=22.9.0} - maplibre-gl@5.19.0: - resolution: {integrity: sha512-REhYUN8gNP3HlcIZS6QU2uy8iovl31cXsrNDkCcqWSQbCkcpdYLczqDz5PVIwNH42UQNyvukjes/RoHPDrOUmQ==} + maplibre-gl@5.21.0: + resolution: {integrity: sha512-n0v4J/Ge0EG8ix/z3TY3ragtJYMqzbtSnj1riOC0OwQbzwp0lUF2maS1ve1z8HhitQCKtZZiZJhb8to36aMMfQ==} engines: {node: '>=16.14.0', npm: '>=8.1.0'} mark.js@8.11.1: @@ -9134,12 +9138,15 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} - minimatch@9.0.6: - resolution: {integrity: sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -9260,16 +9267,16 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.25.0: - resolution: {integrity: sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==} + nan@2.26.2: + resolution: {integrity: sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==} nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.6: - resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} + nanoid@5.1.7: + resolution: {integrity: sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ==} engines: {node: ^18 || >=20} hasBin: true @@ -9476,8 +9483,8 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - oidc-provider@9.6.1: - resolution: {integrity: sha512-8AtFXE4gEV6MLd8Re78VhqGNjBm/SUw0fUxrP2XwQc+5DZKw6GyuTuy2M4jkidpH3jRrhtkkqQpXlxD1Awi6tg==} + oidc-provider@9.7.1: + resolution: {integrity: sha512-yzOdAYxQEisPspCy6xVPrK++bYz71011uylwhR3XLDfb3r0NfVuJStApQvXoeMXj928nkZoxRTBC4ECYM94KOw==} on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} @@ -9666,8 +9673,8 @@ packages: path-source@0.1.3: resolution: {integrity: sha512-dWRHm5mIw5kw0cs3QZLNmpUWty48f5+5v9nWD2dw3Y0Hf+s01Ag8iJEWV0Sm0kocE8kK27DrIowha03e1YR+Qw==} - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@0.1.13: + resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} path-to-regexp@1.9.0: resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} @@ -10382,8 +10389,8 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} @@ -10727,11 +10734,11 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - robust-predicates@3.0.2: - resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} - rolldown@1.0.0-rc.9: - resolution: {integrity: sha512-9EbgWge7ZH+yqb4d2EnELAntgPTWbfL8ajiTW+SyhJEC4qhBbkCKbqFV4Ge4zmu5ziQuVbWxb/XwLZ+RIO7E8Q==} + rolldown@1.0.0-rc.10: + resolution: {integrity: sha512-q7j6vvarRFmKpgJUT8HCAUljkgzEp4LAhPlJUvQhA5LA1SUL36s5QCysMutErzL3EbNOZOkoziSx9iZC4FddKA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -10810,11 +10817,11 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sanitize-filename@1.6.3: - resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + sanitize-filename@1.6.4: + resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} - sanitize-html@2.17.1: - resolution: {integrity: sha512-ehFCW+q1a4CSOWRAdX97BX/6/PDEkCqw7/0JXZAGQV57FQB3YOkTa/rrzHPeJ+Aghy4vZAFfWMYyfxIiB7F/gw==} + sanitize-html@2.17.2: + resolution: {integrity: sha512-EnffJUl46VE9uvZ0XeWzObHLurClLlT12gsOk1cHyP2Ol1P0BnBnsXmShlBmWVJM+dKieQI68R0tsPY5m/B+Jg==} sass@1.97.1: resolution: {integrity: sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==} @@ -10904,8 +10911,8 @@ packages: set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-cookie-parser@3.0.1: - resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==} + set-cookie-parser@3.1.0: + resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==} set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} @@ -11130,6 +11137,9 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.0.0: + resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + stdin-discarder@0.2.2: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} @@ -11141,8 +11151,8 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - streamx@2.23.0: - resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} + streamx@2.25.0: + resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -11208,8 +11218,8 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - strtok3@10.3.4: - resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} + strtok3@10.3.5: + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} engines: {node: '>=18'} style-mod@4.1.3: @@ -11263,8 +11273,8 @@ packages: peerDependencies: svelte: '>= 3.43.1 < 6' - svelte-check@4.4.4: - resolution: {integrity: sha512-F1pGqXc710Oi/wTI4d/x7d6lgPwwfx1U6w3Q35n4xsC2e8C/yN2sM1+mWxjlMcpAfWucjlq4vPi+P4FZ8a14sQ==} + svelte-check@4.4.5: + resolution: {integrity: sha512-1bSwIRCvvmSHrlK52fOlZmVtUZgil43jNL/2H18pRpa+eQjzGt6e3zayxhp1S7GajPFKNM/2PMCG+DZFHlG9fw==} engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: @@ -11336,8 +11346,8 @@ packages: peerDependencies: svelte: ^5.30.2 - svelte@5.53.13: - resolution: {integrity: sha512-9P6I/jGcQMzAMb76Uyd6L6RELAC7qt53GOSBLCke9lubh9iJjmjCo+EffRH4gOPnTB/x4RR2Tmt6s3o9ywQO3g==} + svelte@5.54.1: + resolution: {integrity: sha512-ow8tncN097Ty8U1H+C3bM1xNlsCbnO2UZeN0lWBnv8f3jKho7QTTQ2LWbMXrPQDodLjH91n4kpNnLolyRhVE6A==} engines: {node: '>=18'} svg-parser@2.0.4: @@ -11421,15 +11431,15 @@ packages: tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} + tar-fs@3.1.2: + resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar-stream@3.1.8: + resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} @@ -11469,11 +11479,11 @@ packages: resolution: {integrity: sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==} engines: {node: '>=18'} - testcontainers@11.12.0: - resolution: {integrity: sha512-VWtH+UQejVYYvb53ohEZRbx2naxyDvwO9lQ6A0VgmVE2Oh8r9EF09I+BfmrXpd9N9ntpzhao9di2yNwibSz5KA==} + testcontainers@11.13.0: + resolution: {integrity: sha512-fzTvgOtd6U/esOzgmDatJh79OSK0tU6vjDOJ3B6ICrrJf0dqCWtFdpOr6f/g/KixMxKDTDbszmZYjSORJXsVCQ==} - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} text-encoding@0.6.4: resolution: {integrity: sha512-hJnc6Qg3dWoOMkqP53F0dzRIgtmsAge09kxUIqGrEUS4qr5rWLckGYaQAVr+opBrIMRErGgy6f5aPnyPpyGRfg==} @@ -11530,8 +11540,8 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + tinyexec@1.0.4: + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} tinyglobby@0.2.15: @@ -11549,8 +11559,8 @@ packages: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} tinyspy@4.0.4: @@ -11619,8 +11629,8 @@ packages: truncate-utf8-bytes@1.0.2: resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -11698,8 +11708,8 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.56.1: - resolution: {integrity: sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ==} + typescript-eslint@8.57.1: + resolution: {integrity: sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -11746,8 +11756,8 @@ packages: undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} - undici@7.22.0: - resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} + undici@7.24.6: + resolution: {integrity: sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==} engines: {node: '>=20.18.1'} unicode-canonical-property-names-ecmascript@2.0.1: @@ -11995,13 +12005,13 @@ packages: yaml: optional: true - vite@8.0.0: - resolution: {integrity: sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q==} + vite@8.0.1: + resolution: {integrity: sha512-wt+Z2qIhfFt85uiyRt5LPU4oVEJBXj8hZNWKeqFG4gRG/0RaRGJ7njQCwzFVjO+v4+Ipmf5CY7VdmZRAYYBPHw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.0.0-alpha.31 + '@vitejs/devtools': ^0.1.0 esbuild: ^0.27.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -12080,20 +12090,21 @@ packages: jsdom: optional: true - vitest@4.0.18: - resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} + vitest@4.1.0: + resolution: {integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.18 - '@vitest/browser-preview': 4.0.18 - '@vitest/browser-webdriverio': 4.0.18 - '@vitest/ui': 4.0.18 + '@vitest/browser-playwright': 4.1.0 + '@vitest/browser-preview': 4.1.0 + '@vitest/browser-webdriverio': 4.1.0 + '@vitest/ui': 4.1.0 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -12335,8 +12346,8 @@ packages: utf-8-validate: optional: true - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -12652,7 +12663,7 @@ snapshots: '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.6.0 - tinyexec: 1.0.2 + tinyexec: 1.0.4 '@asamuzakjp/css-color@3.2.0': dependencies: @@ -12678,7 +12689,7 @@ snapshots: '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helpers': 7.28.4 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.29.0 @@ -12693,7 +12704,7 @@ snapshots: '@babel/generator@7.28.5': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -12817,7 +12828,7 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.29.0 - '@babel/parser@7.29.0': + '@babel/parser@7.29.2': dependencies: '@babel/types': 7.29.0 @@ -13396,7 +13407,7 @@ snapshots: '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@babel/traverse@7.28.5': @@ -13404,7 +13415,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.28.5 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/template': 7.27.2 '@babel/types': 7.29.0 debug: 4.4.3 @@ -13420,7 +13431,7 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@borewit/text-codec@0.2.1': {} + '@borewit/text-codec@0.2.2': {} '@braintree/sanitize-url@7.1.1': {} @@ -14602,13 +14613,13 @@ snapshots: - uglify-js - webpack-cli - '@emnapi/core@1.9.0': + '@emnapi/core@1.9.1': dependencies: '@emnapi/wasi-threads': 1.2.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.7.1': + '@emnapi/runtime@1.9.1': dependencies: tslib: 2.8.1 optional: true @@ -14624,7 +14635,7 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.27.3': + '@esbuild/aix-ppc64@0.27.4': optional: true '@esbuild/android-arm64@0.19.12': @@ -14633,7 +14644,7 @@ snapshots: '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.27.3': + '@esbuild/android-arm64@0.27.4': optional: true '@esbuild/android-arm@0.19.12': @@ -14642,7 +14653,7 @@ snapshots: '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.27.3': + '@esbuild/android-arm@0.27.4': optional: true '@esbuild/android-x64@0.19.12': @@ -14651,7 +14662,7 @@ snapshots: '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.27.3': + '@esbuild/android-x64@0.27.4': optional: true '@esbuild/darwin-arm64@0.19.12': @@ -14660,7 +14671,7 @@ snapshots: '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.27.3': + '@esbuild/darwin-arm64@0.27.4': optional: true '@esbuild/darwin-x64@0.19.12': @@ -14669,7 +14680,7 @@ snapshots: '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.27.3': + '@esbuild/darwin-x64@0.27.4': optional: true '@esbuild/freebsd-arm64@0.19.12': @@ -14678,7 +14689,7 @@ snapshots: '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.27.3': + '@esbuild/freebsd-arm64@0.27.4': optional: true '@esbuild/freebsd-x64@0.19.12': @@ -14687,7 +14698,7 @@ snapshots: '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.27.3': + '@esbuild/freebsd-x64@0.27.4': optional: true '@esbuild/linux-arm64@0.19.12': @@ -14696,7 +14707,7 @@ snapshots: '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.27.3': + '@esbuild/linux-arm64@0.27.4': optional: true '@esbuild/linux-arm@0.19.12': @@ -14705,7 +14716,7 @@ snapshots: '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.27.3': + '@esbuild/linux-arm@0.27.4': optional: true '@esbuild/linux-ia32@0.19.12': @@ -14714,7 +14725,7 @@ snapshots: '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.27.3': + '@esbuild/linux-ia32@0.27.4': optional: true '@esbuild/linux-loong64@0.19.12': @@ -14723,7 +14734,7 @@ snapshots: '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.27.3': + '@esbuild/linux-loong64@0.27.4': optional: true '@esbuild/linux-mips64el@0.19.12': @@ -14732,7 +14743,7 @@ snapshots: '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.27.3': + '@esbuild/linux-mips64el@0.27.4': optional: true '@esbuild/linux-ppc64@0.19.12': @@ -14741,7 +14752,7 @@ snapshots: '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.27.3': + '@esbuild/linux-ppc64@0.27.4': optional: true '@esbuild/linux-riscv64@0.19.12': @@ -14750,7 +14761,7 @@ snapshots: '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.27.3': + '@esbuild/linux-riscv64@0.27.4': optional: true '@esbuild/linux-s390x@0.19.12': @@ -14759,7 +14770,7 @@ snapshots: '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.27.3': + '@esbuild/linux-s390x@0.27.4': optional: true '@esbuild/linux-x64@0.19.12': @@ -14768,13 +14779,13 @@ snapshots: '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.27.3': + '@esbuild/linux-x64@0.27.4': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.27.3': + '@esbuild/netbsd-arm64@0.27.4': optional: true '@esbuild/netbsd-x64@0.19.12': @@ -14783,13 +14794,13 @@ snapshots: '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.27.3': + '@esbuild/netbsd-x64@0.27.4': optional: true '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.27.3': + '@esbuild/openbsd-arm64@0.27.4': optional: true '@esbuild/openbsd-x64@0.19.12': @@ -14798,13 +14809,13 @@ snapshots: '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.27.3': + '@esbuild/openbsd-x64@0.27.4': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.27.3': + '@esbuild/openharmony-arm64@0.27.4': optional: true '@esbuild/sunos-x64@0.19.12': @@ -14813,7 +14824,7 @@ snapshots: '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/sunos-x64@0.27.3': + '@esbuild/sunos-x64@0.27.4': optional: true '@esbuild/win32-arm64@0.19.12': @@ -14822,7 +14833,7 @@ snapshots: '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-arm64@0.27.3': + '@esbuild/win32-arm64@0.27.4': optional: true '@esbuild/win32-ia32@0.19.12': @@ -14831,7 +14842,7 @@ snapshots: '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-ia32@0.27.3': + '@esbuild/win32-ia32@0.27.4': optional: true '@esbuild/win32-x64@0.19.12': @@ -14840,41 +14851,41 @@ snapshots: '@esbuild/win32-x64@0.25.12': optional: true - '@esbuild/win32-x64@0.27.3': + '@esbuild/win32-x64@0.27.4': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.0.2(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0(jiti@2.6.1))': dependencies: - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.2': + '@eslint/config-array@0.23.3': dependencies: - '@eslint/object-schema': 3.0.2 + '@eslint/object-schema': 3.0.3 debug: 4.4.3 minimatch: 10.2.4 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.2': + '@eslint/config-helpers@0.5.3': dependencies: - '@eslint/core': 1.1.0 + '@eslint/core': 1.1.1 - '@eslint/core@1.1.0': + '@eslint/core@1.1.1': dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.0.2(jiti@2.6.1))': + '@eslint/js@10.0.1(eslint@10.1.0(jiti@2.6.1))': optionalDependencies: - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) - '@eslint/object-schema@3.0.2': {} + '@eslint/object-schema@3.0.3': {} - '@eslint/plugin-kit@0.6.0': + '@eslint/plugin-kit@0.6.1': dependencies: - '@eslint/core': 1.1.0 + '@eslint/core': 1.1.1 levn: 0.4.1 '@extism/extism@2.0.0-rc13': {} @@ -14901,6 +14912,8 @@ snapshots: '@floating-ui/utils@0.2.10': {} + '@formatjs/bigdecimal@0.2.0': {} + '@formatjs/ecma402-abstract@2.3.6': dependencies: '@formatjs/fast-memoize': 2.2.7 @@ -14908,20 +14921,17 @@ snapshots: decimal.js: 10.6.0 tslib: 2.8.1 - '@formatjs/ecma402-abstract@3.1.1': + '@formatjs/ecma402-abstract@3.2.0': dependencies: - '@formatjs/fast-memoize': 3.1.0 - '@formatjs/intl-localematcher': 0.8.1 - decimal.js: 10.6.0 - tslib: 2.8.1 + '@formatjs/bigdecimal': 0.2.0 + '@formatjs/fast-memoize': 3.1.1 + '@formatjs/intl-localematcher': 0.8.2 '@formatjs/fast-memoize@2.2.7': dependencies: tslib: 2.8.1 - '@formatjs/fast-memoize@3.1.0': - dependencies: - tslib: 2.8.1 + '@formatjs/fast-memoize@3.1.1': {} '@formatjs/icu-messageformat-parser@2.11.4': dependencies: @@ -14929,30 +14939,27 @@ snapshots: '@formatjs/icu-skeleton-parser': 1.8.16 tslib: 2.8.1 - '@formatjs/icu-messageformat-parser@3.5.1': + '@formatjs/icu-messageformat-parser@3.5.3': dependencies: - '@formatjs/ecma402-abstract': 3.1.1 - '@formatjs/icu-skeleton-parser': 2.1.1 - tslib: 2.8.1 + '@formatjs/ecma402-abstract': 3.2.0 + '@formatjs/icu-skeleton-parser': 2.1.3 '@formatjs/icu-skeleton-parser@1.8.16': dependencies: '@formatjs/ecma402-abstract': 2.3.6 tslib: 2.8.1 - '@formatjs/icu-skeleton-parser@2.1.1': + '@formatjs/icu-skeleton-parser@2.1.3': dependencies: - '@formatjs/ecma402-abstract': 3.1.1 - tslib: 2.8.1 + '@formatjs/ecma402-abstract': 3.2.0 '@formatjs/intl-localematcher@0.6.2': dependencies: tslib: 2.8.1 - '@formatjs/intl-localematcher@0.8.1': + '@formatjs/intl-localematcher@0.8.2': dependencies: - '@formatjs/fast-memoize': 3.1.0 - tslib: 2.8.1 + '@formatjs/fast-memoize': 3.1.1 '@fortawesome/fontawesome-common-types@7.1.0': {} @@ -14964,10 +14971,10 @@ snapshots: dependencies: '@fortawesome/fontawesome-common-types': 7.1.0 - '@golevelup/nestjs-discovery@5.0.0(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)': + '@golevelup/nestjs-discovery@5.0.0(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)': dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) lodash: 4.17.23 '@grpc/grpc-js@1.14.3': @@ -15098,7 +15105,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.7.1 + '@emnapi/runtime': 1.9.1 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -15120,22 +15127,22 @@ snapshots: pg-connection-string: 2.12.0 postgres: 3.4.8 - '@immich/svelte-markdown-preprocess@0.2.1(svelte@5.53.13)': + '@immich/svelte-markdown-preprocess@0.2.1(svelte@5.54.1)': dependencies: front-matter: 4.0.2 marked: 17.0.3 node-emoji: 2.2.0 - svelte: 5.53.13 + svelte: 5.54.1 - '@immich/ui@0.69.0(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)': + '@immich/ui@0.69.0(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)': dependencies: - '@immich/svelte-markdown-preprocess': 0.2.1(svelte@5.53.13) + '@immich/svelte-markdown-preprocess': 0.2.1(svelte@5.54.1) '@internationalized/date': 3.10.0 '@mdi/js': 7.4.47 - bits-ui: 2.16.0(@internationalized/date@3.10.0)(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) + bits-ui: 2.16.0(@internationalized/date@3.10.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) luxon: 3.7.2 simple-icons: 16.9.0 - svelte: 5.53.13 + svelte: 5.54.1 svelte-highlight: 7.9.0 tailwind-merge: 3.5.0 tailwind-variants: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.2) @@ -15395,21 +15402,21 @@ snapshots: dependencies: vary: 1.1.2 - '@koa/router@15.3.0(koa@3.1.1)': + '@koa/router@15.4.0(koa@3.1.2)': dependencies: debug: 4.4.3 http-errors: 2.0.1 - koa: 3.1.1 + koa: 3.1.2 koa-compose: 4.1.0 path-to-regexp: 8.3.0 transitivePeerDependencies: - supports-color - '@koddsson/eslint-plugin-tscompat@0.2.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@koddsson/eslint-plugin-tscompat@0.2.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@mdn/browser-compat-data': 6.1.5 - '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) browserslist: 4.28.1 transitivePeerDependencies: - eslint @@ -15442,11 +15449,6 @@ snapshots: '@lukeed/csprng@1.1.0': {} - '@mapbox/geojson-rewind@0.5.2': - dependencies: - get-stream: 6.0.1 - minimist: 1.2.8 - '@mapbox/jsonlint-lines-primitives@2.0.2': {} '@mapbox/mapbox-gl-rtl-text@0.3.0': {} @@ -15498,7 +15500,11 @@ snapshots: '@maplibre/geojson-vt@5.0.4': {} - '@maplibre/maplibre-gl-style-spec@24.6.0': + '@maplibre/geojson-vt@6.0.4': + dependencies: + kdbush: 4.0.2 + + '@maplibre/maplibre-gl-style-spec@24.7.0': dependencies: '@mapbox/jsonlint-lines-primitives': 2.0.2 '@mapbox/unitbezier': 0.0.1 @@ -15508,7 +15514,7 @@ snapshots: rw: 1.3.3 tinyqueue: 3.0.0 - '@maplibre/mlt@1.1.6': + '@maplibre/mlt@1.1.8': dependencies: '@mapbox/point-geometry': 1.1.0 @@ -15598,26 +15604,26 @@ snapshots: '@napi-rs/wasm-runtime@1.1.1': dependencies: - '@emnapi/core': 1.9.0 - '@emnapi/runtime': 1.7.1 + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 '@tybys/wasm-util': 0.10.1 optional: true - '@nestjs/bull-shared@11.0.4(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)': + '@nestjs/bull-shared@11.0.4(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)': dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) tslib: 2.8.1 - '@nestjs/bullmq@11.0.4(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(bullmq@5.70.4)': + '@nestjs/bullmq@11.0.4(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(bullmq@5.71.0)': dependencies: - '@nestjs/bull-shared': 11.0.4(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16) - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) - bullmq: 5.70.4 + '@nestjs/bull-shared': 11.0.4(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) + bullmq: 5.71.0 tslib: 2.8.1 - '@nestjs/cli@11.0.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(@types/node@24.12.0)(esbuild@0.27.3)': + '@nestjs/cli@11.0.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(@types/node@24.12.0)(esbuild@0.27.4)': dependencies: '@angular-devkit/core': 19.2.19(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3) @@ -15628,14 +15634,14 @@ snapshots: chokidar: 4.0.3 cli-table3: 0.6.5 commander: 4.1.1 - fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.3)) + fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.4)) glob: 13.0.0 node-emoji: 1.11.0 ora: 5.4.1 tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.2.0 typescript: 5.9.3 - webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.3) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.4) webpack-node-externals: 3.0.0 optionalDependencies: '@swc/core': 1.15.18(@swc/helpers@0.5.17) @@ -15645,9 +15651,9 @@ snapshots: - uglify-js - webpack-cli - '@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2)': + '@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2)': dependencies: - file-type: 21.3.0 + file-type: 21.3.2 iterare: 1.2.1 load-esm: 1.0.3 reflect-metadata: 0.2.2 @@ -15660,9 +15666,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@nestjs/core@11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2)': + '@nestjs/core@11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nuxt/opencollective': 0.4.1 fast-safe-stringify: 2.1.1 iterare: 1.2.1 @@ -15672,21 +15678,21 @@ snapshots: tslib: 2.8.1 uid: 2.0.2 optionalDependencies: - '@nestjs/platform-express': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16) - '@nestjs/websockets': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(@nestjs/platform-socket.io@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/platform-express': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17) + '@nestjs/websockets': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@nestjs/platform-socket.io@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/mapped-types@2.1.0(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)': + '@nestjs/mapped-types@2.1.0(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)': dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) reflect-metadata: 0.2.2 optionalDependencies: class-transformer: 0.5.1 class-validator: 0.15.1 - '@nestjs/platform-express@11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)': + '@nestjs/platform-express@11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)': dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) cors: 2.8.6 express: 5.2.1 multer: 2.1.1 @@ -15695,10 +15701,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@nestjs/platform-socket.io@11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.16)(rxjs@7.8.2)': + '@nestjs/platform-socket.io@11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.17)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/websockets': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(@nestjs/platform-socket.io@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/websockets': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@nestjs/platform-socket.io@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) rxjs: 7.8.2 socket.io: 4.8.3 tslib: 2.8.1 @@ -15707,10 +15713,10 @@ snapshots: - supports-color - utf-8-validate - '@nestjs/schedule@6.1.1(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)': + '@nestjs/schedule@6.1.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)': dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) cron: 4.4.0 '@nestjs/schematics@11.0.9(chokidar@4.0.3)(typescript@5.9.3)': @@ -15724,12 +15730,12 @@ snapshots: transitivePeerDependencies: - chokidar - '@nestjs/swagger@11.2.6(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)': + '@nestjs/swagger@11.2.6(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)': dependencies: '@microsoft/tsdoc': 0.16.0 - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/mapped-types': 2.1.0(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/mapped-types': 2.1.0(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2) js-yaml: 4.1.1 lodash: 4.17.23 path-to-regexp: 8.3.0 @@ -15739,25 +15745,25 @@ snapshots: class-transformer: 0.5.1 class-validator: 0.15.1 - '@nestjs/testing@11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(@nestjs/platform-express@11.1.16)': + '@nestjs/testing@11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@nestjs/platform-express@11.1.17)': dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) tslib: 2.8.1 optionalDependencies: - '@nestjs/platform-express': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16) + '@nestjs/platform-express': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17) - '@nestjs/websockets@11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(@nestjs/platform-socket.io@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2)': + '@nestjs/websockets@11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@nestjs/platform-socket.io@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) iterare: 1.2.1 object-hash: 3.0.0 reflect-metadata: 0.2.2 rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@nestjs/platform-socket.io': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.16)(rxjs@7.8.2) + '@nestjs/platform-socket.io': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.17)(rxjs@7.8.2) '@noble/hashes@1.8.0': {} @@ -16081,9 +16087,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) - '@oxc-project/runtime@0.115.0': {} - - '@oxc-project/types@0.115.0': {} + '@oxc-project/types@0.120.0': {} '@paralleldrive/cuid2@2.3.1': dependencies: @@ -16344,54 +16348,54 @@ snapshots: '@codemirror/state': 6.5.3 '@codemirror/view': 6.39.8 - '@rolldown/binding-android-arm64@1.0.0-rc.9': + '@rolldown/binding-android-arm64@1.0.0-rc.10': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.9': + '@rolldown/binding-darwin-arm64@1.0.0-rc.10': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.9': + '@rolldown/binding-darwin-x64@1.0.0-rc.10': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.9': + '@rolldown/binding-freebsd-x64@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.10': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.10': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.10': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10': optional: true - '@rolldown/pluginutils@1.0.0-rc.9': {} + '@rolldown/pluginutils@1.0.0-rc.10': {} '@rollup/pluginutils@5.3.0(rollup@4.55.1)': dependencies: @@ -16532,29 +16536,29 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: - '@sveltejs/kit': 2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/kit': 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@sveltejs/enhanced-img@0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/enhanced-img@0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) magic-string: 0.30.21 sharp: 0.34.5 - svelte: 5.53.13 - svelte-parse-markup: 0.1.5(svelte@5.53.13) - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + svelte: 5.54.1 + svelte-parse-markup: 0.1.5(svelte@5.54.1) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vite-imagetools: 9.0.3(rollup@4.55.1) zimmerframe: 1.1.4 transitivePeerDependencies: - rollup - supports-color - '@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -16563,22 +16567,22 @@ snapshots: kleur: 4.1.5 magic-string: 0.30.21 mrmime: 2.0.1 - set-cookie-parser: 3.0.1 + set-cookie-parser: 3.1.0 sirv: 3.0.2 - svelte: 5.53.13 - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + svelte: 5.54.1 + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: '@opentelemetry/api': 1.9.0 typescript: 5.9.3 - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 - svelte: 5.53.13 - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vitefu: 1.1.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + svelte: 5.54.1 + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vitefu: 1.1.2(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.5)': dependencies: @@ -16795,12 +16799,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - '@tailwindcss/vite@4.2.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tailwindcss/vite@4.2.2(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) '@testing-library/dom@10.4.1': dependencies: @@ -16822,18 +16826,18 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/svelte-core@1.0.0(svelte@5.53.13)': + '@testing-library/svelte-core@1.0.0(svelte@5.54.1)': dependencies: - svelte: 5.53.13 + svelte: 5.54.1 - '@testing-library/svelte@5.3.1(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@testing-library/svelte@5.3.1(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@testing-library/dom': 10.4.1 - '@testing-library/svelte-core': 1.0.0(svelte@5.53.13) - svelte: 5.53.13 + '@testing-library/svelte-core': 1.0.0(svelte@5.54.1) + svelte: 5.54.1 optionalDependencies: - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: @@ -16850,22 +16854,22 @@ snapshots: '@trysound/sax@0.2.0': {} - '@turf/boolean-point-in-polygon@7.3.2': + '@turf/boolean-point-in-polygon@7.3.4': dependencies: - '@turf/helpers': 7.3.2 - '@turf/invariant': 7.3.2 + '@turf/helpers': 7.3.4 + '@turf/invariant': 7.3.4 '@types/geojson': 7946.0.16 point-in-polygon-hao: 1.2.4 tslib: 2.8.1 - '@turf/helpers@7.3.2': + '@turf/helpers@7.3.4': dependencies: '@types/geojson': 7946.0.16 tslib: 2.8.1 - '@turf/invariant@7.3.2': + '@turf/invariant@7.3.4': dependencies: - '@turf/helpers': 7.3.2 + '@turf/helpers': 7.3.4 '@types/geojson': 7946.0.16 tslib: 2.8.1 @@ -17268,7 +17272,7 @@ snapshots: dependencies: undici-types: 7.16.0 - '@types/node@25.4.0': + '@types/node@25.5.0': dependencies: undici-types: 7.18.2 optional: true @@ -17287,7 +17291,7 @@ snapshots: '@types/pg-pool@2.0.7': dependencies: - '@types/pg': 8.18.0 + '@types/pg': 8.20.0 '@types/pg@8.15.6': dependencies: @@ -17295,7 +17299,7 @@ snapshots: pg-protocol: 1.13.0 pg-types: 2.2.0 - '@types/pg@8.18.0': + '@types/pg@8.20.0': dependencies: '@types/node': 24.12.0 pg-protocol: 1.13.0 @@ -17437,102 +17441,102 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.1 - eslint: 10.0.2(jiti@2.6.1) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 + eslint: 10.1.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3 - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.56.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) - '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.56.1': + '@typescript-eslint/scope-manager@8.57.1': dependencies: - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 - '@typescript-eslint/tsconfig-utils@8.56.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 - eslint: 10.0.2(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) + eslint: 10.1.0(jiti@2.6.1) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.56.1': {} + '@typescript-eslint/types@8.57.1': {} - '@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.56.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/project-service': 8.57.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3 minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - eslint: 10.0.2(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + eslint: 10.1.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.56.1': + '@typescript-eslint/visitor-keys@8.57.1': dependencies: - '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/types': 8.57.1 eslint-visitor-keys: 5.0.1 '@ungap/structured-clone@1.3.0': {} '@vercel/oidc@3.0.5': {} - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.4)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -17547,37 +17551,37 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.2 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.4)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.18 - ast-v8-to-istanbul: 0.3.12 + '@vitest/utils': 4.1.0 + ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 magicast: 0.5.2 obug: 2.1.1 - std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + std-env: 4.0.0 + tinyrainbow: 3.1.0 + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.18 - ast-v8-to-istanbul: 0.3.12 + '@vitest/utils': 4.1.0 + ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 magicast: 0.5.2 obug: 2.1.1 - std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + std-env: 4.0.0 + tinyrainbow: 3.1.0 + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/expect@3.2.4': dependencies: @@ -17587,14 +17591,14 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/expect@4.0.18': + '@vitest/expect@4.1.0': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 chai: 6.2.2 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: @@ -17604,29 +17608,29 @@ snapshots: optionalDependencies: vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.0(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@vitest/spy': 4.0.18 + '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@vitest/spy': 4.0.18 + '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/pretty-format@4.0.18': + '@vitest/pretty-format@4.1.0': dependencies: - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 '@vitest/runner@3.2.4': dependencies: @@ -17634,9 +17638,9 @@ snapshots: pathe: 2.0.3 strip-literal: 3.1.0 - '@vitest/runner@4.0.18': + '@vitest/runner@4.1.0': dependencies: - '@vitest/utils': 4.0.18 + '@vitest/utils': 4.1.0 pathe: 2.0.3 '@vitest/snapshot@3.2.4': @@ -17645,9 +17649,10 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/snapshot@4.0.18': + '@vitest/snapshot@4.1.0': dependencies: - '@vitest/pretty-format': 4.0.18 + '@vitest/pretty-format': 4.1.0 + '@vitest/utils': 4.1.0 magic-string: 0.30.21 pathe: 2.0.3 @@ -17655,7 +17660,7 @@ snapshots: dependencies: tinyspy: 4.0.4 - '@vitest/spy@4.0.18': {} + '@vitest/spy@4.1.0': {} '@vitest/utils@3.2.4': dependencies: @@ -17663,10 +17668,11 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 - '@vitest/utils@4.0.18': + '@vitest/utils@4.1.0': dependencies: - '@vitest/pretty-format': 4.0.18 - tinyrainbow: 3.0.3 + '@vitest/pretty-format': 4.1.0 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 '@webassemblyjs/ast@1.14.1': dependencies: @@ -17752,10 +17758,10 @@ snapshots: dependencies: '@namnode/store': 0.1.0 - '@zoom-image/svelte@0.3.9(svelte@5.53.13)': + '@zoom-image/svelte@0.3.9(svelte@5.54.1)': dependencies: '@zoom-image/core': 0.42.0 - svelte: 5.53.13 + svelte: 5.54.1 abbrev@1.1.1: {} @@ -17930,10 +17936,11 @@ snapshots: buffer-crc32: 1.0.0 readable-stream: 4.7.0 readdir-glob: 1.1.3 - tar-stream: 3.1.7 + tar-stream: 3.1.8 zip-stream: 6.0.1 transitivePeerDependencies: - bare-abort-controller + - bare-buffer - react-native-b4a are-we-there-yet@2.0.0: @@ -17983,6 +17990,12 @@ snapshots: estree-walker: 3.0.3 js-tokens: 10.0.0 + ast-v8-to-istanbul@1.0.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 + astring@1.9.0: {} async-lock@1.4.1: {} @@ -18008,7 +18021,7 @@ snapshots: axobject-query@4.1.0: {} - b4a@1.7.3: {} + b4a@1.8.0: {} babel-loader@9.2.1(@babel/core@7.28.5)(webpack@5.104.1): dependencies: @@ -18055,41 +18068,35 @@ snapshots: bare-events@2.8.2: {} - bare-fs@4.5.4: + bare-fs@4.5.6: dependencies: bare-events: 2.8.2 bare-path: 3.0.0 - bare-stream: 2.8.0(bare-events@2.8.2) - bare-url: 2.3.2 + bare-stream: 2.11.0(bare-events@2.8.2) + bare-url: 2.4.0 fast-fifo: 1.3.2 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - optional: true - bare-os@3.6.2: - optional: true + bare-os@3.8.0: {} bare-path@3.0.0: dependencies: - bare-os: 3.6.2 - optional: true + bare-os: 3.8.0 - bare-stream@2.8.0(bare-events@2.8.2): + bare-stream@2.11.0(bare-events@2.8.2): dependencies: - streamx: 2.23.0 + streamx: 2.25.0 teex: 1.0.1 optionalDependencies: bare-events: 2.8.2 transitivePeerDependencies: - - bare-abort-controller - react-native-b4a - optional: true - bare-url@2.3.2: + bare-url@2.4.0: dependencies: bare-path: 3.0.0 - optional: true base64-js@1.5.1: {} @@ -18119,15 +18126,15 @@ snapshots: binary-extensions@2.3.0: {} - bits-ui@2.16.0(@internationalized/date@3.10.0)(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13): + bits-ui@2.16.0(@internationalized/date@3.10.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): dependencies: '@floating-ui/core': 1.7.3 '@floating-ui/dom': 1.7.4 '@internationalized/date': 3.10.0 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) - svelte: 5.53.13 - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) + runed: 0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + svelte: 5.54.1 + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -18207,7 +18214,7 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.4: + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.4 @@ -18244,7 +18251,7 @@ snapshots: builtin-modules@5.0.0: {} - bullmq@5.70.4: + bullmq@5.71.0: dependencies: cron-parser: 4.9.0 ioredis: 5.9.3 @@ -18344,7 +18351,7 @@ snapshots: canvas@2.11.2: dependencies: '@mapbox/node-pre-gyp': 1.0.11 - nan: 2.25.0 + nan: 2.26.2 simple-get: 3.1.1 transitivePeerDependencies: - encoding @@ -18354,7 +18361,7 @@ snapshots: canvas@2.11.2(encoding@0.1.13): dependencies: '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) - nan: 2.25.0 + nan: 2.26.2 simple-get: 3.1.1 transitivePeerDependencies: - encoding @@ -18736,7 +18743,7 @@ snapshots: cpu-features@0.0.10: dependencies: buildcheck: 0.0.7 - nan: 2.25.0 + nan: 2.26.2 optional: true crc-32@1.2.2: {} @@ -19186,7 +19193,7 @@ snapshots: delaunator@5.0.1: dependencies: - robust-predicates: 3.0.2 + robust-predicates: 3.0.3 delayed-stream@1.0.0: {} @@ -19251,11 +19258,11 @@ snapshots: dependencies: '@leichtgewicht/ip-codec': 2.0.5 - docker-compose@1.3.1: + docker-compose@1.3.3: dependencies: yaml: 2.8.3 - docker-modem@5.0.6: + docker-modem@5.0.7: dependencies: debug: 4.4.3 readable-stream: 3.6.2 @@ -19264,12 +19271,12 @@ snapshots: transitivePeerDependencies: - supports-color - dockerode@4.0.9: + dockerode@4.0.10: dependencies: '@balena/dockerignore': 1.0.2 '@grpc/grpc-js': 1.14.3 '@grpc/proto-loader': 0.7.15 - docker-modem: 5.0.6 + docker-modem: 5.0.7 protobufjs: 7.5.4 tar-fs: 2.1.4 uuid: 10.0.0 @@ -19288,7 +19295,7 @@ snapshots: lunr: 2.3.9 lunr-languages: 1.14.0 mark.js: 8.11.1 - minimatch: 3.1.2 + minimatch: 3.1.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) rehype-parse: 7.0.1 @@ -19562,34 +19569,34 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.27.3: + esbuild@0.27.4: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.3 - '@esbuild/android-arm': 0.27.3 - '@esbuild/android-arm64': 0.27.3 - '@esbuild/android-x64': 0.27.3 - '@esbuild/darwin-arm64': 0.27.3 - '@esbuild/darwin-x64': 0.27.3 - '@esbuild/freebsd-arm64': 0.27.3 - '@esbuild/freebsd-x64': 0.27.3 - '@esbuild/linux-arm': 0.27.3 - '@esbuild/linux-arm64': 0.27.3 - '@esbuild/linux-ia32': 0.27.3 - '@esbuild/linux-loong64': 0.27.3 - '@esbuild/linux-mips64el': 0.27.3 - '@esbuild/linux-ppc64': 0.27.3 - '@esbuild/linux-riscv64': 0.27.3 - '@esbuild/linux-s390x': 0.27.3 - '@esbuild/linux-x64': 0.27.3 - '@esbuild/netbsd-arm64': 0.27.3 - '@esbuild/netbsd-x64': 0.27.3 - '@esbuild/openbsd-arm64': 0.27.3 - '@esbuild/openbsd-x64': 0.27.3 - '@esbuild/openharmony-arm64': 0.27.3 - '@esbuild/sunos-x64': 0.27.3 - '@esbuild/win32-arm64': 0.27.3 - '@esbuild/win32-ia32': 0.27.3 - '@esbuild/win32-x64': 0.27.3 + '@esbuild/aix-ppc64': 0.27.4 + '@esbuild/android-arm': 0.27.4 + '@esbuild/android-arm64': 0.27.4 + '@esbuild/android-x64': 0.27.4 + '@esbuild/darwin-arm64': 0.27.4 + '@esbuild/darwin-x64': 0.27.4 + '@esbuild/freebsd-arm64': 0.27.4 + '@esbuild/freebsd-x64': 0.27.4 + '@esbuild/linux-arm': 0.27.4 + '@esbuild/linux-arm64': 0.27.4 + '@esbuild/linux-ia32': 0.27.4 + '@esbuild/linux-loong64': 0.27.4 + '@esbuild/linux-mips64el': 0.27.4 + '@esbuild/linux-ppc64': 0.27.4 + '@esbuild/linux-riscv64': 0.27.4 + '@esbuild/linux-s390x': 0.27.4 + '@esbuild/linux-x64': 0.27.4 + '@esbuild/netbsd-arm64': 0.27.4 + '@esbuild/netbsd-x64': 0.27.4 + '@esbuild/openbsd-arm64': 0.27.4 + '@esbuild/openbsd-x64': 0.27.4 + '@esbuild/openharmony-arm64': 0.27.4 + '@esbuild/sunos-x64': 0.27.4 + '@esbuild/win32-arm64': 0.27.4 + '@esbuild/win32-ia32': 0.27.4 + '@esbuild/win32-x64': 0.27.4 escalade@3.2.0: {} @@ -19603,36 +19610,36 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.0.2(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)): dependencies: - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) - eslint-plugin-compat@6.2.1(eslint@10.0.2(jiti@2.6.1)): + eslint-plugin-compat@6.2.1(eslint@10.1.0(jiti@2.6.1)): dependencies: '@mdn/browser-compat-data': 6.1.5 ast-metadata-inferer: 0.8.1 browserslist: 4.28.1 - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) find-up: 5.0.0 globals: 15.15.0 lodash.memoize: 4.1.2 semver: 7.7.4 - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.0.2(jiti@2.6.1)))(eslint@10.0.2(jiti@2.6.1))(prettier@3.8.1): + eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1): dependencies: - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) prettier: 3.8.1 prettier-linter-helpers: 1.0.1 synckit: 0.11.12 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@10.0.2(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.1.0(jiti@2.6.1)) - eslint-plugin-svelte@3.15.0(eslint@10.0.2(jiti@2.6.1))(svelte@5.53.13): + eslint-plugin-svelte@3.16.0(eslint@10.1.0(jiti@2.6.1))(svelte@5.54.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 @@ -19640,21 +19647,21 @@ snapshots: postcss-load-config: 3.1.4(postcss@8.5.8) postcss-safe-parser: 7.0.1(postcss@8.5.8) semver: 7.7.4 - svelte-eslint-parser: 1.6.0(svelte@5.53.13) + svelte-eslint-parser: 1.6.0(svelte@5.54.1) optionalDependencies: - svelte: 5.53.13 + svelte: 5.54.1 transitivePeerDependencies: - ts-node - eslint-plugin-unicorn@63.0.0(eslint@10.0.2(jiti@2.6.1)): + eslint-plugin-unicorn@63.0.0(eslint@10.1.0(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.28.5 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) change-case: 5.4.4 ci-info: 4.3.1 clean-regexp: 1.0.0 core-js-compat: 3.47.0 - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) find-up-simple: 1.0.1 globals: 16.5.0 indent-string: 5.0.0 @@ -19676,7 +19683,7 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-scope@9.1.1: + eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 '@types/estree': 1.0.8 @@ -19689,14 +19696,14 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.0.2(jiti@2.6.1): + eslint@10.1.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.2 - '@eslint/config-helpers': 0.5.2 - '@eslint/core': 1.1.0 - '@eslint/plugin-kit': 0.6.0 + '@eslint/config-array': 0.23.3 + '@eslint/config-helpers': 0.5.3 + '@eslint/core': 1.1.1 + '@eslint/plugin-kit': 0.6.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -19705,9 +19712,9 @@ snapshots: cross-spawn: 7.0.6 debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 9.1.1 + eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 - espree: 11.1.1 + espree: 11.2.0 esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -19741,7 +19748,7 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 - espree@11.1.1: + espree@11.2.0: dependencies: acorn: 8.16.0 acorn-jsx: 5.3.2(acorn@8.16.0) @@ -19889,7 +19896,7 @@ snapshots: methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.12 + path-to-regexp: 0.1.13 proxy-addr: 2.0.7 qs: 6.14.1 range-parser: 1.2.1 @@ -20028,10 +20035,10 @@ snapshots: dependencies: stream-source: 0.3.5 - file-type@21.3.0: + file-type@21.3.2: dependencies: '@tokenizer/inflate': 0.4.1 - strtok3: 10.3.4 + strtok3: 10.3.5 token-types: 6.1.2 uint8array-extras: 1.5.0 transitivePeerDependencies: @@ -20088,12 +20095,12 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 flat@5.0.2: {} - flatted@3.3.3: {} + flatted@3.4.2: {} fluent-ffmpeg@2.1.3: dependencies: @@ -20107,7 +20114,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.3)): + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.4)): dependencies: '@babel/code-frame': 7.29.0 chalk: 4.1.2 @@ -20116,13 +20123,13 @@ snapshots: deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 - minimatch: 3.1.2 + minimatch: 3.1.5 node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.7.4 tapable: 2.3.0 typescript: 5.9.3 - webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.3) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.4) form-data-encoder@2.1.4: {} @@ -20206,10 +20213,10 @@ snapshots: geo-coordinates-parser@1.7.4: {} - geo-tz@8.1.5: + geo-tz@8.1.6: dependencies: - '@turf/boolean-point-in-polygon': 7.3.2 - '@turf/helpers': 7.3.2 + '@turf/boolean-point-in-polygon': 7.3.4 + '@turf/helpers': 7.3.4 geobuf: 3.0.2 pbf: 3.3.0 @@ -20240,7 +20247,7 @@ snapshots: get-own-enumerable-property-symbols@3.0.2: {} - get-port@7.1.0: {} + get-port@7.2.0: {} get-proto@1.0.1: dependencies: @@ -20275,7 +20282,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.6 + minimatch: 9.0.9 minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -20306,7 +20313,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 @@ -20385,14 +20392,14 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.8.3: + happy-dom@20.8.4: dependencies: '@types/node': 24.12.0 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 entities: 7.0.1 whatwg-mimetype: 3.0.0 - ws: 8.19.0 + ws: 8.20.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -20850,18 +20857,17 @@ snapshots: '@formatjs/icu-messageformat-parser': 2.11.4 tslib: 2.8.1 - intl-messageformat@11.1.2: + intl-messageformat@11.2.0: dependencies: - '@formatjs/ecma402-abstract': 3.1.1 - '@formatjs/fast-memoize': 3.1.0 - '@formatjs/icu-messageformat-parser': 3.5.1 - tslib: 2.8.1 + '@formatjs/ecma402-abstract': 3.2.0 + '@formatjs/fast-memoize': 3.1.1 + '@formatjs/icu-messageformat-parser': 3.5.3 invariant@2.2.4: dependencies: loose-envify: 1.4.0 - ioredis@5.10.0: + ioredis@5.10.1: dependencies: '@ioredis/commands': 1.5.1 cluster-key-slot: 1.1.2 @@ -21095,7 +21101,7 @@ snapshots: jose@5.10.0: {} - jose@6.1.3: {} + jose@6.2.2: {} js-tokens@10.0.0: {} @@ -21132,7 +21138,7 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 - ws: 8.19.0 + ws: 8.20.0 xml-name-validator: 5.0.0 optionalDependencies: canvas: 2.11.2(encoding@0.1.13) @@ -21162,7 +21168,7 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 - ws: 8.19.0 + ws: 8.20.0 xml-name-validator: 5.0.0 optionalDependencies: canvas: 2.11.2 @@ -21264,10 +21270,10 @@ snapshots: koa-compose@4.1.0: {} - koa@3.1.1: + koa@3.1.2: dependencies: accepts: 1.3.8 - content-disposition: 0.5.4 + content-disposition: 1.0.1 content-type: 1.0.5 cookies: 0.9.1 delegates: 1.0.0 @@ -21503,13 +21509,13 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 source-map-js: 1.2.1 magicast@0.5.2: dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 source-map-js: 1.2.1 @@ -21537,21 +21543,19 @@ snapshots: transitivePeerDependencies: - supports-color - maplibre-gl@5.19.0: + maplibre-gl@5.21.0: dependencies: - '@mapbox/geojson-rewind': 0.5.2 '@mapbox/jsonlint-lines-primitives': 2.0.2 '@mapbox/point-geometry': 1.1.0 '@mapbox/tiny-sdf': 2.0.7 '@mapbox/unitbezier': 0.0.1 '@mapbox/vector-tile': 2.0.4 '@mapbox/whoots-js': 3.1.0 - '@maplibre/geojson-vt': 5.0.4 - '@maplibre/maplibre-gl-style-spec': 24.6.0 - '@maplibre/mlt': 1.1.6 + '@maplibre/geojson-vt': 6.0.4 + '@maplibre/maplibre-gl-style-spec': 24.7.0 + '@maplibre/mlt': 1.1.8 '@maplibre/vt-pbf': 4.3.0 '@types/geojson': 7946.0.16 - '@types/supercluster': 7.1.3 earcut: 3.0.2 gl-matrix: 3.4.4 kdbush: 4.0.2 @@ -21559,7 +21563,6 @@ snapshots: pbf: 4.0.1 potpack: 2.1.0 quickselect: 3.0.0 - supercluster: 8.0.1 tinyqueue: 3.0.0 mark.js@8.11.1: {} @@ -22180,19 +22183,23 @@ snapshots: minimatch@10.2.4: dependencies: - brace-expansion: 5.0.4 + brace-expansion: 5.0.5 minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 - minimatch@5.1.6: + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.12 + + minimatch@5.1.9: dependencies: brace-expansion: 2.0.2 - minimatch@9.0.6: + minimatch@9.0.9: dependencies: - brace-expansion: 5.0.4 + brace-expansion: 2.0.2 minimist@1.2.8: {} @@ -22310,12 +22317,12 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.25.0: + nan@2.26.2: optional: true nanoid@3.3.11: {} - nanoid@5.1.6: {} + nanoid@5.1.7: {} natural-compare-lite@1.4.0: {} @@ -22336,12 +22343,12 @@ snapshots: neo-async@2.6.2: {} - nest-commander@3.20.1(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(@types/inquirer@8.2.12)(@types/node@24.12.0)(typescript@5.9.3): + nest-commander@3.20.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@types/inquirer@8.2.12)(@types/node@24.12.0)(typescript@5.9.3): dependencies: '@fig/complete-commander': 3.2.0(commander@11.1.0) - '@golevelup/nestjs-discovery': 5.0.0(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16) - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@golevelup/nestjs-discovery': 5.0.0(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@types/inquirer': 8.2.12 commander: 11.1.0 cosmiconfig: 8.3.6(typescript@5.9.3) @@ -22350,25 +22357,25 @@ snapshots: - '@types/node' - typescript - nestjs-cls@5.4.3(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2): + nestjs-cls@5.4.3(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2): dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) reflect-metadata: 0.2.2 rxjs: 7.8.2 - nestjs-kysely@3.1.2(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16)(kysely@0.28.14)(reflect-metadata@0.2.2): + nestjs-kysely@3.1.2(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(kysely@0.28.14)(reflect-metadata@0.2.2): dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) kysely: 0.28.14 reflect-metadata: 0.2.2 tslib: 2.8.1 - nestjs-otel@7.0.1(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.16): + nestjs-otel@7.0.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17): dependencies: - '@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.16)(@nestjs/websockets@11.1.16)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@opentelemetry/api': 1.9.0 '@opentelemetry/host-metrics': 0.36.2(@opentelemetry/api@1.9.0) response-time: 2.3.4 @@ -22519,18 +22526,19 @@ snapshots: obug@2.1.1: {} - oidc-provider@9.6.1: + oidc-provider@9.7.1: dependencies: '@koa/cors': 5.0.0 - '@koa/router': 15.3.0(koa@3.1.1) + '@koa/router': 15.4.0(koa@3.1.2) debug: 4.4.3 eta: 4.5.1 - jose: 6.1.3 + jose: 6.2.2 jsesc: 3.1.0 - koa: 3.1.1 - nanoid: 5.1.6 + koa: 3.1.2 + nanoid: 5.1.7 quick-lru: 7.3.0 raw-body: 3.0.2 + undici: 7.24.6 transitivePeerDependencies: - supports-color @@ -22569,7 +22577,7 @@ snapshots: openid-client@6.8.2: dependencies: - jose: 6.1.3 + jose: 6.2.2 oauth4webapi: 3.8.5 optionator@0.9.4: @@ -22749,7 +22757,7 @@ snapshots: array-source: 0.0.4 file-source: 0.6.1 - path-to-regexp@0.1.12: {} + path-to-regexp@0.1.13: {} path-to-regexp@1.9.0: dependencies: @@ -22864,7 +22872,7 @@ snapshots: point-in-polygon-hao@1.2.4: dependencies: - robust-predicates: 3.0.2 + robust-predicates: 3.0.3 points-on-curve@0.2.0: {} @@ -23382,10 +23390,10 @@ snapshots: dependencies: prettier: 3.8.1 - prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.53.13): + prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.54.1): dependencies: prettier: 3.8.1 - svelte: 5.53.13 + svelte: 5.54.1 prettier@3.8.1: {} @@ -23475,7 +23483,7 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - pump@3.0.3: + pump@3.0.4: dependencies: end-of-stream: 1.4.5 once: 1.4.0 @@ -23561,7 +23569,7 @@ snapshots: react-email@4.3.2: dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/traverse': 7.28.5 chokidar: 4.0.3 commander: 13.1.0 @@ -23668,7 +23676,7 @@ snapshots: readdir-glob@1.1.3: dependencies: - minimatch: 5.1.6 + minimatch: 5.1.9 readdirp@3.6.0: dependencies: @@ -23913,37 +23921,37 @@ snapshots: dependencies: glob: 7.2.3 - robust-predicates@3.0.2: {} + robust-predicates@3.0.3: {} - rolldown@1.0.0-rc.9: + rolldown@1.0.0-rc.10: dependencies: - '@oxc-project/types': 0.115.0 - '@rolldown/pluginutils': 1.0.0-rc.9 + '@oxc-project/types': 0.120.0 + '@rolldown/pluginutils': 1.0.0-rc.10 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.9 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.9 - '@rolldown/binding-darwin-x64': 1.0.0-rc.9 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.9 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.9 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.9 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.9 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.9 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.9 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.9 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.9 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.9 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.9 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.9 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.9 + '@rolldown/binding-android-arm64': 1.0.0-rc.10 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.10 + '@rolldown/binding-darwin-x64': 1.0.0-rc.10 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.10 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.10 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.10 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.10 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.10 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.10 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.10 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.10 - rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.9)(rollup@4.55.1): + rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.10)(rollup@4.55.1): dependencies: open: 8.4.2 picomatch: 4.0.4 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rolldown: 1.0.0-rc.9 + rolldown: 1.0.0-rc.10 rollup: 4.55.1 rollup@4.55.1: @@ -24012,14 +24020,14 @@ snapshots: dependencies: queue-microtask: 1.2.3 - runed@0.35.1(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13): + runed@0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 - svelte: 5.53.13 + svelte: 5.54.1 optionalDependencies: - '@sveltejs/kit': 2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/kit': 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) rw@1.3.3: {} @@ -24041,15 +24049,15 @@ snapshots: safer-buffer@2.1.2: {} - sanitize-filename@1.6.3: + sanitize-filename@1.6.4: dependencies: truncate-utf8-bytes: 1.0.2 - sanitize-html@2.17.1: + sanitize-html@2.17.2: dependencies: deepmerge: 4.3.1 escape-string-regexp: 4.0.0 - htmlparser2: 8.0.2 + htmlparser2: 10.1.0 is-plain-object: 5.0.0 parse-srcset: 1.0.2 postcss: 8.5.8 @@ -24196,7 +24204,7 @@ snapshots: set-blocking@2.0.0: {} - set-cookie-parser@3.0.1: {} + set-cookie-parser@3.1.0: {} set-function-length@1.2.2: dependencies: @@ -24479,7 +24487,7 @@ snapshots: bcrypt-pbkdf: 1.0.2 optionalDependencies: cpu-features: 0.0.10 - nan: 2.25.0 + nan: 2.26.2 ssri@13.0.1: dependencies: @@ -24495,17 +24503,19 @@ snapshots: std-env@3.10.0: {} + std-env@4.0.0: {} + stdin-discarder@0.2.2: {} stream-source@0.3.5: {} streamsearch@1.1.0: {} - streamx@2.23.0: + streamx@2.25.0: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 - text-decoder: 1.2.3 + text-decoder: 1.2.7 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -24575,7 +24585,7 @@ snapshots: dependencies: js-tokens: 9.0.1 - strtok3@10.3.4: + strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 @@ -24643,23 +24653,23 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-awesome@3.3.5(svelte@5.53.13): + svelte-awesome@3.3.5(svelte@5.54.1): dependencies: - svelte: 5.53.13 + svelte: 5.54.1 - svelte-check@4.4.4(picomatch@4.0.4)(svelte@5.53.13)(typescript@5.9.3): + svelte-check@4.4.5(picomatch@4.0.4)(svelte@5.54.1)(typescript@5.9.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.4) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.53.13 + svelte: 5.54.1 typescript: 5.9.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.6.0(svelte@5.53.13): + svelte-eslint-parser@1.6.0(svelte@5.54.1): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -24669,7 +24679,7 @@ snapshots: postcss-selector-parser: 7.1.1 semver: 7.7.4 optionalDependencies: - svelte: 5.53.13 + svelte: 5.54.1 svelte-floating-ui@1.5.8: dependencies: @@ -24682,7 +24692,7 @@ snapshots: dependencies: highlight.js: 11.11.1 - svelte-i18n@4.0.1(svelte@5.53.13): + svelte-i18n@4.0.1(svelte@5.54.1): dependencies: cli-color: 2.0.4 deepmerge: 4.3.1 @@ -24690,10 +24700,10 @@ snapshots: estree-walker: 2.0.2 intl-messageformat: 10.7.18 sade: 1.8.1 - svelte: 5.53.13 + svelte: 5.54.1 tiny-glob: 0.2.9 - svelte-jsoneditor@3.11.0(svelte@5.53.13): + svelte-jsoneditor@3.11.0(svelte@5.54.1): dependencies: '@codemirror/autocomplete': 6.20.0 '@codemirror/commands': 6.10.1 @@ -24720,42 +24730,42 @@ snapshots: memoize-one: 6.0.0 natural-compare-lite: 1.4.0 sass: 1.97.1 - svelte: 5.53.13 - svelte-awesome: 3.3.5(svelte@5.53.13) + svelte: 5.54.1 + svelte-awesome: 3.3.5(svelte@5.54.1) svelte-select: 5.8.3 vanilla-picker: 2.12.3 - svelte-maplibre@1.2.6(svelte@5.53.13): + svelte-maplibre@1.2.6(svelte@5.54.1): dependencies: d3-geo: 3.1.1 dequal: 2.0.3 just-compare: 2.3.0 - maplibre-gl: 5.19.0 + maplibre-gl: 5.21.0 pmtiles: 3.2.1 - svelte: 5.53.13 + svelte: 5.54.1 - svelte-parse-markup@0.1.5(svelte@5.53.13): + svelte-parse-markup@0.1.5(svelte@5.54.1): dependencies: - svelte: 5.53.13 + svelte: 5.54.1 - svelte-persisted-store@0.12.0(svelte@5.53.13): + svelte-persisted-store@0.12.0(svelte@5.54.1): dependencies: - svelte: 5.53.13 + svelte: 5.54.1 svelte-select@5.8.3: dependencies: svelte-floating-ui: 1.5.8 - svelte-toolbelt@0.10.6(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.53.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.13)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13)(typescript@5.9.3)(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.53.13) + runed: 0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) style-to-object: 1.0.14 - svelte: 5.53.13 + svelte: 5.54.1 transitivePeerDependencies: - '@sveltejs/kit' - svelte@5.53.13: + svelte@5.54.1: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 @@ -24867,15 +24877,15 @@ snapshots: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 - pump: 3.0.3 + pump: 3.0.4 tar-stream: 2.2.0 - tar-fs@3.1.1: + tar-fs@3.1.2: dependencies: - pump: 3.0.3 - tar-stream: 3.1.7 + pump: 3.0.4 + tar-stream: 3.1.8 optionalDependencies: - bare-fs: 4.5.4 + bare-fs: 4.5.6 bare-path: 3.0.0 transitivePeerDependencies: - bare-abort-controller @@ -24890,13 +24900,15 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar-stream@3.1.7: + tar-stream@3.1.8: dependencies: - b4a: 1.7.3 + b4a: 1.8.0 + bare-fs: 4.5.6 fast-fifo: 1.3.2 - streamx: 2.23.0 + streamx: 2.25.0 transitivePeerDependencies: - bare-abort-controller + - bare-buffer - react-native-b4a tar@6.2.1: @@ -24918,23 +24930,22 @@ snapshots: teex@1.0.1: dependencies: - streamx: 2.23.0 + streamx: 2.25.0 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - optional: true - terser-webpack-plugin@5.3.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.3)): + terser-webpack-plugin@5.3.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.4)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.44.1 - webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.3) + webpack: 5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.4) optionalDependencies: '@swc/core': 1.15.18(@swc/helpers@0.5.17) - esbuild: 0.27.3 + esbuild: 0.27.4 terser-webpack-plugin@5.3.16(webpack@5.104.1): dependencies: @@ -24958,7 +24969,7 @@ snapshots: glob: 10.5.0 minimatch: 10.2.4 - testcontainers@11.12.0: + testcontainers@11.13.0: dependencies: '@balena/dockerignore': 1.0.2 '@types/dockerode': 4.0.1 @@ -24966,24 +24977,24 @@ snapshots: async-lock: 1.4.1 byline: 5.0.0 debug: 4.4.3 - docker-compose: 1.3.1 - dockerode: 4.0.9 - get-port: 7.1.0 + docker-compose: 1.3.3 + dockerode: 4.0.10 + get-port: 7.2.0 proper-lockfile: 4.1.2 properties-reader: 3.0.1 ssh-remote-port-forward: 1.0.4 - tar-fs: 3.1.1 + tar-fs: 3.1.2 tmp: 0.2.5 - undici: 7.22.0 + undici: 7.24.6 transitivePeerDependencies: - bare-abort-controller - bare-buffer - react-native-b4a - supports-color - text-decoder@1.2.3: + text-decoder@1.2.7: dependencies: - b4a: 1.7.3 + b4a: 1.8.0 transitivePeerDependencies: - react-native-b4a @@ -25031,7 +25042,7 @@ snapshots: tinyexec@0.3.2: {} - tinyexec@1.0.2: {} + tinyexec@1.0.4: {} tinyglobby@0.2.15: dependencies: @@ -25044,7 +25055,7 @@ snapshots: tinyrainbow@2.0.0: {} - tinyrainbow@3.0.3: {} + tinyrainbow@3.1.0: {} tinyspy@4.0.4: {} @@ -25071,7 +25082,7 @@ snapshots: token-types@6.1.2: dependencies: - '@borewit/text-codec': 0.2.1 + '@borewit/text-codec': 0.2.2 '@tokenizer/token': 0.3.0 ieee754: 1.2.1 @@ -25105,7 +25116,7 @@ snapshots: dependencies: utf8-byte-length: 1.0.5 - ts-api-utils@2.4.0(typescript@5.9.3): + ts-api-utils@2.5.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -25136,7 +25147,7 @@ snapshots: tsx@4.21.0: dependencies: - esbuild: 0.27.3 + esbuild: 0.27.4 get-tsconfig: 4.13.0 optionalDependencies: fsevents: 2.3.3 @@ -25172,13 +25183,13 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 10.0.2(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 10.1.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -25213,7 +25224,7 @@ snapshots: undici-types@7.18.2: optional: true - undici@7.22.0: {} + undici@7.24.6: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -25470,19 +25481,19 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - typescript vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: - esbuild: 0.27.3 + esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.8 @@ -25498,35 +25509,16 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: - esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - postcss: 8.5.8 - rollup: 4.55.1 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 25.4.0 - fsevents: 2.3.3 - jiti: 2.6.1 - lightningcss: 1.32.0 - sass: 1.97.1 - terser: 5.44.1 - tsx: 4.21.0 - yaml: 2.8.3 - - vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): - dependencies: - '@oxc-project/runtime': 0.115.0 lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.8 - rolldown: 1.0.0-rc.9 + rolldown: 1.0.0-rc.10 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.12.0 - esbuild: 0.27.3 + esbuild: 0.27.4 fsevents: 2.3.3 jiti: 2.6.1 sass: 1.97.1 @@ -25534,17 +25526,16 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: - '@oxc-project/runtime': 0.115.0 lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.8 - rolldown: 1.0.0-rc.9 + rolldown: 1.0.0-rc.10 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.4.0 - esbuild: 0.27.3 + '@types/node': 25.5.0 + esbuild: 0.27.4 fsevents: 2.3.3 jiti: 2.6.1 sass: 1.97.1 @@ -25552,15 +25543,15 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vitefu@1.1.2(vite@8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitefu@1.1.2(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: - vite: 8.0.0(@types/node@25.4.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vitest-fetch-mock@0.4.5(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest-fetch-mock@0.4.5(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))): dependencies: - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.4)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 @@ -25588,7 +25579,7 @@ snapshots: optionalDependencies: '@types/debug': 4.1.12 '@types/node': 24.12.0 - happy-dom: 20.8.3 + happy-dom: 20.8.4 jsdom: 26.1.0(canvas@2.11.2) transitivePeerDependencies: - jiti @@ -25604,125 +25595,95 @@ snapshots: - tsx - yaml - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/pretty-format': 4.0.18 - '@vitest/runner': 4.0.18 - '@vitest/snapshot': 4.0.18 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.0 + '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.0 + '@vitest/runner': 4.1.0 + '@vitest/snapshot': 4.1.0 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 + es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.4 - std-env: 3.10.0 + std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 1.0.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + tinyrainbow: 3.1.0 + vite: 8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.12.0 - happy-dom: 20.8.3 + happy-dom: 20.8.4 jsdom: 26.1.0(canvas@2.11.2(encoding@0.1.13)) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/pretty-format': 4.0.18 - '@vitest/runner': 4.0.18 - '@vitest/snapshot': 4.0.18 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.0 + '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.0 + '@vitest/runner': 4.1.0 + '@vitest/snapshot': 4.1.0 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 + es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.4 - std-env: 3.10.0 + std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 1.0.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + tinyrainbow: 3.1.0 + vite: 8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.12.0 - happy-dom: 20.8.3 + happy-dom: 20.8.4 jsdom: 26.1.0(canvas@2.11.2) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(happy-dom@20.8.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/pretty-format': 4.0.18 - '@vitest/runner': 4.0.18 - '@vitest/snapshot': 4.0.18 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.0 + '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.0 + '@vitest/runner': 4.1.0 + '@vitest/snapshot': 4.1.0 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 + es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.4 - std-env: 3.10.0 + std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 1.0.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + tinyrainbow: 3.1.0 + vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 25.4.0 - happy-dom: 20.8.3 + '@types/node': 25.5.0 + happy-dom: 20.8.4 jsdom: 26.1.0(canvas@2.11.2) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml vscode-jsonrpc@8.2.0: {} @@ -25828,7 +25789,7 @@ snapshots: sockjs: 0.3.24 spdy: 4.0.2 webpack-dev-middleware: 7.4.5(webpack@5.104.1) - ws: 8.19.0 + ws: 8.20.0 optionalDependencies: webpack: 5.104.1 transitivePeerDependencies: @@ -25887,7 +25848,7 @@ snapshots: - esbuild - uglify-js - webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.3): + webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -25911,7 +25872,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.3)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.3)) + terser-webpack-plugin: 5.3.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.4)(webpack@5.104.1(@swc/core@1.15.18(@swc/helpers@0.5.17))(esbuild@0.27.4)) watchpack: 2.5.1 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -26024,7 +25985,7 @@ snapshots: ws@8.18.3: {} - ws@8.19.0: {} + ws@8.20.0: {} wsl-utils@0.1.0: dependencies: diff --git a/web/package.json b/web/package.json index ac2e54dc57..8007bc5d9d 100644 --- a/web/package.json +++ b/web/package.json @@ -100,7 +100,7 @@ "prettier-plugin-sort-json": "^4.1.1", "prettier-plugin-svelte": "^3.3.3", "rollup-plugin-visualizer": "^6.0.0", - "svelte": "5.53.13", + "svelte": "5.54.1", "svelte-check": "^4.1.5", "svelte-eslint-parser": "^1.3.3", "tailwindcss": "^4.2.2", From 958f270f0de5b6965159657a68cf5e25694e5696 Mon Sep 17 00:00:00 2001 From: Diogo Tavares Sendim Fernandes Date: Thu, 26 Mar 2026 18:11:05 +0000 Subject: [PATCH 041/156] fix(web): keep map view open after closing asset viewer (#26980) --- e2e/src/specs/web/album.e2e-spec.ts | 42 ++++++++++++++++++- .../components/album-page/album-map.svelte | 14 ++++++- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/e2e/src/specs/web/album.e2e-spec.ts b/e2e/src/specs/web/album.e2e-spec.ts index 953c7d00ae..cd8bb87582 100644 --- a/e2e/src/specs/web/album.e2e-spec.ts +++ b/e2e/src/specs/web/album.e2e-spec.ts @@ -1,6 +1,7 @@ import { LoginResponseDto } from '@immich/sdk'; -import { test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { expect, test } from '@playwright/test'; +import { readFileSync } from 'node:fs'; +import { testAssetDir, utils } from 'src/utils'; test.describe('Album', () => { let admin: LoginResponseDto; @@ -22,4 +23,41 @@ test.describe('Album', () => { await page.reload(); await page.getByRole('button', { name: 'Select photos' }).waitFor(); }); + + test('should keep map view open after viewing an asset from the map and going back', async ({ context, page }) => { + await utils.setAuthCookies(context, admin.accessToken); + + const imagePath = `${testAssetDir}/metadata/gps-position/thompson-springs.jpg`; + const mapAsset = await utils.createAsset(admin.accessToken, { + assetData: { + bytes: readFileSync(imagePath), + filename: 'thompson-springs.jpg', + }, + }); + + await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); + + const mapAlbum = await utils.createAlbum(admin.accessToken, { + albumName: 'Map Test Album', + assetIds: [mapAsset.id], + }); + + await page.goto(`/albums/${mapAlbum.id}`); + const mapButton = page.getByRole('button', { name: 'Map' }); + await expect(mapButton).toBeVisible(); + await mapButton.click(); + + const mapModal = page.getByRole('dialog'); + await expect(mapModal).toBeVisible(); + + const mapMarker = mapModal.getByRole('img', { name: /Map marker/i }).first(); + await expect(mapMarker).toBeVisible(); + await mapMarker.click(); + + await page.waitForSelector('#immich-asset-viewer'); + await page.getByRole('button', { name: 'Go back' }).click(); + + await expect(page.locator('#immich-asset-viewer')).not.toBeVisible(); + await expect(mapModal).toBeVisible(); + }); }); diff --git a/web/src/lib/components/album-page/album-map.svelte b/web/src/lib/components/album-page/album-map.svelte index 455a99f755..623ac48ded 100644 --- a/web/src/lib/components/album-page/album-map.svelte +++ b/web/src/lib/components/album-page/album-map.svelte @@ -2,6 +2,7 @@ import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { authManager } from '$lib/managers/auth-manager.svelte'; import MapModal from '$lib/modals/MapModal.svelte'; + import { navigate } from '$lib/utils/navigation'; import { getAlbumInfo, type AlbumResponseDto, type MapMarkerResponseDto } from '@immich/sdk'; import { IconButton, modalManager } from '@immich/ui'; import { mdiMapOutline } from '@mdi/js'; @@ -15,6 +16,7 @@ let { album }: Props = $props(); let abortController: AbortController; + let returnToMap = $state(false); let mapMarkers: MapMarkerResponseDto[] = $state([]); onMount(async () => { @@ -26,6 +28,13 @@ assetViewerManager.showAssetViewer(false); }); + $effect(() => { + if (!assetViewerManager.isViewing && returnToMap) { + returnToMap = false; + void onClick(); + } + }); + async function loadMapMarkers() { if (abortController) { abortController.abort(); @@ -54,7 +63,10 @@ const onClick = async () => { const assetIds = await modalManager.show(MapModal, { mapMarkers }); if (assetIds) { - await assetViewerManager.setAssetId(assetIds[0]); + await navigate({ targetRoute: 'current', assetId: assetIds[0] }); + returnToMap = true; + } else { + returnToMap = false; } }; From 448c069fb6148c8539ed905013d885f3a16dc88d Mon Sep 17 00:00:00 2001 From: Robin Wohlers-Reichel Date: Thu, 26 Mar 2026 19:13:01 +0100 Subject: [PATCH 042/156] feat(web): add shortcuts to rotate images (#26927) --- .../components/asset-viewer/editor/editor-panel.svelte | 9 +++++++-- .../editor/transform-tool/transform-tool.svelte | 8 ++++++++ web/src/lib/services/asset.service.ts | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/web/src/lib/components/asset-viewer/editor/editor-panel.svelte b/web/src/lib/components/asset-viewer/editor/editor-panel.svelte index d9a344cdc8..2ed519da4d 100644 --- a/web/src/lib/components/asset-viewer/editor/editor-panel.svelte +++ b/web/src/lib/components/asset-viewer/editor/editor-panel.svelte @@ -1,5 +1,5 @@ - +
diff --git a/web/src/lib/components/asset-viewer/editor/transform-tool/transform-tool.svelte b/web/src/lib/components/asset-viewer/editor/transform-tool/transform-tool.svelte index 1850389581..54ab126dfa 100644 --- a/web/src/lib/components/asset-viewer/editor/transform-tool/transform-tool.svelte +++ b/web/src/lib/components/asset-viewer/editor/transform-tool/transform-tool.svelte @@ -1,4 +1,5 @@ + rotateImage(90) }, + { shortcut: { key: '[' }, onShortcut: () => rotateImage(-90) }, + ]} +/> +

{$t('editor_orientation')}

diff --git a/web/src/lib/services/asset.service.ts b/web/src/lib/services/asset.service.ts index 76ac0b7fc0..baade8facd 100644 --- a/web/src/lib/services/asset.service.ts +++ b/web/src/lib/services/asset.service.ts @@ -248,6 +248,7 @@ export const getAssetActions = ($t: MessageFormatter, asset: AssetResponseDto) = !asset.originalPath.toLowerCase().endsWith('.gif') && !asset.originalPath.toLowerCase().endsWith('.svg'), onAction: () => assetViewerManager.openEditor(), + shortcuts: [{ key: 'e' }], }; const RefreshFacesJob: ActionItem = { From 47b45453c8181bc1fbe100d479584ab61ba52fa6 Mon Sep 17 00:00:00 2001 From: Mees Frensel <33722705+meesfrensel@users.noreply.github.com> Date: Thu, 26 Mar 2026 19:15:42 +0100 Subject: [PATCH 043/156] chore(web): refactor activity status (#26956) * chore(web): refactor activity status * fix: size change --------- Co-authored-by: Jason Rasmussen --- .../asset-viewer/activity-status.svelte | 47 ++++++++++++------- .../[[assetId=id]]/+page.svelte | 4 +- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/web/src/lib/components/asset-viewer/activity-status.svelte b/web/src/lib/components/asset-viewer/activity-status.svelte index 6bd90fc5f0..617f89bc29 100644 --- a/web/src/lib/components/asset-viewer/activity-status.svelte +++ b/web/src/lib/components/asset-viewer/activity-status.svelte @@ -2,7 +2,7 @@ import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { locale } from '$lib/stores/preferences.store'; import type { ActivityResponseDto } from '@immich/sdk'; - import { Icon } from '@immich/ui'; + import { Button } from '@immich/ui'; import { mdiCommentOutline, mdiThumbUp, mdiThumbUpOutline } from '@mdi/js'; interface Props { @@ -16,21 +16,32 @@ let { isLiked, numberOfComments, numberOfLikes, disabled, onFavorite }: Props = $props(); -
- - +
+ +
diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 9010efe535..fd77a71466 100644 --- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -439,8 +439,8 @@ {/if} - {#if showActivityStatus && !activityManager.isLoading} -
+ {#if showActivityStatus} +
Date: Thu, 26 Mar 2026 19:20:25 +0100 Subject: [PATCH 044/156] feat(server): add checksum algorithm field (#26573) * feat: add checksum algorithm field * fix comments * chore: rename migration --------- Co-authored-by: Jason Rasmussen --- server/src/database.ts | 3 +++ server/src/dtos/asset-response.dto.ts | 3 ++- server/src/enum.ts | 5 +++++ server/src/queries/asset.job.repository.sql | 1 + server/src/schema/enums.ts | 7 ++++++- .../1774548649115-AddChecksumAlgorithm.ts.ts | 21 +++++++++++++++++++ server/src/schema/tables/asset.table.ts | 7 +++++-- server/src/services/asset-media.service.ts | 3 +++ server/src/services/library.service.ts | 13 +++++++++++- server/src/services/metadata.service.spec.ts | 4 ++++ server/src/services/metadata.service.ts | 2 ++ server/test/factories/asset.factory.ts | 3 ++- server/test/mappers.ts | 1 + server/test/medium.factory.ts | 2 ++ 14 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 server/src/schema/migrations/1774548649115-AddChecksumAlgorithm.ts.ts diff --git a/server/src/database.ts b/server/src/database.ts index f4878b2cee..4f339624e6 100644 --- a/server/src/database.ts +++ b/server/src/database.ts @@ -5,6 +5,7 @@ import { AssetFileType, AssetType, AssetVisibility, + ChecksumAlgorithm, MemoryType, Permission, PluginContext, @@ -112,6 +113,7 @@ export type Memory = { export type Asset = { id: string; checksum: Buffer; + checksumAlgorithm: ChecksumAlgorithm; deviceAssetId: string; deviceId: string; fileCreatedAt: Date; @@ -330,6 +332,7 @@ export const columns = { asset: [ 'asset.id', 'asset.checksum', + 'asset.checksumAlgorithm', 'asset.deviceAssetId', 'asset.deviceId', 'asset.fileCreatedAt', diff --git a/server/src/dtos/asset-response.dto.ts b/server/src/dtos/asset-response.dto.ts index 8b38b2e124..2c2f57bbb2 100644 --- a/server/src/dtos/asset-response.dto.ts +++ b/server/src/dtos/asset-response.dto.ts @@ -13,7 +13,7 @@ import { } from 'src/dtos/person.dto'; import { TagResponseDto, mapTag } from 'src/dtos/tag.dto'; import { UserResponseDto, mapUser } from 'src/dtos/user.dto'; -import { AssetStatus, AssetType, AssetVisibility } from 'src/enum'; +import { AssetStatus, AssetType, AssetVisibility, ChecksumAlgorithm } from 'src/enum'; import { ImageDimensions, MaybeDehydrated } from 'src/types'; import { getDimensions } from 'src/utils/asset.util'; import { hexOrBufferToBase64 } from 'src/utils/bytes'; @@ -148,6 +148,7 @@ export type MapAsset = { updateId: string; status: AssetStatus; checksum: Buffer; + checksumAlgorithm: ChecksumAlgorithm; deviceAssetId: string; deviceId: string; duplicateId: string | null; diff --git a/server/src/enum.ts b/server/src/enum.ts index 60f45efd6e..1277a39036 100644 --- a/server/src/enum.ts +++ b/server/src/enum.ts @@ -37,6 +37,11 @@ export enum AssetType { Other = 'OTHER', } +export enum ChecksumAlgorithm { + sha1File = 'sha1', // sha1 checksum of the whole file contents + sha1Path = 'sha1-path', // sha1 checksum of "path:" plus the file path, currently used in external libraries, deprecated +} + export enum AssetFileType { /** * An full/large-size image extracted/converted from RAW photos diff --git a/server/src/queries/asset.job.repository.sql b/server/src/queries/asset.job.repository.sql index cf5b8f02dc..554aa3b195 100644 --- a/server/src/queries/asset.job.repository.sql +++ b/server/src/queries/asset.job.repository.sql @@ -249,6 +249,7 @@ where select "asset"."id", "asset"."checksum", + "asset"."checksumAlgorithm", "asset"."deviceAssetId", "asset"."deviceId", "asset"."fileCreatedAt", diff --git a/server/src/schema/enums.ts b/server/src/schema/enums.ts index c68f152779..f63a09c462 100644 --- a/server/src/schema/enums.ts +++ b/server/src/schema/enums.ts @@ -1,5 +1,5 @@ import { registerEnum } from '@immich/sql-tools'; -import { AssetStatus, AssetVisibility, SourceType } from 'src/enum'; +import { AssetStatus, AssetVisibility, ChecksumAlgorithm, SourceType } from 'src/enum'; export const assets_status_enum = registerEnum({ name: 'assets_status_enum', @@ -15,3 +15,8 @@ export const asset_visibility_enum = registerEnum({ name: 'asset_visibility_enum', values: Object.values(AssetVisibility), }); + +export const asset_checksum_algorithm_enum = registerEnum({ + name: 'asset_checksum_algorithm_enum', + values: Object.values(ChecksumAlgorithm), +}); diff --git a/server/src/schema/migrations/1774548649115-AddChecksumAlgorithm.ts.ts b/server/src/schema/migrations/1774548649115-AddChecksumAlgorithm.ts.ts new file mode 100644 index 0000000000..477e7d0e48 --- /dev/null +++ b/server/src/schema/migrations/1774548649115-AddChecksumAlgorithm.ts.ts @@ -0,0 +1,21 @@ +import { Kysely, sql } from 'kysely'; + +export async function up(db: Kysely): Promise { + await sql`CREATE TYPE "asset_checksum_algorithm_enum" AS ENUM ('sha1','sha1-path');`.execute(db); + await sql`ALTER TABLE "asset" ADD "checksumAlgorithm" asset_checksum_algorithm_enum;`.execute(db); + + await sql` + UPDATE "asset" + SET "checksumAlgorithm" = CASE + WHEN "isExternal" = true THEN 'sha1-path'::asset_checksum_algorithm_enum + ELSE 'sha1'::asset_checksum_algorithm_enum + END + `.execute(db); + + await sql`ALTER TABLE "asset" ALTER COLUMN "checksumAlgorithm" SET NOT NULL;`.execute(db); +} + +export async function down(db: Kysely): Promise { + await sql`ALTER TABLE "asset" DROP COLUMN "checksumAlgorithm";`.execute(db); + await sql`DROP TYPE "asset_checksum_algorithm_enum";`.execute(db); +} diff --git a/server/src/schema/tables/asset.table.ts b/server/src/schema/tables/asset.table.ts index 8bdaa59bc6..7418dab102 100644 --- a/server/src/schema/tables/asset.table.ts +++ b/server/src/schema/tables/asset.table.ts @@ -12,8 +12,8 @@ import { UpdateDateColumn, } from '@immich/sql-tools'; import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { AssetStatus, AssetType, AssetVisibility } from 'src/enum'; -import { asset_visibility_enum, assets_status_enum } from 'src/schema/enums'; +import { AssetStatus, AssetType, AssetVisibility, ChecksumAlgorithm } from 'src/enum'; +import { asset_checksum_algorithm_enum, asset_visibility_enum, assets_status_enum } from 'src/schema/enums'; import { asset_delete_audit } from 'src/schema/functions'; import { LibraryTable } from 'src/schema/tables/library.table'; import { StackTable } from 'src/schema/tables/stack.table'; @@ -95,6 +95,9 @@ export class AssetTable { @Column({ type: 'bytea', index: true }) checksum!: Buffer; // sha1 checksum + @Column({ enum: asset_checksum_algorithm_enum }) + checksumAlgorithm!: ChecksumAlgorithm; + @ForeignKeyColumn(() => AssetTable, { nullable: true, onUpdate: 'CASCADE', onDelete: 'SET NULL' }) livePhotoVideoId!: string | null; diff --git a/server/src/services/asset-media.service.ts b/server/src/services/asset-media.service.ts index 03677054ec..8b8efd19c5 100644 --- a/server/src/services/asset-media.service.ts +++ b/server/src/services/asset-media.service.ts @@ -27,6 +27,7 @@ import { AssetStatus, AssetVisibility, CacheControl, + ChecksumAlgorithm, JobName, Permission, StorageFolder, @@ -425,6 +426,7 @@ export class AssetMediaService extends BaseService { deviceId: asset.deviceId, type: asset.type, checksum: asset.checksum, + checksumAlgorithm: asset.checksumAlgorithm, fileCreatedAt: asset.fileCreatedAt, localDateTime: asset.localDateTime, fileModifiedAt: asset.fileModifiedAt, @@ -446,6 +448,7 @@ export class AssetMediaService extends BaseService { libraryId: null, checksum: file.checksum, + checksumAlgorithm: ChecksumAlgorithm.sha1File, originalPath: file.originalPath, deviceAssetId: dto.deviceAssetId, diff --git a/server/src/services/library.service.ts b/server/src/services/library.service.ts index 841fa4743c..9f2d69bab5 100644 --- a/server/src/services/library.service.ts +++ b/server/src/services/library.service.ts @@ -17,7 +17,17 @@ import { ValidateLibraryImportPathResponseDto, ValidateLibraryResponseDto, } from 'src/dtos/library.dto'; -import { AssetStatus, AssetType, CronJob, DatabaseLock, ImmichWorker, JobName, JobStatus, QueueName } from 'src/enum'; +import { + AssetStatus, + AssetType, + ChecksumAlgorithm, + CronJob, + DatabaseLock, + ImmichWorker, + JobName, + JobStatus, + QueueName, +} from 'src/enum'; import { ArgOf } from 'src/repositories/event.repository'; import { AssetSyncResult } from 'src/repositories/library.repository'; import { AssetTable } from 'src/schema/tables/asset.table'; @@ -400,6 +410,7 @@ export class LibraryService extends BaseService { ownerId, libraryId, checksum: this.cryptoRepository.hashSha1(`path:${assetPath}`), + checksumAlgorithm: ChecksumAlgorithm.sha1Path, originalPath: assetPath, fileCreatedAt: stat.mtime, diff --git a/server/src/services/metadata.service.spec.ts b/server/src/services/metadata.service.spec.ts index cb35e21d0a..f9d17079e3 100644 --- a/server/src/services/metadata.service.spec.ts +++ b/server/src/services/metadata.service.spec.ts @@ -7,6 +7,7 @@ import { AssetFileType, AssetType, AssetVisibility, + ChecksumAlgorithm, ExifOrientation, ImmichWorker, JobName, @@ -652,6 +653,7 @@ describe(MetadataService.name, () => { expect(mocks.assetJob.getForMetadataExtraction).toHaveBeenCalledWith(asset.id); expect(mocks.asset.create).toHaveBeenCalledWith({ checksum: expect.any(Buffer), + checksumAlgorithm: ChecksumAlgorithm.sha1File, deviceAssetId: 'NONE', deviceId: 'NONE', fileCreatedAt: asset.fileCreatedAt, @@ -705,6 +707,7 @@ describe(MetadataService.name, () => { expect(mocks.assetJob.getForMetadataExtraction).toHaveBeenCalledWith(asset.id); expect(mocks.asset.create).toHaveBeenCalledWith({ checksum: expect.any(Buffer), + checksumAlgorithm: ChecksumAlgorithm.sha1File, deviceAssetId: 'NONE', deviceId: 'NONE', fileCreatedAt: asset.fileCreatedAt, @@ -758,6 +761,7 @@ describe(MetadataService.name, () => { expect(mocks.storage.readFile).toHaveBeenCalledWith(asset.originalPath, expect.any(Object)); expect(mocks.asset.create).toHaveBeenCalledWith({ checksum: expect.any(Buffer), + checksumAlgorithm: ChecksumAlgorithm.sha1File, deviceAssetId: 'NONE', deviceId: 'NONE', fileCreatedAt: asset.fileCreatedAt, diff --git a/server/src/services/metadata.service.ts b/server/src/services/metadata.service.ts index bfbcb413c0..c2cf66ad57 100644 --- a/server/src/services/metadata.service.ts +++ b/server/src/services/metadata.service.ts @@ -14,6 +14,7 @@ import { AssetFileType, AssetType, AssetVisibility, + ChecksumAlgorithm, DatabaseLock, ExifOrientation, ImmichWorker, @@ -675,6 +676,7 @@ export class MetadataService extends BaseService { fileModifiedAt: stats.mtime, localDateTime: dates.localDateTime, checksum, + checksumAlgorithm: ChecksumAlgorithm.sha1File, ownerId: asset.ownerId, originalPath: StorageCore.getAndroidMotionPath(asset, motionAssetId), originalFileName: `${parse(asset.originalFileName).name}.mp4`, diff --git a/server/test/factories/asset.factory.ts b/server/test/factories/asset.factory.ts index 321a6f8ddd..9caec31d6f 100644 --- a/server/test/factories/asset.factory.ts +++ b/server/test/factories/asset.factory.ts @@ -1,5 +1,5 @@ import { Selectable } from 'kysely'; -import { AssetFileType, AssetStatus, AssetType, AssetVisibility } from 'src/enum'; +import { AssetFileType, AssetStatus, AssetType, AssetVisibility, ChecksumAlgorithm } from 'src/enum'; import { AssetTable } from 'src/schema/tables/asset.table'; import { StackTable } from 'src/schema/tables/stack.table'; import { AssetEditFactory } from 'test/factories/asset-edit.factory'; @@ -53,6 +53,7 @@ export class AssetFactory { updateId: newUuidV7(), status: AssetStatus.Active, checksum: newSha1(), + checksumAlgorithm: ChecksumAlgorithm.sha1File, deviceAssetId: '', deviceId: '', duplicateId: null, diff --git a/server/test/mappers.ts b/server/test/mappers.ts index 2f3b248576..3d5b34e9c0 100644 --- a/server/test/mappers.ts +++ b/server/test/mappers.ts @@ -125,6 +125,7 @@ export const getForMemory = (memory: ReturnType) => ({ export const getForMetadataExtraction = (asset: ReturnType) => ({ id: asset.id, checksum: asset.checksum, + checksumAlgorithm: asset.checksumAlgorithm, deviceAssetId: asset.deviceAssetId, deviceId: asset.deviceId, fileCreatedAt: asset.fileCreatedAt, diff --git a/server/test/medium.factory.ts b/server/test/medium.factory.ts index a8aa00c2a3..1906fc0ccb 100644 --- a/server/test/medium.factory.ts +++ b/server/test/medium.factory.ts @@ -12,6 +12,7 @@ import { AlbumUserRole, AssetType, AssetVisibility, + ChecksumAlgorithm, MemoryType, SourceType, SyncEntityType, @@ -547,6 +548,7 @@ const assetInsert = (asset: Partial> = {}) => { deviceId: '', originalFileName: '', checksum: randomBytes(32), + checksumAlgorithm: ChecksumAlgorithm.sha1File, type: AssetType.Image, originalPath: '/path/to/something.jpg', ownerId: 'not-a-valid-uuid', From 48fdd39d30010e5f23588014c5b75b4fd01216c1 Mon Sep 17 00:00:00 2001 From: Mees Frensel <33722705+meesfrensel@users.noreply.github.com> Date: Thu, 26 Mar 2026 19:24:46 +0100 Subject: [PATCH 045/156] feat(web): use ui pin input element (#27200) --- pnpm-lock.yaml | 34 ++--- .../PinCodeChangeForm.svelte | 15 +- .../PinCodeCreateForm.svelte | 11 +- .../user-settings-page/PinCodeInput.svelte | 129 ------------------ web/src/routes/auth/pin-prompt/+page.svelte | 13 +- 5 files changed, 36 insertions(+), 166 deletions(-) delete mode 100644 web/src/lib/components/user-settings-page/PinCodeInput.svelte diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 75ccb8fe35..1837d2c60a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3192,8 +3192,8 @@ packages: '@types/node': optional: true - '@internationalized/date@3.10.0': - resolution: {integrity: sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==} + '@internationalized/date@3.12.0': + resolution: {integrity: sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==} '@ioredis/commands@1.5.0': resolution: {integrity: sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==} @@ -5821,8 +5821,8 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bits-ui@2.16.0: - resolution: {integrity: sha512-utsUZE7W7MxOQF1jmSYfzUrt2nZxgkq0yPqQcBQ0WQDMq8ETd1yEiHlPpqhMrpKU7IivjSf4XVysDDy+UVkMUw==} + bits-ui@2.16.3: + resolution: {integrity: sha512-5hJ5dEhf5yPzkRFcxzgQHScGodeo0gK0MUUXrdLlRHWaBOBGZiacWLG96j/wwFatKwZvouw7q+sn14i0fx3RIg==} engines: {node: '>=20'} peerDependencies: '@internationalized/date': ^3.8.1 @@ -8825,8 +8825,8 @@ packages: engines: {node: '>= 20'} hasBin: true - marked@17.0.3: - resolution: {integrity: sha512-jt1v2ObpyOKR8p4XaUJVk3YWRJ5n+i4+rjQopxvV32rSndTJXvIzuUdWWIy/1pFQMkQmvTXawzDNqOH/CUmx6A==} + marked@17.0.5: + resolution: {integrity: sha512-6hLvc0/JEbRjRgzI6wnT2P1XuM1/RrrDEX0kPt0N7jGm1133g6X7DlxFasUIx+72aKAr904GTxhSLDrd5DIlZg==} engines: {node: '>= 20'} hasBin: true @@ -10987,8 +10987,8 @@ packages: resolution: {integrity: sha512-i/w5Ie4tENfGYbdCo2iJ+oies0vOFd8QXWHopKOUzudfLCvnmeheF2PpHp89Z2azpc+c2su3lMiWO/SpP+429A==} engines: {node: '>=0.12.18'} - simple-icons@16.9.0: - resolution: {integrity: sha512-aKst2C7cLkFyaiQ/Crlwxt9xYOpGPk05XuJZ0ZTJNNCzHCKYrGWz2ebJSi5dG8CmTCxUF/BGs6A8uyJn/EQxqw==} + simple-icons@16.13.0: + resolution: {integrity: sha512-N4AMZvFERU5YLEtUudtUesiM2H4O5xQ9qfS3K0oOV5II5KVtxOUAlmZ7KqBgiTSGBgCVkuLD/Z9dJKBtnI3kKQ==} engines: {node: '>=0.12.18'} sirv@2.0.4: @@ -15130,18 +15130,18 @@ snapshots: '@immich/svelte-markdown-preprocess@0.2.1(svelte@5.54.1)': dependencies: front-matter: 4.0.2 - marked: 17.0.3 + marked: 17.0.5 node-emoji: 2.2.0 svelte: 5.54.1 '@immich/ui@0.69.0(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)': dependencies: '@immich/svelte-markdown-preprocess': 0.2.1(svelte@5.54.1) - '@internationalized/date': 3.10.0 + '@internationalized/date': 3.12.0 '@mdi/js': 7.4.47 - bits-ui: 2.16.0(@internationalized/date@3.10.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + bits-ui: 2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) luxon: 3.7.2 - simple-icons: 16.9.0 + simple-icons: 16.13.0 svelte: 5.54.1 svelte-highlight: 7.9.0 tailwind-merge: 3.5.0 @@ -15290,7 +15290,7 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@internationalized/date@3.10.0': + '@internationalized/date@3.12.0': dependencies: '@swc/helpers': 0.5.17 @@ -18126,11 +18126,11 @@ snapshots: binary-extensions@2.3.0: {} - bits-ui@2.16.0(@internationalized/date@3.10.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): + bits-ui@2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): dependencies: '@floating-ui/core': 1.7.3 '@floating-ui/dom': 1.7.4 - '@internationalized/date': 3.10.0 + '@internationalized/date': 3.12.0 esm-env: 1.2.2 runed: 0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) svelte: 5.54.1 @@ -21579,7 +21579,7 @@ snapshots: marked@16.4.2: {} - marked@17.0.3: {} + marked@17.0.5: {} math-intrinsics@1.1.0: {} @@ -24323,7 +24323,7 @@ snapshots: simple-icons@15.22.0: {} - simple-icons@16.9.0: {} + simple-icons@16.13.0: {} sirv@2.0.4: dependencies: diff --git a/web/src/lib/components/user-settings-page/PinCodeChangeForm.svelte b/web/src/lib/components/user-settings-page/PinCodeChangeForm.svelte index f230a01ba5..afab0c6819 100644 --- a/web/src/lib/components/user-settings-page/PinCodeChangeForm.svelte +++ b/web/src/lib/components/user-settings-page/PinCodeChangeForm.svelte @@ -1,9 +1,8 @@ - -
- {#if label} - - {/if} -
- {#each { length: pinLength } as _, index (index)} - handleInput(event, index)} - aria-label={`PIN digit ${index + 1} of ${pinLength}${label ? ` for ${label}` : ''}`} - /> - {/each} -
-
diff --git a/web/src/routes/auth/pin-prompt/+page.svelte b/web/src/routes/auth/pin-prompt/+page.svelte index c14d4cf423..a0f8bdcc36 100644 --- a/web/src/routes/auth/pin-prompt/+page.svelte +++ b/web/src/routes/auth/pin-prompt/+page.svelte @@ -2,11 +2,10 @@ import { goto } from '$app/navigation'; import AuthPageLayout from '$lib/components/layouts/AuthPageLayout.svelte'; import PinCodeCreateForm from '$lib/components/user-settings-page/PinCodeCreateForm.svelte'; - import PincodeInput from '$lib/components/user-settings-page/PinCodeInput.svelte'; import { Route } from '$lib/route'; import { handleError } from '$lib/utils/handle-error'; import { unlockAuthSession } from '@immich/sdk'; - import { Button, Icon } from '@immich/ui'; + import { Button, Icon, PinInput } from '@immich/ui'; import { mdiLockOpenVariantOutline, mdiLockOutline, mdiLockSmart } from '@mdi/js'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; @@ -55,15 +54,7 @@

{$t('enter_your_pin_code_subtitle')}

- + {:else}
From 8c6adf71577eaf9af565b03b891e28e3564efedb Mon Sep 17 00:00:00 2001 From: Phlogi Date: Thu, 26 Mar 2026 19:33:55 +0100 Subject: [PATCH 046/156] feat(server): resolve duplicates (#25316) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(web): Synchronize information from deduplicated images * Added new settings menu to the the deduplication tab. * The toggable options in the settings are synchronization of: albums, favorites, ratings, description, visibility and location. * When synchronizing the albums, the resolved images will be added to all albums of the duplicates. * When synchronizing the favorite status, the resolved images will be marked as favorite, if at least one selectable image is marked as favorite. * When synchronizing the ratings, the highest rating from the selectable images will be applied to the resolved image. * When synchronizing the description, all descriptions from the selectable images will be merged into one description for the resolved image. * When synchronizing the visibility, the most restrictive visibility setting from the selectable images will be applied to the resolved image. * When synchronizing the location, if exactly one unique location exists among the selectable images, this location will be applied to the resolved image. * There is no additional UI for these settings to keep the visual clutter minimal. The settings are applied automatically based on the user's preferences. * Replace addAssetToAlbums with copyAsset * fix linter * feat(web): add duplicate sync fields and fix typo * feat(web): add tag sync and enhance duplicate resolution This update introduces tag synchronization for duplicate resolution, ensuring all unique tag IDs from duplicates are applied to kept assets. The visibility sync logic is updated to use a simplified ordering, as the hidden status items will never show up in a duplicate set. Album synchronization now merges albums directly via addAssetsToAlbums; as the approach with copyAsset API endpoint was ineffiecient. Description, rating, and location sync logic is improved for correctness. and deduplication. i18n strings were added / updated. * feat(server): move duplicate resolution to backend with sync and stacking Moves duplicate metadata synchronization from frontend to backend, enabling robust batch operations and proper validation. This is an improved refactor of PR #13851. New endpoints: - POST /duplicates/resolve - batch resolve with configurable metadata sync - POST /duplicates/stack - create stacks from duplicate groups - GET /duplicates - now includes suggestedKeepAssetIds based on file size and EXIF Key changes: - Move sync logic (albums, tags, favorites, ratings, descriptions, location, visibility) to server - Add server-side metadata merge policies with proper conflict resolution - Replace client-side resolution logic with new backend endpoints - Add comprehensive E2E tests (70+ test cases) and unit tests - Update OpenAPI specs and TypeScript SDK No breaking changes - only additions to existing API. * feat(preferences): enable all duplicate sync settings by default * chore: clean up * chore: clean up * refactor: rename & clean up * fix: preference upgrade * chore: linting * refactor(e2e): use updateAssets API for setAssetDuplicateId * fix: visibility sync logic in duplicate resolution * fix(duplicate): write description to exifUpdate Previously the duplicate resolution populated assetUpdate.description even though description belongs to exif info. * fix(duplicate): remove redundant updateLockedColumns wrapper updateAllExif already computes lockedProperties via distinctLocked using Object.keys(options). The wrapper added a lockedProperties key to the options object, causing the spurious string 'lockedProperties' to be stored in the lockedProperties array. * fix(duplicate): write merged tags to asset_exif to survive metadata re-extraction During duplicate resolution, replaceAssetTags correctly wrote merged tag IDs to the tag_asset table, but never updated asset_exif.tags or locked the tags property. The subsequent SidecarWrite → AssetExtractMetadata chain calls applyTagList, which destructively replaces tag_asset rows with whatever is in asset_exif.tags — still the original per-asset tags, not the merged set. Write merged tag values to asset_exif.tags via updateAllExif (which also locks the property via distinctLocked), and queue SidecarWrite when tags change so they persist to the sidecar file. * docs(duplicates): clarify location and tag sync behavior * refactor(duplicate): remove sync settings, always sync all metadata on resolve Remove DuplicateSyncSettingsDto and the per-field sync toggles (albums, favorites, rating, description, visibility, location, tags). Duplicate resolution now unconditionally syncs all metadata from trashed assets to kept assets. - Remove DuplicateSyncSettingsDto and settings field from DuplicateResolveDto - Update DuplicateService to always run all sync logic without conditionals - Delete DuplicateSettingsModal.svelte and settings gear button from UI - Remove DuplicateSettings type and duplicateSettings persisted store - Update unit and e2e tests to remove settings from resolve requests * docs: update duplicates utility to reflect automatic metadata sync * docs(web): replace duplicates info modal with link to documentation * chore: clean up * fix: add missing type cast to jsonAgg in duplicate repository getAll * fix: skip persisting rating=0 in duplicate merge to avoid unnecessary sidecar write --------- Co-authored-by: Toni <51962051+EinToni@users.noreply.github.com> Co-authored-by: Jason Rasmussen Co-authored-by: Jason Rasmussen --- docs/docs/features/duplicates-utility.md | 28 + e2e/src/api/specs/duplicate.e2e-spec.ts | 651 ++++++++++++++++++ e2e/src/fixtures.ts | 2 + e2e/src/utils.ts | 3 + i18n/en.json | 10 +- mobile/openapi/README.md | 3 + mobile/openapi/lib/api.dart | 2 + mobile/openapi/lib/api/duplicates_api.dart | 59 ++ mobile/openapi/lib/api_client.dart | 4 + .../lib/model/bulk_id_error_reason.dart | 3 + .../lib/model/bulk_id_response_dto.dart | 22 +- .../lib/model/duplicate_resolve_dto.dart | 100 +++ .../model/duplicate_resolve_group_dto.dart | 121 ++++ .../lib/model/duplicate_response_dto.dart | 17 +- open-api/immich-openapi-specs.json | 125 +++- open-api/typescript-sdk/src/fetch-client.ts | 35 +- .../controllers/duplicate.controller.spec.ts | 47 ++ .../src/controllers/duplicate.controller.ts | 18 +- server/src/dtos/asset-ids.response.dto.ts | 2 + server/src/dtos/duplicate.dto.ts | 26 + server/src/queries/access.repository.sql | 10 + server/src/queries/album.repository.sql | 22 + server/src/queries/duplicate.repository.sql | 109 ++- server/src/repositories/access.repository.ts | 26 +- server/src/repositories/album.repository.ts | 45 +- .../src/repositories/duplicate.repository.ts | 116 +++- server/src/services/duplicate.service.spec.ts | 218 +++++- server/src/services/duplicate.service.ts | 283 +++++++- server/src/utils/access.ts | 5 + server/src/utils/duplicate.spec.ts | 178 +++++ server/src/utils/duplicate.ts | 60 ++ server/test/mappers.ts | 10 +- .../repositories/access.repository.mock.ts | 4 + web/src/lib/components/LinkToDocs.svelte | 16 + .../duplicates-compare-control.svelte | 16 +- .../modals/DuplicatesInformationModal.svelte | 22 - web/src/lib/route.ts | 6 + web/src/lib/stores/preferences.store.ts | 2 +- web/src/lib/utils/duplicate-utils.spec.ts | 37 - web/src/lib/utils/duplicate-utils.ts | 30 - web/src/lib/utils/persisted.ts | 16 +- .../[[assetId=id]]/+page.svelte | 85 ++- 42 files changed, 2385 insertions(+), 209 deletions(-) create mode 100644 docs/docs/features/duplicates-utility.md create mode 100644 e2e/src/api/specs/duplicate.e2e-spec.ts create mode 100644 mobile/openapi/lib/model/duplicate_resolve_dto.dart create mode 100644 mobile/openapi/lib/model/duplicate_resolve_group_dto.dart create mode 100644 server/src/controllers/duplicate.controller.spec.ts create mode 100644 server/src/utils/duplicate.spec.ts create mode 100644 server/src/utils/duplicate.ts create mode 100644 web/src/lib/components/LinkToDocs.svelte delete mode 100644 web/src/lib/modals/DuplicatesInformationModal.svelte delete mode 100644 web/src/lib/utils/duplicate-utils.spec.ts delete mode 100644 web/src/lib/utils/duplicate-utils.ts diff --git a/docs/docs/features/duplicates-utility.md b/docs/docs/features/duplicates-utility.md new file mode 100644 index 0000000000..f790c42708 --- /dev/null +++ b/docs/docs/features/duplicates-utility.md @@ -0,0 +1,28 @@ +# Duplicates Utility + +Immich comes with a duplicates utility to help you detect assets that look visually similar. The duplicate detection feature relies on machine learning and is enabled by default. For more information about when the duplicate detection job runs, see [Jobs and Workers](/administration/jobs-workers). Once an asset has been processed and added to a duplicate group, it becomes available to review in the "Review duplicates" utility, which can be found [here](https://my.immich.app/utilities/duplicates). + +## Reviewing duplicates + +The review duplicates page allows the user to individually select which assets should be kept and which ones should be trashed. When more than one asset is kept, there is an option to automatically put the kept assets into a stack. + +### Automatic preselection + +When using "Deduplicate All" or viewing suggestions, Immich automatically preselects which assets to keep based on: + +1. **Image size in bytes** — larger files are preferred as they typically have higher quality. +2. **Count of EXIF data** — assets with more metadata are preferred. + +### Synchronizing metadata + +When resolving duplicates, metadata from trashed assets is automatically synchronized to the kept assets. The following metadata is synchronized: + +| Name | Description | +| ----------- | ------------------------------------------------------------------------------------------------------------------------------- | +| Album | The kept assets will be added to _every_ album that the other assets in the group belong to. | +| Favorite | If any of the assets in the group have been added to favorites, every kept asset will also be added to favorites. | +| Rating | If one or more assets in the duplicate group have a rating, the highest rating is selected and synchronized to the kept assets. | +| Description | Descriptions from each asset are combined together and synchronized to all the kept assets. | +| Visibility | The most restrictive visibility is applied to the kept assets. | +| Location | Latitude and longitude are copied if all assets with geolocation data in the group share the same coordinates. | +| Tag | Tags from all assets in the group are merged and applied to every kept asset. | diff --git a/e2e/src/api/specs/duplicate.e2e-spec.ts b/e2e/src/api/specs/duplicate.e2e-spec.ts new file mode 100644 index 0000000000..d6d0ec1394 --- /dev/null +++ b/e2e/src/api/specs/duplicate.e2e-spec.ts @@ -0,0 +1,651 @@ +import { LoginResponseDto } from '@immich/sdk'; +import { createUserDto, uuidDto } from 'src/fixtures'; +import { errorDto } from 'src/responses'; +import { app, utils } from 'src/utils'; +import request from 'supertest'; +import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; + +describe('/duplicates', () => { + let admin: LoginResponseDto; + let user1: LoginResponseDto; + let user2: LoginResponseDto; + + beforeAll(async () => { + await utils.resetDatabase(); + + admin = await utils.adminSetup(); + + [user1, user2] = await Promise.all([ + utils.userSetup(admin.accessToken, createUserDto.user1), + utils.userSetup(admin.accessToken, createUserDto.user2), + ]); + }); + + beforeEach(async () => { + // Reset assets, albums, tags, and stacks between tests to ensure clean state for repeated test runs + // Note: We don't reset users since they're set up once in beforeAll + // Stack must be reset before asset due to foreign key constraint + await utils.resetDatabase(['stack', 'asset', 'album', 'tag']); + }); + + describe('GET /duplicates', () => { + it('should return empty array when no duplicates', async () => { + const { status, body } = await request(app) + .get('/duplicates') + .set('Authorization', `Bearer ${user1.accessToken}`); + + expect(status).toBe(200); + expect(body).toEqual([]); + }); + + it('should return duplicate groups with suggestedKeepAssetIds', async () => { + // Create assets with different file sizes for duplicate detection + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + // Manually set duplicateId on both assets to create a duplicate group + const duplicateId = '00000000-0000-4000-8000-000000000001'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .get('/duplicates') + .set('Authorization', `Bearer ${user1.accessToken}`); + + expect(status).toBe(200); + expect(body).toEqual([ + { + duplicateId, + assets: expect.arrayContaining([ + expect.objectContaining({ id: asset1.id }), + expect.objectContaining({ id: asset2.id }), + ]), + suggestedKeepAssetIds: expect.any(Array), + }, + ]); + expect(body[0].suggestedKeepAssetIds.length).toBe(1); + }); + }); + + describe('POST /duplicates/resolve', () => { + it('should require authentication', async () => { + const { status, body } = await request(app) + .post('/duplicates/resolve') + .send({ + groups: [{ duplicateId: uuidDto.dummy, keepAssetIds: [], trashAssetIds: [] }], + }); + + expect(status).toBe(401); + expect(body).toEqual(errorDto.unauthorized); + }); + + it('should return failure for non-existent duplicate group', async () => { + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId: uuidDto.dummy, keepAssetIds: [], trashAssetIds: [] }], + }); + + expect(status).toBe(200); + expect(body).toEqual({ + status: 'COMPLETED', + results: [ + { + duplicateId: uuidDto.dummy, + status: 'FAILED', + reason: expect.stringContaining('not found or access denied'), + }, + ], + }); + }); + + it('should resolve duplicate group with keepers', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + const duplicateId = '00000000-0000-4000-8000-000000000002'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body).toEqual({ + status: 'COMPLETED', + results: [ + { + duplicateId, + status: 'SUCCESS', + }, + ], + }); + + // Verify side effects: duplicateId cleared on kept asset + const keptAsset = await utils.getAssetInfo(user1.accessToken, asset1.id); + expect(keptAsset.duplicateId).toBeNull(); + + // Verify side effects: trashed asset is trashed and duplicateId cleared + const trashedAsset = await utils.getAssetInfo(user1.accessToken, asset2.id); + expect(trashedAsset.isTrashed).toBe(true); + expect(trashedAsset.duplicateId).toBeNull(); + }); + + it('should reject when keepAssetIds and trashAssetIds overlap', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + const duplicateId = '00000000-0000-4000-8000-000000000003'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset1.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('FAILED'); + expect(body.results[0].reason).toContain('disjoint'); + }); + + it('should require keepAssetIds when partially trashing', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + const duplicateId = '00000000-0000-4000-8000-000000000004'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [], trashAssetIds: [asset1.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('FAILED'); + expect(body.results[0].reason).toContain('must cover all assets'); + }); + + it('should reject partial resolution (not all assets covered)', async () => { + const [asset1, asset2, asset3] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + const duplicateId = '00000000-0000-4000-8000-000000000010'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset3.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('FAILED'); + expect(body.results[0].reason).toContain('must cover all assets'); + }); + + it('should reject asset not in duplicate group', async () => { + const [asset1, asset2, outsideAsset] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + const duplicateId = '00000000-0000-4000-8000-000000000011'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [outsideAsset.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('FAILED'); + expect(body.results[0].reason).toContain('not a member of duplicate group'); + }); + + it('should allow trash-all without keepers', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + const duplicateId = '00000000-0000-4000-8000-000000000012'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [], trashAssetIds: [asset1.id, asset2.id] }], + }); + + expect(status).toBe(200); + expect(body).toEqual({ + status: 'COMPLETED', + results: [ + { + duplicateId, + status: 'SUCCESS', + }, + ], + }); + + // Verify both assets are trashed + const [asset1Info, asset2Info] = await Promise.all([ + utils.getAssetInfo(user1.accessToken, asset1.id), + utils.getAssetInfo(user1.accessToken, asset2.id), + ]); + + expect(asset1Info.isTrashed).toBe(true); + expect(asset1Info.duplicateId).toBeNull(); + expect(asset2Info.isTrashed).toBe(true); + expect(asset2Info.duplicateId).toBeNull(); + }); + + it('should reject cross-user duplicate group access', async () => { + const asset1 = await utils.createAsset(user1.accessToken); + const asset2 = await utils.createAsset(user2.accessToken); + + const duplicateId = '00000000-0000-4000-8000-000000000013'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user2.accessToken, asset2.id, duplicateId); + + // User1 tries to resolve a group containing user2's asset + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('FAILED'); + expect(body.results[0].reason).toContain('not a member of duplicate group'); + }); + + it('should synchronize favorites when enabled', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + // Mark one asset as favorite + await request(app) + .put('/assets') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ ids: [asset2.id], isFavorite: true }); + + const duplicateId = '00000000-0000-4000-8000-000000000020'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('SUCCESS'); + + // Verify favorite was synchronized to keeper + const keptAsset = await utils.getAssetInfo(user1.accessToken, asset1.id); + expect(keptAsset.isFavorite).toBe(true); + expect(keptAsset.duplicateId).toBeNull(); + }); + + it('should synchronize visibility when enabled', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + // Archive one asset + await utils.archiveAssets(user1.accessToken, [asset2.id]); + + const duplicateId = '00000000-0000-4000-8000-000000000021'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('SUCCESS'); + + // Verify visibility was synchronized to keeper + const keptAsset = await utils.getAssetInfo(user1.accessToken, asset1.id); + expect(keptAsset.visibility).toBe('archive'); + expect(keptAsset.duplicateId).toBeNull(); + }); + + it('should synchronize rating when enabled', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + // Set rating on one asset + await request(app) + .put('/assets') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ ids: [asset2.id], rating: 5 }); + + const duplicateId = '00000000-0000-4000-8000-000000000022'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('SUCCESS'); + + // Verify rating was synchronized to keeper + const keptAsset = await utils.getAssetInfo(user1.accessToken, asset1.id); + expect(keptAsset.exifInfo?.rating).toBe(5); + expect(keptAsset.duplicateId).toBeNull(); + }); + + it('should synchronize description when enabled', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + // Set description on one asset + await request(app) + .put('/assets') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ ids: [asset2.id], description: 'Test description for duplicate' }); + + const duplicateId = '00000000-0000-4000-8000-000000000023'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('SUCCESS'); + + // Verify description was synchronized to keeper + const keptAsset = await utils.getAssetInfo(user1.accessToken, asset1.id); + expect(keptAsset.exifInfo?.description).toBe('Test description for duplicate'); + expect(keptAsset.duplicateId).toBeNull(); + }); + + it('should synchronize location when enabled', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + // Set location on one asset + await request(app) + .put('/assets') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ ids: [asset2.id], latitude: 40.7128, longitude: -74.006 }); + + const duplicateId = '00000000-0000-4000-8000-000000000024'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('SUCCESS'); + + // Verify location was synchronized to keeper + const keptAsset = await utils.getAssetInfo(user1.accessToken, asset1.id); + expect(keptAsset.exifInfo?.latitude).toBe(40.7128); + expect(keptAsset.exifInfo?.longitude).toBe(-74.006); + expect(keptAsset.duplicateId).toBeNull(); + }); + + it('should synchronize albums when enabled', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + // Create albums and add assets to different albums + const album1 = await utils.createAlbum(user1.accessToken, { + albumName: 'Album 1', + assetIds: [asset1.id], + }); + const album2 = await utils.createAlbum(user1.accessToken, { + albumName: 'Album 2', + assetIds: [asset2.id], + }); + + const duplicateId = '00000000-0000-4000-8000-000000000025'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('SUCCESS'); + + // Verify keeper is now in both albums + const keptAsset = await utils.getAssetInfo(user1.accessToken, asset1.id); + expect(keptAsset.duplicateId).toBeNull(); + + // Check albums directly + const { status: album1Status, body: album1Body } = await request(app) + .get(`/albums/${album1.id}`) + .set('Authorization', `Bearer ${user1.accessToken}`); + const { status: album2Status, body: album2Body } = await request(app) + .get(`/albums/${album2.id}`) + .set('Authorization', `Bearer ${user1.accessToken}`); + + expect(album1Status).toBe(200); + expect(album2Status).toBe(200); + expect(album1Body.assets.map((a: any) => a.id)).toContain(asset1.id); + expect(album2Body.assets.map((a: any) => a.id)).toContain(asset1.id); + }); + + it('should synchronize tags when enabled', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + // Wait for metadata extraction to complete before adding tags + // Otherwise, metadata jobs will race and overwrite our tags + await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); + + // Create tags and tag assets differently + const tags = await utils.upsertTags(user1.accessToken, ['tag1', 'tag2']); + await utils.tagAssets(user1.accessToken, tags[0].id, [asset1.id]); + await utils.tagAssets(user1.accessToken, tags[1].id, [asset2.id]); + + const duplicateId = '00000000-0000-4000-8000-000000000026'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('SUCCESS'); + + // Verify keeper has both tags + const keptAsset = await utils.getAssetInfo(user1.accessToken, asset1.id); + expect(keptAsset.duplicateId).toBeNull(); + expect(keptAsset.tags).toBeDefined(); + const tagIds = keptAsset.tags?.map((t) => t.id) || []; + expect(tagIds).toContain(tags[0].id); + expect(tagIds).toContain(tags[1].id); + }); + + it('should handle batch resolve with mixed success and failure', async () => { + // Create first group that will succeed + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + const duplicateId1 = '00000000-0000-4000-8000-000000000027'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId1); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId1); + + // Create second group with non-existent duplicate ID (will fail) + const fakeId = '00000000-0000-4000-8000-000000000099'; + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [ + { duplicateId: duplicateId1, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }, + { duplicateId: fakeId, keepAssetIds: [], trashAssetIds: [] }, + ], + }); + + expect(status).toBe(200); + expect(body.status).toBe('COMPLETED'); + expect(body.results).toHaveLength(2); + + // First group should succeed + expect(body.results[0].duplicateId).toBe(duplicateId1); + expect(body.results[0].status).toBe('SUCCESS'); + + // Second group should fail + expect(body.results[1].duplicateId).toBe(fakeId); + expect(body.results[1].status).toBe('FAILED'); + expect(body.results[1].reason).toContain('not found or access denied'); + + // Verify first group was actually resolved despite second failure + const asset1Info = await utils.getAssetInfo(user1.accessToken, asset1.id); + expect(asset1Info.duplicateId).toBeNull(); + const asset2Info = await utils.getAssetInfo(user1.accessToken, asset2.id); + expect(asset2Info.isTrashed).toBe(true); + }); + + it('should trash assets when trash is enabled', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + const duplicateId = '00000000-0000-4000-8000-000000000028'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + // Ensure trash is enabled (default) + const config = await utils.getSystemConfig(admin.accessToken); + expect(config.trash.enabled).toBe(true); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('SUCCESS'); + + // Verify asset is trashed (not deleted) + const trashedAsset = await utils.getAssetInfo(user1.accessToken, asset2.id); + expect(trashedAsset.isTrashed).toBe(true); + }); + + it('should delete assets when trash is disabled', async () => { + const [asset1, asset2] = await Promise.all([ + utils.createAsset(user1.accessToken), + utils.createAsset(user1.accessToken), + ]); + + const duplicateId = '00000000-0000-4000-8000-000000000029'; + await utils.setAssetDuplicateId(user1.accessToken, asset1.id, duplicateId); + await utils.setAssetDuplicateId(user1.accessToken, asset2.id, duplicateId); + + // Disable trash + await request(app) + .put('/system-config') + .set('Authorization', `Bearer ${admin.accessToken}`) + .send({ + trash: { enabled: false, days: 30 }, + }); + + const { status, body } = await request(app) + .post('/duplicates/resolve') + .set('Authorization', `Bearer ${user1.accessToken}`) + .send({ + groups: [{ duplicateId, keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(status).toBe(200); + expect(body.results[0].status).toBe('SUCCESS'); + + // Asset should be marked as deleted (force delete) + const { status: getStatus } = await request(app) + .get(`/assets/${asset2.id}`) + .set('Authorization', `Bearer ${user1.accessToken}`); + + // Asset should still be accessible (soft deleted) but marked as deleted + expect(getStatus).toBe(200); + + // Re-enable trash for other tests + await utils.resetAdminConfig(admin.accessToken); + }); + }); +}); diff --git a/e2e/src/fixtures.ts b/e2e/src/fixtures.ts index 9e311c896d..1e03ad6d24 100644 --- a/e2e/src/fixtures.ts +++ b/e2e/src/fixtures.ts @@ -2,6 +2,8 @@ export const uuidDto = { invalid: 'invalid-uuid', // valid uuid v4 notFound: '00000000-0000-4000-a000-000000000000', + dummy: '00000000-0000-4000-a000-000000000001', + dummy2: '00000000-0000-4000-a000-000000000002', }; const adminLoginDto = { diff --git a/e2e/src/utils.ts b/e2e/src/utils.ts index a5567f0778..4d44d99e2f 100644 --- a/e2e/src/utils.ts +++ b/e2e/src/utils.ts @@ -510,6 +510,9 @@ export const utils = { createStack: (accessToken: string, assetIds: string[]) => createStack({ stackCreateDto: { assetIds } }, { headers: asBearerAuth(accessToken) }), + setAssetDuplicateId: (accessToken: string, assetId: string, duplicateId: string | null) => + updateAssets({ assetBulkUpdateDto: { ids: [assetId], duplicateId } }, { headers: asBearerAuth(accessToken) }), + upsertTags: (accessToken: string, tags: string[]) => upsertTags({ tagUpsertDto: { tags } }, { headers: asBearerAuth(accessToken) }), diff --git a/i18n/en.json b/i18n/en.json index 252664653c..42a89586f9 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -892,10 +892,8 @@ "day": "Day", "days": "Days", "deduplicate_all": "Deduplicate All", - "deduplication_criteria_1": "Image size in bytes", - "deduplication_criteria_2": "Count of EXIF data", - "deduplication_info": "Deduplication Info", - "deduplication_info_description": "To automatically preselect assets and remove duplicates in bulk, we look at:", + "default_locale": "Default Locale", + "default_locale_description": "Format dates and numbers based on your browser locale", "delete": "Delete", "delete_action_confirmation_message": "Are you sure you want to delete this asset? This action will move the asset to the server's trash and will prompt if you want to delete it locally", "delete_action_prompt": "{count} deleted", @@ -971,7 +969,7 @@ "downloading_media": "Downloading media", "drop_files_to_upload": "Drop files anywhere to upload", "duplicates": "Duplicates", - "duplicates_description": "Resolve each group by indicating which, if any, are duplicates", + "duplicates_description": "Resolve each group by indicating which, if any, are duplicates.", "duration": "Duration", "edit": "Edit", "edit_album": "Edit album", @@ -1392,6 +1390,7 @@ "like": "Like", "like_deleted": "Like deleted", "link_motion_video": "Link motion video", + "link_to_docs": "For more information, refer to the documentation.", "link_to_oauth": "Link to OAuth", "linked_oauth_account": "Linked OAuth account", "list": "List", @@ -2396,6 +2395,7 @@ "viewer_remove_from_stack": "Remove from Stack", "viewer_stack_use_as_main_asset": "Use as Main Asset", "viewer_unstack": "Un-Stack", + "visibility": "Visibility", "visibility_changed": "Visibility changed for {count, plural, one {# person} other {# people}}", "visual": "Visual", "visual_builder": "Visual builder", diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 500de51622..e79a60f98b 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -156,6 +156,7 @@ Class | Method | HTTP request | Description *DuplicatesApi* | [**deleteDuplicate**](doc//DuplicatesApi.md#deleteduplicate) | **DELETE** /duplicates/{id} | Delete a duplicate *DuplicatesApi* | [**deleteDuplicates**](doc//DuplicatesApi.md#deleteduplicates) | **DELETE** /duplicates | Delete duplicates *DuplicatesApi* | [**getAssetDuplicates**](doc//DuplicatesApi.md#getassetduplicates) | **GET** /duplicates | Retrieve duplicates +*DuplicatesApi* | [**resolveDuplicates**](doc//DuplicatesApi.md#resolveduplicates) | **POST** /duplicates/resolve | Resolve duplicate groups *FacesApi* | [**createFace**](doc//FacesApi.md#createface) | **POST** /faces | Create a face *FacesApi* | [**deleteFace**](doc//FacesApi.md#deleteface) | **DELETE** /faces/{id} | Delete a face *FacesApi* | [**getFaces**](doc//FacesApi.md#getfaces) | **GET** /faces | Retrieve faces for asset @@ -422,6 +423,8 @@ Class | Method | HTTP request | Description - [DownloadResponseDto](doc//DownloadResponseDto.md) - [DownloadUpdate](doc//DownloadUpdate.md) - [DuplicateDetectionConfig](doc//DuplicateDetectionConfig.md) + - [DuplicateResolveDto](doc//DuplicateResolveDto.md) + - [DuplicateResolveGroupDto](doc//DuplicateResolveGroupDto.md) - [DuplicateResponseDto](doc//DuplicateResponseDto.md) - [EmailNotificationsResponse](doc//EmailNotificationsResponse.md) - [EmailNotificationsUpdate](doc//EmailNotificationsUpdate.md) diff --git a/mobile/openapi/lib/api.dart b/mobile/openapi/lib/api.dart index 253e8a6811..6b554fb644 100644 --- a/mobile/openapi/lib/api.dart +++ b/mobile/openapi/lib/api.dart @@ -161,6 +161,8 @@ part 'model/download_response.dart'; part 'model/download_response_dto.dart'; part 'model/download_update.dart'; part 'model/duplicate_detection_config.dart'; +part 'model/duplicate_resolve_dto.dart'; +part 'model/duplicate_resolve_group_dto.dart'; part 'model/duplicate_response_dto.dart'; part 'model/email_notifications_response.dart'; part 'model/email_notifications_update.dart'; diff --git a/mobile/openapi/lib/api/duplicates_api.dart b/mobile/openapi/lib/api/duplicates_api.dart index 7fa7b368b5..e873537592 100644 --- a/mobile/openapi/lib/api/duplicates_api.dart +++ b/mobile/openapi/lib/api/duplicates_api.dart @@ -163,4 +163,63 @@ class DuplicatesApi { } return null; } + + /// Resolve duplicate groups + /// + /// Resolve duplicate groups by synchronizing metadata across assets and deleting/trashing duplicates. + /// + /// Note: This method returns the HTTP [Response]. + /// + /// Parameters: + /// + /// * [DuplicateResolveDto] duplicateResolveDto (required): + Future resolveDuplicatesWithHttpInfo(DuplicateResolveDto duplicateResolveDto,) async { + // ignore: prefer_const_declarations + final apiPath = r'/duplicates/resolve'; + + // ignore: prefer_final_locals + Object? postBody = duplicateResolveDto; + + final queryParams = []; + final headerParams = {}; + final formParams = {}; + + const contentTypes = ['application/json']; + + + return apiClient.invokeAPI( + apiPath, + 'POST', + queryParams, + postBody, + headerParams, + formParams, + contentTypes.isEmpty ? null : contentTypes.first, + ); + } + + /// Resolve duplicate groups + /// + /// Resolve duplicate groups by synchronizing metadata across assets and deleting/trashing duplicates. + /// + /// Parameters: + /// + /// * [DuplicateResolveDto] duplicateResolveDto (required): + Future?> resolveDuplicates(DuplicateResolveDto duplicateResolveDto,) async { + final response = await resolveDuplicatesWithHttpInfo(duplicateResolveDto,); + if (response.statusCode >= HttpStatus.badRequest) { + throw ApiException(response.statusCode, await _decodeBodyBytes(response)); + } + // When a remote server returns no body with a status of 204, we shall not decode it. + // At the time of writing this, `dart:convert` will throw an "Unexpected end of input" + // FormatException when trying to decode an empty string. + if (response.body.isNotEmpty && response.statusCode != HttpStatus.noContent) { + final responseBody = await _decodeBodyBytes(response); + return (await apiClient.deserializeAsync(responseBody, 'List') as List) + .cast() + .toList(growable: false); + + } + return null; + } } diff --git a/mobile/openapi/lib/api_client.dart b/mobile/openapi/lib/api_client.dart index bfe469e7c0..48e5f5874b 100644 --- a/mobile/openapi/lib/api_client.dart +++ b/mobile/openapi/lib/api_client.dart @@ -368,6 +368,10 @@ class ApiClient { return DownloadUpdate.fromJson(value); case 'DuplicateDetectionConfig': return DuplicateDetectionConfig.fromJson(value); + case 'DuplicateResolveDto': + return DuplicateResolveDto.fromJson(value); + case 'DuplicateResolveGroupDto': + return DuplicateResolveGroupDto.fromJson(value); case 'DuplicateResponseDto': return DuplicateResponseDto.fromJson(value); case 'EmailNotificationsResponse': diff --git a/mobile/openapi/lib/model/bulk_id_error_reason.dart b/mobile/openapi/lib/model/bulk_id_error_reason.dart index ea56e9dbba..fd6c61d6fd 100644 --- a/mobile/openapi/lib/model/bulk_id_error_reason.dart +++ b/mobile/openapi/lib/model/bulk_id_error_reason.dart @@ -27,6 +27,7 @@ class BulkIdErrorReason { static const noPermission = BulkIdErrorReason._(r'no_permission'); static const notFound = BulkIdErrorReason._(r'not_found'); static const unknown = BulkIdErrorReason._(r'unknown'); + static const validation = BulkIdErrorReason._(r'validation'); /// List of all possible values in this [enum][BulkIdErrorReason]. static const values = [ @@ -34,6 +35,7 @@ class BulkIdErrorReason { noPermission, notFound, unknown, + validation, ]; static BulkIdErrorReason? fromJson(dynamic value) => BulkIdErrorReasonTypeTransformer().decode(value); @@ -76,6 +78,7 @@ class BulkIdErrorReasonTypeTransformer { case r'no_permission': return BulkIdErrorReason.noPermission; case r'not_found': return BulkIdErrorReason.notFound; case r'unknown': return BulkIdErrorReason.unknown; + case r'validation': return BulkIdErrorReason.validation; default: if (!allowNull) { throw ArgumentError('Unknown enum value to decode: $data'); diff --git a/mobile/openapi/lib/model/bulk_id_response_dto.dart b/mobile/openapi/lib/model/bulk_id_response_dto.dart index cd122785dd..1fa8536964 100644 --- a/mobile/openapi/lib/model/bulk_id_response_dto.dart +++ b/mobile/openapi/lib/model/bulk_id_response_dto.dart @@ -14,6 +14,7 @@ class BulkIdResponseDto { /// Returns a new [BulkIdResponseDto] instance. BulkIdResponseDto({ this.error, + this.errorMessage, required this.id, required this.success, }); @@ -21,6 +22,14 @@ class BulkIdResponseDto { /// Error reason if failed BulkIdResponseDtoErrorEnum? error; + /// + /// Please note: This property should have been non-nullable! Since the specification file + /// does not include a default value (using the "default:" property), however, the generated + /// source code must fall back to having a nullable type. + /// Consider adding a "default:" property in the specification file to hide this note. + /// + String? errorMessage; + /// ID String id; @@ -30,6 +39,7 @@ class BulkIdResponseDto { @override bool operator ==(Object other) => identical(this, other) || other is BulkIdResponseDto && other.error == error && + other.errorMessage == errorMessage && other.id == id && other.success == success; @@ -37,11 +47,12 @@ class BulkIdResponseDto { int get hashCode => // ignore: unnecessary_parenthesis (error == null ? 0 : error!.hashCode) + + (errorMessage == null ? 0 : errorMessage!.hashCode) + (id.hashCode) + (success.hashCode); @override - String toString() => 'BulkIdResponseDto[error=$error, id=$id, success=$success]'; + String toString() => 'BulkIdResponseDto[error=$error, errorMessage=$errorMessage, id=$id, success=$success]'; Map toJson() { final json = {}; @@ -49,6 +60,11 @@ class BulkIdResponseDto { json[r'error'] = this.error; } else { // json[r'error'] = null; + } + if (this.errorMessage != null) { + json[r'errorMessage'] = this.errorMessage; + } else { + // json[r'errorMessage'] = null; } json[r'id'] = this.id; json[r'success'] = this.success; @@ -65,6 +81,7 @@ class BulkIdResponseDto { return BulkIdResponseDto( error: BulkIdResponseDtoErrorEnum.fromJson(json[r'error']), + errorMessage: mapValueOfType(json, r'errorMessage'), id: mapValueOfType(json, r'id')!, success: mapValueOfType(json, r'success')!, ); @@ -136,6 +153,7 @@ class BulkIdResponseDtoErrorEnum { static const noPermission = BulkIdResponseDtoErrorEnum._(r'no_permission'); static const notFound = BulkIdResponseDtoErrorEnum._(r'not_found'); static const unknown = BulkIdResponseDtoErrorEnum._(r'unknown'); + static const validation = BulkIdResponseDtoErrorEnum._(r'validation'); /// List of all possible values in this [enum][BulkIdResponseDtoErrorEnum]. static const values = [ @@ -143,6 +161,7 @@ class BulkIdResponseDtoErrorEnum { noPermission, notFound, unknown, + validation, ]; static BulkIdResponseDtoErrorEnum? fromJson(dynamic value) => BulkIdResponseDtoErrorEnumTypeTransformer().decode(value); @@ -185,6 +204,7 @@ class BulkIdResponseDtoErrorEnumTypeTransformer { case r'no_permission': return BulkIdResponseDtoErrorEnum.noPermission; case r'not_found': return BulkIdResponseDtoErrorEnum.notFound; case r'unknown': return BulkIdResponseDtoErrorEnum.unknown; + case r'validation': return BulkIdResponseDtoErrorEnum.validation; default: if (!allowNull) { throw ArgumentError('Unknown enum value to decode: $data'); diff --git a/mobile/openapi/lib/model/duplicate_resolve_dto.dart b/mobile/openapi/lib/model/duplicate_resolve_dto.dart new file mode 100644 index 0000000000..3466d3a620 --- /dev/null +++ b/mobile/openapi/lib/model/duplicate_resolve_dto.dart @@ -0,0 +1,100 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.18 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +part of openapi.api; + +class DuplicateResolveDto { + /// Returns a new [DuplicateResolveDto] instance. + DuplicateResolveDto({ + this.groups = const [], + }); + + /// List of duplicate groups to resolve + List groups; + + @override + bool operator ==(Object other) => identical(this, other) || other is DuplicateResolveDto && + _deepEquality.equals(other.groups, groups); + + @override + int get hashCode => + // ignore: unnecessary_parenthesis + (groups.hashCode); + + @override + String toString() => 'DuplicateResolveDto[groups=$groups]'; + + Map toJson() { + final json = {}; + json[r'groups'] = this.groups; + return json; + } + + /// Returns a new [DuplicateResolveDto] instance and imports its values from + /// [value] if it's a [Map], null otherwise. + // ignore: prefer_constructors_over_static_methods + static DuplicateResolveDto? fromJson(dynamic value) { + upgradeDto(value, "DuplicateResolveDto"); + if (value is Map) { + final json = value.cast(); + + return DuplicateResolveDto( + groups: DuplicateResolveGroupDto.listFromJson(json[r'groups']), + ); + } + return null; + } + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = DuplicateResolveDto.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } + + static Map mapFromJson(dynamic json) { + final map = {}; + if (json is Map && json.isNotEmpty) { + json = json.cast(); // ignore: parameter_assignments + for (final entry in json.entries) { + final value = DuplicateResolveDto.fromJson(entry.value); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + // maps a json object with a list of DuplicateResolveDto-objects as value to a dart map + static Map> mapListFromJson(dynamic json, {bool growable = false,}) { + final map = >{}; + if (json is Map && json.isNotEmpty) { + // ignore: parameter_assignments + json = json.cast(); + for (final entry in json.entries) { + map[entry.key] = DuplicateResolveDto.listFromJson(entry.value, growable: growable,); + } + } + return map; + } + + /// The list of required keys that must be present in a JSON. + static const requiredKeys = { + 'groups', + }; +} + diff --git a/mobile/openapi/lib/model/duplicate_resolve_group_dto.dart b/mobile/openapi/lib/model/duplicate_resolve_group_dto.dart new file mode 100644 index 0000000000..94ca53eb7d --- /dev/null +++ b/mobile/openapi/lib/model/duplicate_resolve_group_dto.dart @@ -0,0 +1,121 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.18 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +part of openapi.api; + +class DuplicateResolveGroupDto { + /// Returns a new [DuplicateResolveGroupDto] instance. + DuplicateResolveGroupDto({ + required this.duplicateId, + this.keepAssetIds = const [], + this.trashAssetIds = const [], + }); + + String duplicateId; + + /// Asset IDs to keep + List keepAssetIds; + + /// Asset IDs to trash or delete + List trashAssetIds; + + @override + bool operator ==(Object other) => identical(this, other) || other is DuplicateResolveGroupDto && + other.duplicateId == duplicateId && + _deepEquality.equals(other.keepAssetIds, keepAssetIds) && + _deepEquality.equals(other.trashAssetIds, trashAssetIds); + + @override + int get hashCode => + // ignore: unnecessary_parenthesis + (duplicateId.hashCode) + + (keepAssetIds.hashCode) + + (trashAssetIds.hashCode); + + @override + String toString() => 'DuplicateResolveGroupDto[duplicateId=$duplicateId, keepAssetIds=$keepAssetIds, trashAssetIds=$trashAssetIds]'; + + Map toJson() { + final json = {}; + json[r'duplicateId'] = this.duplicateId; + json[r'keepAssetIds'] = this.keepAssetIds; + json[r'trashAssetIds'] = this.trashAssetIds; + return json; + } + + /// Returns a new [DuplicateResolveGroupDto] instance and imports its values from + /// [value] if it's a [Map], null otherwise. + // ignore: prefer_constructors_over_static_methods + static DuplicateResolveGroupDto? fromJson(dynamic value) { + upgradeDto(value, "DuplicateResolveGroupDto"); + if (value is Map) { + final json = value.cast(); + + return DuplicateResolveGroupDto( + duplicateId: mapValueOfType(json, r'duplicateId')!, + keepAssetIds: json[r'keepAssetIds'] is Iterable + ? (json[r'keepAssetIds'] as Iterable).cast().toList(growable: false) + : const [], + trashAssetIds: json[r'trashAssetIds'] is Iterable + ? (json[r'trashAssetIds'] as Iterable).cast().toList(growable: false) + : const [], + ); + } + return null; + } + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = DuplicateResolveGroupDto.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } + + static Map mapFromJson(dynamic json) { + final map = {}; + if (json is Map && json.isNotEmpty) { + json = json.cast(); // ignore: parameter_assignments + for (final entry in json.entries) { + final value = DuplicateResolveGroupDto.fromJson(entry.value); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + // maps a json object with a list of DuplicateResolveGroupDto-objects as value to a dart map + static Map> mapListFromJson(dynamic json, {bool growable = false,}) { + final map = >{}; + if (json is Map && json.isNotEmpty) { + // ignore: parameter_assignments + json = json.cast(); + for (final entry in json.entries) { + map[entry.key] = DuplicateResolveGroupDto.listFromJson(entry.value, growable: growable,); + } + } + return map; + } + + /// The list of required keys that must be present in a JSON. + static const requiredKeys = { + 'duplicateId', + 'keepAssetIds', + 'trashAssetIds', + }; +} + diff --git a/mobile/openapi/lib/model/duplicate_response_dto.dart b/mobile/openapi/lib/model/duplicate_response_dto.dart index 6c85dc8013..f0ddbb4fdd 100644 --- a/mobile/openapi/lib/model/duplicate_response_dto.dart +++ b/mobile/openapi/lib/model/duplicate_response_dto.dart @@ -15,6 +15,7 @@ class DuplicateResponseDto { DuplicateResponseDto({ this.assets = const [], required this.duplicateId, + this.suggestedKeepAssetIds = const [], }); /// Duplicate assets @@ -23,24 +24,30 @@ class DuplicateResponseDto { /// Duplicate group ID String duplicateId; + /// Suggested asset IDs to keep based on file size and EXIF data + List suggestedKeepAssetIds; + @override bool operator ==(Object other) => identical(this, other) || other is DuplicateResponseDto && _deepEquality.equals(other.assets, assets) && - other.duplicateId == duplicateId; + other.duplicateId == duplicateId && + _deepEquality.equals(other.suggestedKeepAssetIds, suggestedKeepAssetIds); @override int get hashCode => // ignore: unnecessary_parenthesis (assets.hashCode) + - (duplicateId.hashCode); + (duplicateId.hashCode) + + (suggestedKeepAssetIds.hashCode); @override - String toString() => 'DuplicateResponseDto[assets=$assets, duplicateId=$duplicateId]'; + String toString() => 'DuplicateResponseDto[assets=$assets, duplicateId=$duplicateId, suggestedKeepAssetIds=$suggestedKeepAssetIds]'; Map toJson() { final json = {}; json[r'assets'] = this.assets; json[r'duplicateId'] = this.duplicateId; + json[r'suggestedKeepAssetIds'] = this.suggestedKeepAssetIds; return json; } @@ -55,6 +62,9 @@ class DuplicateResponseDto { return DuplicateResponseDto( assets: AssetResponseDto.listFromJson(json[r'assets']), duplicateId: mapValueOfType(json, r'duplicateId')!, + suggestedKeepAssetIds: json[r'suggestedKeepAssetIds'] is Iterable + ? (json[r'suggestedKeepAssetIds'] as Iterable).cast().toList(growable: false) + : const [], ); } return null; @@ -104,6 +114,7 @@ class DuplicateResponseDto { static const requiredKeys = { 'assets', 'duplicateId', + 'suggestedKeepAssetIds', }; } diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index f9bfc0639f..19427413b0 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -5285,6 +5285,65 @@ "x-immich-state": "Stable" } }, + "/duplicates/resolve": { + "post": { + "description": "Resolve duplicate groups by synchronizing metadata across assets and deleting/trashing duplicates.", + "operationId": "resolveDuplicates", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DuplicateResolveDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/BulkIdResponseDto" + }, + "type": "array" + } + } + }, + "description": "" + } + }, + "security": [ + { + "bearer": [] + }, + { + "cookie": [] + }, + { + "api_key": [] + } + ], + "summary": "Resolve duplicate groups", + "tags": [ + "Duplicates" + ], + "x-immich-history": [ + { + "version": "v3.0.0", + "state": "Added" + }, + { + "version": "v3.0.0", + "state": "Alpha" + } + ], + "x-immich-permission": "duplicate.delete", + "x-immich-state": "Alpha" + } + }, "/duplicates/{id}": { "delete": { "description": "Delete a single duplicate asset specified by its ID.", @@ -17299,7 +17358,8 @@ "duplicate", "no_permission", "not_found", - "unknown" + "unknown", + "validation" ], "type": "string" }, @@ -17311,10 +17371,14 @@ "duplicate", "no_permission", "not_found", - "unknown" + "unknown", + "validation" ], "type": "string" }, + "errorMessage": { + "type": "string" + }, "id": { "description": "ID", "type": "string" @@ -17828,6 +17892,52 @@ ], "type": "object" }, + "DuplicateResolveDto": { + "properties": { + "groups": { + "description": "List of duplicate groups to resolve", + "items": { + "$ref": "#/components/schemas/DuplicateResolveGroupDto" + }, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "groups" + ], + "type": "object" + }, + "DuplicateResolveGroupDto": { + "properties": { + "duplicateId": { + "format": "uuid", + "type": "string" + }, + "keepAssetIds": { + "description": "Asset IDs to keep", + "items": { + "format": "uuid", + "type": "string" + }, + "type": "array" + }, + "trashAssetIds": { + "description": "Asset IDs to trash or delete", + "items": { + "format": "uuid", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "duplicateId", + "keepAssetIds", + "trashAssetIds" + ], + "type": "object" + }, "DuplicateResponseDto": { "properties": { "assets": { @@ -17840,11 +17950,20 @@ "duplicateId": { "description": "Duplicate group ID", "type": "string" + }, + "suggestedKeepAssetIds": { + "description": "Suggested asset IDs to keep based on file size and EXIF data", + "items": { + "format": "uuid", + "type": "string" + }, + "type": "array" } }, "required": [ "assets", - "duplicateId" + "duplicateId", + "suggestedKeepAssetIds" ], "type": "object" }, diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index 257bf668d0..fc465ce529 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -725,6 +725,7 @@ export type BulkIdsDto = { export type BulkIdResponseDto = { /** Error reason if failed */ error?: Error; + errorMessage?: string; /** ID */ id: string; /** Whether operation succeeded */ @@ -1163,6 +1164,19 @@ export type DuplicateResponseDto = { assets: AssetResponseDto[]; /** Duplicate group ID */ duplicateId: string; + /** Suggested asset IDs to keep based on file size and EXIF data */ + suggestedKeepAssetIds: string[]; +}; +export type DuplicateResolveGroupDto = { + duplicateId: string; + /** Asset IDs to keep */ + keepAssetIds: string[]; + /** Asset IDs to trash or delete */ + trashAssetIds: string[]; +}; +export type DuplicateResolveDto = { + /** List of duplicate groups to resolve */ + groups: DuplicateResolveGroupDto[]; }; export type PersonResponseDto = { /** Person date of birth */ @@ -4531,6 +4545,21 @@ export function getAssetDuplicates(opts?: Oazapfts.RequestOpts) { ...opts })); } +/** + * Resolve duplicate groups + */ +export function resolveDuplicates({ duplicateResolveDto }: { + duplicateResolveDto: DuplicateResolveDto; +}, opts?: Oazapfts.RequestOpts) { + return oazapfts.ok(oazapfts.fetchJson<{ + status: 200; + data: BulkIdResponseDto[]; + }>("/duplicates/resolve", oazapfts.json({ + ...opts, + method: "POST", + body: duplicateResolveDto + }))); +} /** * Delete a duplicate */ @@ -6893,13 +6922,15 @@ export enum BulkIdErrorReason { Duplicate = "duplicate", NoPermission = "no_permission", NotFound = "not_found", - Unknown = "unknown" + Unknown = "unknown", + Validation = "validation" } export enum Error { Duplicate = "duplicate", NoPermission = "no_permission", NotFound = "not_found", - Unknown = "unknown" + Unknown = "unknown", + Validation = "validation" } export enum Permission { All = "all", diff --git a/server/src/controllers/duplicate.controller.spec.ts b/server/src/controllers/duplicate.controller.spec.ts new file mode 100644 index 0000000000..66598b9920 --- /dev/null +++ b/server/src/controllers/duplicate.controller.spec.ts @@ -0,0 +1,47 @@ +import { DuplicateController } from 'src/controllers/duplicate.controller'; +import { DuplicateService } from 'src/services/duplicate.service'; +import request from 'supertest'; +import { factory } from 'test/small.factory'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; + +describe(DuplicateController.name, () => { + let ctx: ControllerContext; + const service = mockBaseService(DuplicateService); + + beforeAll(async () => { + ctx = await controllerSetup(DuplicateController, [{ provide: DuplicateService, useValue: service }]); + return () => ctx.close(); + }); + + beforeEach(() => { + service.resetAllMocks(); + ctx.reset(); + }); + + describe('GET /duplicates', () => { + it('should be an authenticated route', async () => { + await request(ctx.getHttpServer()).get('/duplicates'); + expect(ctx.authenticate).toHaveBeenCalled(); + }); + }); + + describe('DELETE /duplicates', () => { + it('should be an authenticated route', async () => { + await request(ctx.getHttpServer()).delete('/duplicates'); + expect(ctx.authenticate).toHaveBeenCalled(); + }); + }); + + describe('DELETE /duplicates/:id', () => { + it('should be an authenticated route', async () => { + await request(ctx.getHttpServer()).delete(`/duplicates/${factory.uuid()}`); + expect(ctx.authenticate).toHaveBeenCalled(); + }); + + it('should require a valid uuid', async () => { + const { status, body } = await request(ctx.getHttpServer()).delete(`/duplicates/123`); + expect(status).toBe(400); + expect(body).toEqual(factory.responses.badRequest(['id must be a UUID'])); + }); + }); +}); diff --git a/server/src/controllers/duplicate.controller.ts b/server/src/controllers/duplicate.controller.ts index e8c8e5ef80..0a8c451ed4 100644 --- a/server/src/controllers/duplicate.controller.ts +++ b/server/src/controllers/duplicate.controller.ts @@ -1,9 +1,9 @@ -import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param } from '@nestjs/common'; +import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Post } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; +import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; import { AuthDto } from 'src/dtos/auth.dto'; -import { DuplicateResponseDto } from 'src/dtos/duplicate.dto'; +import { DuplicateResolveDto, DuplicateResponseDto } from 'src/dtos/duplicate.dto'; import { ApiTag, Permission } from 'src/enum'; import { Auth, Authenticated } from 'src/middleware/auth.guard'; import { DuplicateService } from 'src/services/duplicate.service'; @@ -48,4 +48,16 @@ export class DuplicateController { deleteDuplicate(@Auth() auth: AuthDto, @Param() { id }: UUIDParamDto): Promise { return this.service.delete(auth, id); } + + @Post('resolve') + @HttpCode(HttpStatus.OK) + @Authenticated({ permission: Permission.DuplicateDelete }) + @Endpoint({ + summary: 'Resolve duplicate groups', + description: 'Resolve duplicate groups by synchronizing metadata across assets and deleting/trashing duplicates.', + history: new HistoryBuilder().added('v3.0.0').alpha('v3.0.0'), + }) + resolveDuplicates(@Auth() auth: AuthDto, @Body() dto: DuplicateResolveDto): Promise { + return this.service.resolve(auth, dto); + } } diff --git a/server/src/dtos/asset-ids.response.dto.ts b/server/src/dtos/asset-ids.response.dto.ts index 427117518d..1065d8485e 100644 --- a/server/src/dtos/asset-ids.response.dto.ts +++ b/server/src/dtos/asset-ids.response.dto.ts @@ -23,6 +23,7 @@ export enum BulkIdErrorReason { NO_PERMISSION = 'no_permission', NOT_FOUND = 'not_found', UNKNOWN = 'unknown', + VALIDATION = 'validation', } export class BulkIdsDto { @@ -37,4 +38,5 @@ export class BulkIdResponseDto { success!: boolean; @ApiPropertyOptional({ description: 'Error reason if failed', enum: BulkIdErrorReason }) error?: BulkIdErrorReason; + errorMessage?: string; } diff --git a/server/src/dtos/duplicate.dto.ts b/server/src/dtos/duplicate.dto.ts index 9cd9147ec5..40b1b74c70 100644 --- a/server/src/dtos/duplicate.dto.ts +++ b/server/src/dtos/duplicate.dto.ts @@ -1,9 +1,35 @@ import { ApiProperty } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { ArrayMinSize, IsArray, ValidateNested } from 'class-validator'; import { AssetResponseDto } from 'src/dtos/asset-response.dto'; +import { ValidateUUID } from 'src/validation'; export class DuplicateResponseDto { @ApiProperty({ description: 'Duplicate group ID' }) duplicateId!: string; @ApiProperty({ description: 'Duplicate assets' }) assets!: AssetResponseDto[]; + + @ValidateUUID({ each: true, description: 'Suggested asset IDs to keep based on file size and EXIF data' }) + suggestedKeepAssetIds!: string[]; +} + +export class DuplicateResolveGroupDto { + @ValidateUUID() + duplicateId!: string; + + @ValidateUUID({ each: true, description: 'Asset IDs to keep' }) + keepAssetIds!: string[]; + + @ValidateUUID({ each: true, description: 'Asset IDs to trash or delete' }) + trashAssetIds!: string[]; +} + +export class DuplicateResolveDto { + @ApiProperty({ description: 'List of duplicate groups to resolve' }) + @ValidateNested({ each: true }) + @IsArray() + @Type(() => DuplicateResolveGroupDto) + @ArrayMinSize(1) + groups!: DuplicateResolveGroupDto[]; } diff --git a/server/src/queries/access.repository.sql b/server/src/queries/access.repository.sql index 1239260dce..810229093b 100644 --- a/server/src/queries/access.repository.sql +++ b/server/src/queries/access.repository.sql @@ -160,6 +160,16 @@ where "session"."userId" = $1 and "session"."id" in ($2) +-- AccessRepository.duplicate.checkOwnerAccess +select + "asset"."duplicateId" +from + "asset" +where + "asset"."duplicateId" in ($1) + and "asset"."ownerId" = $2 + and "asset"."deletedAt" is null + -- AccessRepository.memory.checkOwnerAccess select "memory"."id" diff --git a/server/src/queries/album.repository.sql b/server/src/queries/album.repository.sql index e3d7436c30..cc15260bdb 100644 --- a/server/src/queries/album.repository.sql +++ b/server/src/queries/album.repository.sql @@ -164,6 +164,28 @@ order by "album"."createdAt" desc, "album"."createdAt" desc +-- AlbumRepository.getByAssetIds +select + "album"."id", + "album_asset"."assetId" +from + "album" + inner join "album_asset" on "album_asset"."albumId" = "album"."id" +where + ( + "album"."ownerId" = $1 + or exists ( + select + from + "album_user" + where + "album_user"."albumId" = "album"."id" + and "album_user"."userId" = $2 + ) + ) + and "album_asset"."assetId" in ($3) + and "album"."deletedAt" is null + -- AlbumRepository.getMetadataForIds select "album_asset"."albumId" as "albumId", diff --git a/server/src/queries/duplicate.repository.sql b/server/src/queries/duplicate.repository.sql index 3f718f84c2..24a02e0f23 100644 --- a/server/src/queries/duplicate.repository.sql +++ b/server/src/queries/duplicate.repository.sql @@ -15,7 +15,26 @@ with inner join lateral ( select "asset".*, - "asset_exif" as "exifInfo" + to_json("asset_exif") as "exifInfo", + ( + select + coalesce(json_agg(agg), '[]') + from + ( + select + "tag"."id", + "tag"."value", + "tag"."createdAt", + "tag"."updatedAt", + "tag"."color", + "tag"."parentId" + from + "tag" + inner join "tag_asset" on "tag"."id" = "tag_asset"."tagId" + where + "tag_asset"."assetId" = "asset"."id" + ) as agg + ) as "tags" from "asset_exif" where @@ -29,36 +48,84 @@ with and "asset"."stackId" is null group by "asset"."duplicateId" - ), - "unique" as ( - select - "duplicateId" - from - "duplicates" - where - json_array_length("assets") = $2 - ), - "removed_unique" as ( - update "asset" - set - "duplicateId" = $3 - from - "unique" - where - "asset"."duplicateId" = "unique"."duplicateId" ) select * from "duplicates" where - not exists ( + json_array_length("assets") > $2 + +-- DuplicateRepository.cleanupSingletonGroups +with + "singletons" as ( select + "duplicateId" from - "unique" + "asset" where - "unique"."duplicateId" = "duplicates"."duplicateId" + "ownerId" = $1::uuid + and "duplicateId" is not null + and "deletedAt" is null + and "stackId" is null + group by + "duplicateId" + having + count("id") = $2 ) +update "asset" +set + "duplicateId" = $3 +from + "singletons" +where + "asset"."duplicateId" = "singletons"."duplicateId" + +-- DuplicateRepository.get +select + "asset"."duplicateId", + json_agg( + "asset2" + order by + "asset"."localDateTime" asc + ) as "assets" +from + "asset" + inner join lateral ( + select + "asset".*, + to_json("asset_exif") as "exifInfo", + ( + select + coalesce(json_agg(agg), '[]') + from + ( + select + "tag"."id", + "tag"."value", + "tag"."createdAt", + "tag"."updatedAt", + "tag"."color", + "tag"."parentId" + from + "tag" + inner join "tag_asset" on "tag"."id" = "tag_asset"."tagId" + where + "tag_asset"."assetId" = "asset"."id" + ) as agg + ) as "tags" + from + "asset_exif" + where + "asset_exif"."assetId" = "asset"."id" + ) as "asset2" on true +where + "asset"."visibility" in ('archive', 'timeline') + and "asset"."duplicateId" = $1::uuid + and "asset"."deletedAt" is null + and "asset"."stackId" is null +group by + "asset"."duplicateId" -- DuplicateRepository.delete update "asset" diff --git a/server/src/repositories/access.repository.ts b/server/src/repositories/access.repository.ts index 533e74a311..1661e42c14 100644 --- a/server/src/repositories/access.repository.ts +++ b/server/src/repositories/access.repository.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { Kysely, sql } from 'kysely'; +import { Kysely, NotNull, sql } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; import { ChunkedSet, DummyValue, GenerateSql } from 'src/decorators'; import { AlbumUserRole, AssetVisibility } from 'src/enum'; @@ -285,6 +285,28 @@ class AuthDeviceAccess { } } +class DuplicateAccess { + constructor(private db: Kysely) {} + + @GenerateSql({ params: [DummyValue.UUID, DummyValue.UUID_SET] }) + @ChunkedSet({ paramIndex: 1 }) + async checkOwnerAccess(userId: string, duplicateIds: Set) { + if (duplicateIds.size === 0) { + return new Set(); + } + + return this.db + .selectFrom('asset') + .select('asset.duplicateId') + .where('asset.duplicateId', 'in', [...duplicateIds]) + .where('asset.ownerId', '=', userId) + .where('asset.deletedAt', 'is', null) + .$narrowType<{ duplicateId: NotNull }>() + .execute() + .then((assets) => new Set(assets.map((asset) => asset.duplicateId))); + } +} + class NotificationAccess { constructor(private db: Kysely) {} @@ -488,6 +510,7 @@ export class AccessRepository { album: AlbumAccess; asset: AssetAccess; authDevice: AuthDeviceAccess; + duplicate: DuplicateAccess; memory: MemoryAccess; notification: NotificationAccess; person: PersonAccess; @@ -503,6 +526,7 @@ export class AccessRepository { this.album = new AlbumAccess(db); this.asset = new AssetAccess(db); this.authDevice = new AuthDeviceAccess(db); + this.duplicate = new DuplicateAccess(db); this.memory = new MemoryAccess(db); this.notification = new NotificationAccess(db); this.person = new PersonAccess(db); diff --git a/server/src/repositories/album.repository.ts b/server/src/repositories/album.repository.ts index f74356c924..e4d802b93c 100644 --- a/server/src/repositories/album.repository.ts +++ b/server/src/repositories/album.repository.ts @@ -125,6 +125,44 @@ export class AlbumRepository { .execute(); } + @GenerateSql({ params: [DummyValue.UUID, [DummyValue.UUID]] }) + @ChunkedSet({ paramIndex: 1 }) + async getByAssetIds(ownerId: string, assetIds: string[]): Promise> { + if (assetIds.length === 0) { + return new Map(); + } + + const results = await this.db + .selectFrom('album') + .select('album.id') + .innerJoin('album_asset', 'album_asset.albumId', 'album.id') + .where((eb) => + eb.or([ + eb('album.ownerId', '=', ownerId), + eb.exists( + eb + .selectFrom('album_user') + .whereRef('album_user.albumId', '=', 'album.id') + .where('album_user.userId', '=', ownerId), + ), + ]), + ) + .where('album_asset.assetId', 'in', assetIds) + .where('album.deletedAt', 'is', null) + .select('album_asset.assetId') + .execute(); + + // Group by assetId + const map = new Map(); + for (const row of results) { + const existing = map.get(row.assetId) ?? []; + existing.push(row.id); + map.set(row.assetId, existing); + } + + return map; + } + @GenerateSql({ params: [[DummyValue.UUID]] }) @ChunkedArray() async getMetadataForIds(ids: string[]): Promise { @@ -339,7 +377,12 @@ export class AlbumRepository { if (values.length === 0) { return; } - await this.db.insertInto('album_asset').values(values).execute(); + await this.db + .insertInto('album_asset') + .values(values) + // Allow idempotent album sync without failing on existing album memberships. + .onConflict((oc) => oc.columns(['albumId', 'assetId']).doNothing()) + .execute(); } /** diff --git a/server/src/repositories/duplicate.repository.ts b/server/src/repositories/duplicate.repository.ts index 7a5931e029..6a9b4e9082 100644 --- a/server/src/repositories/duplicate.repository.ts +++ b/server/src/repositories/duplicate.repository.ts @@ -1,13 +1,19 @@ import { Injectable } from '@nestjs/common'; import { Kysely, NotNull, Selectable, ShallowDehydrateObject, sql } from 'kysely'; +import { jsonArrayFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; +import { columns } from 'src/database'; import { Chunked, DummyValue, GenerateSql } from 'src/decorators'; +import { MapAsset } from 'src/dtos/asset-response.dto'; import { AssetType, VectorIndex } from 'src/enum'; import { probes } from 'src/repositories/database.repository'; import { DB } from 'src/schema'; import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; import { anyUuid, asUuid, withDefaultVisibility } from 'src/utils/database'; +// Maximum number of candidate duplicates to return from vector search +const DUPLICATE_SEARCH_LIMIT = 64; + interface DuplicateSearch { assetId: string; embedding: string; @@ -34,20 +40,39 @@ export class DuplicateRepository { qb .selectFrom('asset') .$call(withDefaultVisibility) + // Use innerJoinLateral to build a composite object per asset that includes + // exifInfo and tags. This "asset2" object is then aggregated via jsonAgg. + // Tags must be included here (not via separate joins) so they appear in the + // final MapAsset[] output - needed for tag synchronization during resolution. .innerJoinLateral( (qb) => qb .selectFrom('asset_exif') .selectAll('asset') .select((eb) => - eb.table('asset_exif').$castTo>>().as('exifInfo'), + eb.fn + .toJson('asset_exif') + .$castTo>>() + .as('exifInfo'), + ) + + .select((eb) => + jsonArrayFrom( + eb + .selectFrom('tag') + .select(columns.tag) + .innerJoin('tag_asset', 'tag.id', 'tag_asset.tagId') + .whereRef('tag_asset.assetId', '=', 'asset.id'), + ).as('tags'), ) .whereRef('asset_exif.assetId', '=', 'asset.id') .as('asset2'), (join) => join.onTrue(), ) .select('asset.duplicateId') - .select((eb) => eb.fn.jsonAgg('asset2').orderBy('asset.localDateTime', 'asc').as('assets')) + .select((eb) => + eb.fn.jsonAgg('asset2').orderBy('asset.localDateTime', 'asc').$castTo().as('assets'), + ) .where('asset.ownerId', '=', asUuid(userId)) .where('asset.duplicateId', 'is not', null) .$narrowType<{ duplicateId: NotNull }>() @@ -55,29 +80,80 @@ export class DuplicateRepository { .where('asset.stackId', 'is', null) .groupBy('asset.duplicateId'), ) - .with('unique', (qb) => - qb - .selectFrom('duplicates') - .select('duplicateId') - .where((eb) => eb(eb.fn('json_array_length', ['assets']), '=', 1)), - ) - .with('removed_unique', (qb) => - qb - .updateTable('asset') - .set({ duplicateId: null }) - .from('unique') - .whereRef('asset.duplicateId', '=', 'unique.duplicateId'), - ) .selectFrom('duplicates') .selectAll() - // TODO: compare with filtering by json_array_length > 1 - .where(({ not, exists }) => - not(exists((eb) => eb.selectFrom('unique').whereRef('unique.duplicateId', '=', 'duplicates.duplicateId'))), - ) + // Filter out singleton groups (only 1 asset) directly in the query + .where((eb) => eb(eb.fn('json_array_length', ['assets']), '>', 1)) .execute() ); } + @GenerateSql({ params: [DummyValue.UUID] }) + async cleanupSingletonGroups(userId: string): Promise { + // Remove duplicateId from assets that are the only member of their duplicate group + await this.db + .with('singletons', (qb) => + qb + .selectFrom('asset') + .select('duplicateId') + .where('ownerId', '=', asUuid(userId)) + .where('duplicateId', 'is not', null) + .$narrowType<{ duplicateId: NotNull }>() + .where('deletedAt', 'is', null) + .where('stackId', 'is', null) + .groupBy('duplicateId') + .having((eb) => eb.fn.count('id'), '=', 1), + ) + .updateTable('asset') + .set({ duplicateId: null }) + .from('singletons') + .whereRef('asset.duplicateId', '=', 'singletons.duplicateId') + .execute(); + } + + @GenerateSql({ params: [DummyValue.UUID, DummyValue.UUID] }) + async get(duplicateId: string): Promise<{ duplicateId: string; assets: MapAsset[] } | undefined> { + const result = await this.db + .selectFrom('asset') + .$call(withDefaultVisibility) + // Use innerJoinLateral to build a composite object per asset that includes + // exifInfo and tags. This "asset2" object is then aggregated via jsonAgg. + // Tags must be included here (not via separate joins) so they appear in the + // final MapAsset[] output - needed for tag synchronization during resolution. + .innerJoinLateral( + (qb) => + qb + .selectFrom('asset_exif') + .selectAll('asset') + .select((eb) => eb.fn.toJson('asset_exif').as('exifInfo')) + .select((eb) => + jsonArrayFrom( + eb + .selectFrom('tag') + .select(columns.tag) + .innerJoin('tag_asset', 'tag.id', 'tag_asset.tagId') + .whereRef('tag_asset.assetId', '=', 'asset.id'), + ).as('tags'), + ) + .whereRef('asset_exif.assetId', '=', 'asset.id') + .as('asset2'), + (join) => join.onTrue(), + ) + .select('asset.duplicateId') + .select((eb) => eb.fn.jsonAgg('asset2').orderBy('asset.localDateTime', 'asc').$castTo().as('assets')) + .where('asset.duplicateId', '=', asUuid(duplicateId)) + .where('asset.deletedAt', 'is', null) + .where('asset.stackId', 'is', null) + .groupBy('asset.duplicateId') + .executeTakeFirst(); + + if (!result || !result.duplicateId) { + return; + } + + return { duplicateId: result.duplicateId, assets: result.assets }; + } + @GenerateSql({ params: [DummyValue.UUID, DummyValue.UUID] }) async delete(userId: string, id: string): Promise { await this.db @@ -134,7 +210,7 @@ export class DuplicateRepository { .where('asset.id', '!=', asUuid(assetId)) .where('asset.stackId', 'is', null) .orderBy('distance') - .limit(64), + .limit(DUPLICATE_SEARCH_LIMIT), ) .selectFrom('cte') .selectAll() diff --git a/server/src/services/duplicate.service.spec.ts b/server/src/services/duplicate.service.spec.ts index 38c6833105..564cffa0bc 100644 --- a/server/src/services/duplicate.service.spec.ts +++ b/server/src/services/duplicate.service.spec.ts @@ -1,12 +1,13 @@ +import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto'; +import { MapAsset } from 'src/dtos/asset-response.dto'; import { AssetType, AssetVisibility, JobName, JobStatus } from 'src/enum'; import { DuplicateService } from 'src/services/duplicate.service'; -import { SearchService } from 'src/services/search.service'; import { AssetFactory } from 'test/factories/asset.factory'; import { authStub } from 'test/fixtures/auth.stub'; import { getForDuplicate } from 'test/mappers'; import { newUuid } from 'test/small.factory'; import { makeStream, newTestService, ServiceMocks } from 'test/utils'; -import { beforeEach, vitest } from 'vitest'; +import { beforeEach, describe, expect, it, vitest } from 'vitest'; vitest.useFakeTimers(); @@ -26,7 +27,7 @@ const hasDupe = { duplicateId: 'duplicate-id', }; -describe(SearchService.name, () => { +describe(DuplicateService.name, () => { let sut: DuplicateService; let mocks: ServiceMocks; @@ -41,6 +42,8 @@ describe(SearchService.name, () => { describe('getDuplicates', () => { it('should get duplicates', async () => { const asset = AssetFactory.from().exif().build(); + mocks.access.duplicate.checkOwnerAccess.mockResolvedValue(new Set(['duplicate-id'])); + mocks.duplicateRepository.cleanupSingletonGroups.mockResolvedValue(); mocks.duplicateRepository.getAll.mockResolvedValue([ { duplicateId: 'duplicate-id', @@ -51,9 +54,24 @@ describe(SearchService.name, () => { { duplicateId: 'duplicate-id', assets: [expect.objectContaining({ id: asset.id }), expect.objectContaining({ id: asset.id })], + suggestedKeepAssetIds: [asset.id], }, ]); }); + + it('should return suggestedKeepAssetIds based on file size', async () => { + const smallAsset = AssetFactory.from().exif({ fileSizeInByte: 1000 }).build(); + const largeAsset = AssetFactory.from().exif({ fileSizeInByte: 5000 }).build(); + mocks.duplicateRepository.cleanupSingletonGroups.mockResolvedValue(); + mocks.duplicateRepository.getAll.mockResolvedValue([ + { + duplicateId: 'duplicate-id', + assets: [getForDuplicate(smallAsset), getForDuplicate(largeAsset)], + }, + ]); + const result = await sut.getDuplicates(authStub.admin); + expect(result[0].suggestedKeepAssetIds).toEqual([largeAsset.id]); + }); }); describe('handleQueueSearchDuplicates', () => { @@ -131,6 +149,200 @@ describe(SearchService.name, () => { }); }); + describe('resolve', () => { + it('should handle mixed success and failure', async () => { + const asset = AssetFactory.create(); + mocks.access.duplicate.checkOwnerAccess.mockResolvedValue(new Set(['group-1', 'group-2'])); + mocks.duplicateRepository.get.mockResolvedValueOnce(void 0); + mocks.duplicateRepository.get.mockResolvedValueOnce({ + duplicateId: 'group-2', + assets: [asset as unknown as MapAsset], + }); + + await expect( + sut.resolve(authStub.admin, { + groups: [ + { duplicateId: 'group-1', keepAssetIds: [], trashAssetIds: [] }, + { duplicateId: 'group-2', keepAssetIds: [asset.id], trashAssetIds: [] }, + ], + }), + ).resolves.toEqual([ + { id: 'group-1', success: false, error: BulkIdErrorReason.NOT_FOUND }, + { id: 'group-2', success: true }, + ]); + }); + + it('should catch and report errors', async () => { + mocks.access.duplicate.checkOwnerAccess.mockResolvedValue(new Set(['group-1'])); + mocks.duplicateRepository.get.mockRejectedValue(new Error('Database error')); + + await expect( + sut.resolve(authStub.admin, { + groups: [{ duplicateId: 'group-1', keepAssetIds: [], trashAssetIds: [] }], + }), + ).resolves.toEqual([{ id: 'group-1', success: false, error: BulkIdErrorReason.UNKNOWN }]); + }); + }); + + describe('resolveGroup (via resolve)', () => { + it('should fail if duplicate group not found', async () => { + mocks.access.duplicate.checkOwnerAccess.mockResolvedValue(new Set(['missing-id'])); + mocks.duplicateRepository.get.mockResolvedValue(void 0); + + await expect( + sut.resolve(authStub.admin, { + groups: [{ duplicateId: 'missing-id', keepAssetIds: [], trashAssetIds: [] }], + }), + ).resolves.toEqual([ + { + id: 'missing-id', + success: false, + error: BulkIdErrorReason.NOT_FOUND, + }, + ]); + }); + + it('should skip when keepAssetIds contains non-member', async () => { + const asset = AssetFactory.create(); + mocks.access.duplicate.checkOwnerAccess.mockResolvedValue(new Set(['group-1'])); + mocks.duplicateRepository.get.mockResolvedValue({ + duplicateId: 'group-1', + assets: [asset as unknown as MapAsset], + }); + + await expect( + sut.resolve(authStub.admin, { + groups: [{ duplicateId: 'group-1', keepAssetIds: ['asset-999', asset.id], trashAssetIds: [] }], + }), + ).resolves.toEqual([{ id: 'group-1', success: true }]); + }); + + it('should skip when trashAssetIds contains non-member', async () => { + const asset = AssetFactory.create(); + mocks.access.duplicate.checkOwnerAccess.mockResolvedValue(new Set(['group-1'])); + mocks.duplicateRepository.get.mockResolvedValue({ + duplicateId: 'group-1', + assets: [asset as unknown as MapAsset], + }); + + await expect( + sut.resolve(authStub.admin, { + groups: [{ duplicateId: 'group-1', keepAssetIds: [asset.id], trashAssetIds: ['asset-999'] }], + }), + ).resolves.toEqual([{ id: 'group-1', success: true }]); + }); + + it('should fail if keepAssetIds and trashAssetIds overlap', async () => { + const asset1 = AssetFactory.create(); + const asset2 = AssetFactory.create(); + mocks.access.duplicate.checkOwnerAccess.mockResolvedValue(new Set(['group-1'])); + mocks.duplicateRepository.get.mockResolvedValue({ + duplicateId: 'group-1', + assets: [asset1 as unknown as MapAsset, asset2 as unknown as MapAsset], + }); + + const result = await sut.resolve(authStub.admin, { + groups: [{ duplicateId: 'group-1', keepAssetIds: [asset1.id], trashAssetIds: [asset1.id] }], + }); + + expect(result[0].success).toBe(false); + expect(result[0].errorMessage).toContain('An asset cannot be in both keepAssetIds and trashAssetIds'); + }); + + it('should fail if keepAssetIds and trashAssetIds do not cover all assets', async () => { + const asset1 = AssetFactory.create(); + const asset2 = AssetFactory.create(); + const asset3 = AssetFactory.create(); + mocks.access.duplicate.checkOwnerAccess.mockResolvedValue(new Set(['group-1'])); + mocks.duplicateRepository.get.mockResolvedValue({ + duplicateId: 'group-1', + assets: [asset1 as unknown as MapAsset, asset2 as unknown as MapAsset, asset3 as unknown as MapAsset], + }); + + const result = await sut.resolve(authStub.admin, { + groups: [{ duplicateId: 'group-1', keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(result[0].success).toBe(false); + expect(result[0].errorMessage).toContain('Every asset must be in either keepAssetIds or trashAssetIds'); + }); + + it('should fail if partial trash without keepers', async () => { + const asset1 = AssetFactory.create(); + const asset2 = AssetFactory.create(); + mocks.access.duplicate.checkOwnerAccess.mockResolvedValue(new Set(['group-1'])); + mocks.duplicateRepository.get.mockResolvedValue({ + duplicateId: 'group-1', + assets: [asset1 as unknown as MapAsset, asset2 as unknown as MapAsset], + }); + + const result = await sut.resolve(authStub.admin, { + groups: [{ duplicateId: 'group-1', keepAssetIds: [], trashAssetIds: [asset1.id] }], + }); + + expect(result[0].success).toBe(false); + expect(result[0].errorMessage).toContain('Every asset must be in either keepAssetIds or trashAssetIds'); + }); + + it('should sync merged tags to asset_exif.tags', async () => { + const asset1 = AssetFactory.create(); + const asset2 = AssetFactory.create(); + mocks.access.duplicate.checkOwnerAccess.mockResolvedValue(new Set(['group-1'])); + mocks.access.asset.checkOwnerAccess.mockResolvedValue(new Set(['asset-2'])); + mocks.access.tag.checkOwnerAccess.mockResolvedValue(new Set(['tag-1', 'tag-2'])); + mocks.duplicateRepository.get.mockResolvedValue({ + duplicateId: 'group-1', + assets: [ + { + ...asset1, + tags: [ + { + id: 'tag-1', + value: 'Work', + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + parentId: null, + color: null, + }, + ], + }, + { + ...asset2, + tags: [ + { + id: 'tag-2', + value: 'Travel', + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + parentId: null, + color: null, + }, + ], + }, + ] as any, + }); + + const result = await sut.resolve(authStub.admin, { + groups: [{ duplicateId: 'group-1', keepAssetIds: [asset1.id], trashAssetIds: [asset2.id] }], + }); + + expect(result[0].success).toBe(true); + + // Verify tags were applied to tag_asset table + expect(mocks.tag.replaceAssetTags).toHaveBeenCalledWith(asset1.id, ['tag-1', 'tag-2']); + + // Verify merged tag values were written to asset_exif.tags so SidecarWrite preserves them + expect(mocks.asset.updateAllExif).toHaveBeenCalledWith([asset1.id], { tags: ['Work', 'Travel'] }); + + // Verify SidecarWrite was queued (to write tags to sidecar) + expect(mocks.job.queueAll).toHaveBeenCalledWith([{ name: JobName.SidecarWrite, data: { id: asset1.id } }]); + }); + + // NOTE: The following integration-style tests are covered by E2E tests instead + // to avoid complex mock setup. The validation and error-handling logic above + // is thoroughly unit tested. + }); + describe('handleSearchDuplicates', () => { beforeEach(() => { mocks.systemMetadata.get.mockResolvedValue({ diff --git a/server/src/services/duplicate.service.ts b/server/src/services/duplicate.service.ts index 618754ff74..39123e031c 100644 --- a/server/src/services/duplicate.service.ts +++ b/server/src/services/duplicate.service.ts @@ -1,24 +1,84 @@ import { Injectable } from '@nestjs/common'; import { JOBS_ASSET_PAGINATION_SIZE } from 'src/constants'; import { OnJob } from 'src/decorators'; -import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { mapAsset } from 'src/dtos/asset-response.dto'; +import { BulkIdErrorReason, BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; +import { MapAsset, mapAsset } from 'src/dtos/asset-response.dto'; import { AuthDto } from 'src/dtos/auth.dto'; -import { DuplicateResponseDto } from 'src/dtos/duplicate.dto'; -import { AssetVisibility, JobName, JobStatus, QueueName } from 'src/enum'; +import { DuplicateResolveDto, DuplicateResolveGroupDto, DuplicateResponseDto } from 'src/dtos/duplicate.dto'; +import { AssetStatus, AssetVisibility, JobName, JobStatus, Permission, QueueName } from 'src/enum'; import { AssetDuplicateResult } from 'src/repositories/search.repository'; import { BaseService } from 'src/services/base.service'; import { JobItem, JobOf } from 'src/types'; +import { suggestDuplicateKeepAssetIds } from 'src/utils/duplicate'; import { isDuplicateDetectionEnabled } from 'src/utils/misc'; +type ResolveRequest = { + assetUpdate: { + isFavorite?: boolean; + visibility?: AssetVisibility; + }; + + exifUpdate: { + rating?: number; + latitude?: number; + longitude?: number; + description?: string; + }; + + mergedAlbumIds: string[]; + + mergedTagIds: string[]; + + mergedTagValues: string[]; +}; + +const uniqueNonEmptyLines = (values: Array): string[] => { + const unique = new Set(); + const lines: string[] = []; + for (const value of values) { + if (!value) { + continue; + } + for (const line of value.split(/\r?\n/)) { + const trimmed = line.trim(); + if (!trimmed || unique.has(trimmed)) { + continue; + } + unique.add(trimmed); + lines.push(trimmed); + } + } + return lines; +}; + +const getUniqueCoordinate = (assets: MapAsset[], key: 'latitude' | 'longitude'): number | null => { + const values = assets + .map((asset) => asset.exifInfo?.[key]) + .filter((value): value is number => Number.isFinite(value)); + + if (values.length === 0) { + return null; + } + + const unique = new Set(values); + return unique.size === 1 ? [...unique][0] : null; +}; + @Injectable() export class DuplicateService extends BaseService { async getDuplicates(auth: AuthDto): Promise { + // Clean up singleton groups (assets that are the only member of their duplicate group) + await this.duplicateRepository.cleanupSingletonGroups(auth.user.id); + const duplicates = await this.duplicateRepository.getAll(auth.user.id); - return duplicates.map(({ duplicateId, assets }) => ({ - duplicateId, - assets: assets.map((asset) => mapAsset(asset, { auth })), - })); + return duplicates.map(({ duplicateId, assets }) => { + const mappedAssets = assets.map((asset) => mapAsset(asset, { auth })); + return { + duplicateId, + assets: mappedAssets, + suggestedKeepAssetIds: suggestDuplicateKeepAssetIds(mappedAssets), + }; + }); } async delete(auth: AuthDto, id: string): Promise { @@ -29,6 +89,213 @@ export class DuplicateService extends BaseService { await this.duplicateRepository.deleteAll(auth.user.id, dto.ids); } + async resolve(auth: AuthDto, dto: DuplicateResolveDto) { + const duplicateIds = dto.groups.map(({ duplicateId }) => duplicateId); + + await this.requireAccess({ auth, permission: Permission.DuplicateDelete, ids: duplicateIds }); + + const results: BulkIdResponseDto[] = []; + + for (const group of dto.groups) { + try { + results.push(await this.resolveGroup(auth, group)); + } catch (error: Error | any) { + this.logger.error(`Error resolving duplicate group ${group.duplicateId}: ${error}`, error?.stack); + results.push({ id: group.duplicateId, success: false, error: BulkIdErrorReason.UNKNOWN }); + } + } + + return results; + } + + private async resolveGroup(auth: AuthDto, group: DuplicateResolveGroupDto): Promise { + const { duplicateId, keepAssetIds, trashAssetIds } = group; + + const duplicateGroup = await this.duplicateRepository.get(duplicateId); + if (!duplicateGroup) { + return { id: duplicateId, success: false, error: BulkIdErrorReason.NOT_FOUND }; + } + + const groupAssetIds = new Set(duplicateGroup.assets.map((a) => a.id)); + + // ignore/skip asset IDs not in the group + const idsToKeep = keepAssetIds.filter((id) => groupAssetIds.has(id)); + const idsToTrash = trashAssetIds.filter((id) => groupAssetIds.has(id)); + + for (const assetId of groupAssetIds) { + if (idsToKeep.includes(assetId) && idsToTrash.includes(assetId)) { + return { + id: duplicateId, + success: false, + error: BulkIdErrorReason.VALIDATION, + errorMessage: 'An asset cannot be in both keepAssetIds and trashAssetIds', + }; + } + + if (!idsToKeep.includes(assetId) && !idsToTrash.includes(assetId)) { + return { + id: duplicateId, + success: false, + error: BulkIdErrorReason.VALIDATION, + errorMessage: 'Every asset must be in either keepAssetIds or trashAssetIds', + }; + } + } + + if (idsToTrash.length > 0) { + const ids = await this.checkAccess({ auth, permission: Permission.AssetDelete, ids: idsToTrash }); + if (ids.size !== idsToTrash.length) { + return { + id: duplicateId, + success: false, + error: BulkIdErrorReason.NO_PERMISSION, + errorMessage: 'No permission to delete assets', + }; + } + } + + const assetAlbumMap = await this.albumRepository.getByAssetIds(auth.user.id, [...groupAssetIds]); + + const { assetUpdate, exifUpdate, mergedAlbumIds, mergedTagIds, mergedTagValues } = this.getSyncMergeResult( + duplicateGroup.assets, + assetAlbumMap, + ); + + if (mergedAlbumIds.length > 0) { + const allowedAlbumIds = await this.checkAccess({ + auth, + permission: Permission.AlbumAssetCreate, + ids: mergedAlbumIds, + }); + + const allowedShareIds = await this.checkAccess({ + auth, + permission: Permission.AssetShare, + ids: idsToKeep, + }); + + if (allowedAlbumIds.size > 0 && allowedShareIds.size > 0) { + await this.albumRepository.addAssetIdsToAlbums( + [...allowedAlbumIds].flatMap((albumId) => [...allowedShareIds].map((assetId) => ({ albumId, assetId }))), + ); + } + } + + if (mergedTagIds.length > 0) { + const allowedTagIds = await this.checkAccess({ + auth, + permission: Permission.TagAsset, + ids: mergedTagIds, + }); + + if (allowedTagIds.size > 0) { + // Replace tags for each keeper asset to ensure all merged tags are applied + await Promise.all(idsToKeep.map((assetId) => this.tagRepository.replaceAssetTags(assetId, [...allowedTagIds]))); + + // Update asset_exif.tags so the subsequent SidecarWrite + MetadataExtraction + // cycle preserves the merged tags (updateAllExif locks the property automatically) + await this.assetRepository.updateAllExif(idsToKeep, { tags: mergedTagValues }); + } + } + + if (idsToKeep.length > 0) { + const hasExifUpdate = Object.keys(exifUpdate).length > 0; + const hasTagUpdate = mergedTagIds.length > 0; + + if (hasExifUpdate) { + await this.assetRepository.updateAllExif(idsToKeep, exifUpdate); + } + + if (hasExifUpdate || hasTagUpdate) { + await this.jobRepository.queueAll(idsToKeep.map((id) => ({ name: JobName.SidecarWrite, data: { id } }))); + } + + await this.assetRepository.updateAll(idsToKeep, { duplicateId: null, ...assetUpdate }); + } + + if (idsToTrash.length > 0) { + // TODO: this is duplicated with AssetService.deleteAssets + const { trash } = await this.getConfig({ withCache: true }); + const force = !trash.enabled; + + await this.assetRepository.updateAll(idsToTrash, { + deletedAt: new Date(), + status: force ? AssetStatus.Deleted : AssetStatus.Trashed, + duplicateId: null, + }); + + await this.eventRepository.emit(force ? 'AssetDeleteAll' : 'AssetTrashAll', { + assetIds: idsToTrash, + userId: auth.user.id, + }); + } + + return { id: duplicateId, success: true }; + } + + private getSyncMergeResult(assets: MapAsset[], assetAlbumMap: Map = new Map()): ResolveRequest { + const response: ResolveRequest = { + mergedAlbumIds: [], + mergedTagIds: [], + mergedTagValues: [], + assetUpdate: {}, + exifUpdate: {}, + }; + + response.assetUpdate.isFavorite = assets.some((asset) => asset.isFavorite); + + const visibilityOrder = [AssetVisibility.Locked, AssetVisibility.Archive, AssetVisibility.Timeline]; + let visibility = visibilityOrder.find((level) => assets.some((asset) => asset.visibility === level)); + if (!visibility && assets.some((asset) => asset.visibility === AssetVisibility.Hidden)) { + visibility = AssetVisibility.Hidden; + } + if (visibility) { + response.assetUpdate.visibility = visibility; + } + + let rating = 0; + for (const asset of assets) { + const assetRating = asset.exifInfo?.rating ?? 0; + if (assetRating > rating) { + rating = assetRating; + } + } + if (rating > 0) { + response.exifUpdate.rating = rating; + } + + const descriptionLines = uniqueNonEmptyLines(assets.map((asset) => asset.exifInfo?.description)); + const description = descriptionLines.length > 0 ? descriptionLines.join('\n') : null; + if (description !== null) { + response.exifUpdate.description = description; + } + + const latitude = getUniqueCoordinate(assets, 'latitude'); + const longitude = getUniqueCoordinate(assets, 'longitude'); + if (latitude !== null && longitude !== null) { + response.exifUpdate.latitude = latitude; + response.exifUpdate.longitude = longitude; + } + + const albumIdSet = new Set(); + for (const [, albumIds] of assetAlbumMap) { + for (const albumId of albumIds) { + albumIdSet.add(albumId); + } + } + response.mergedAlbumIds = [...albumIdSet]; + + const allTags = assets.flatMap((asset) => asset.tags ?? []); + const tagIds = [...new Set(allTags.map((tag) => tag.id).filter((id): id is string => !!id))]; + const tagValues = [...new Set(allTags.map((tag) => tag.value).filter((v): v is string => !!v))]; + if (tagIds.length > 0) { + response.mergedTagIds = tagIds; + response.mergedTagValues = tagValues; + } + + return response; + } + @OnJob({ name: JobName.AssetDetectDuplicatesQueueAll, queue: QueueName.DuplicateDetection }) async handleQueueSearchDuplicates({ force }: JobOf): Promise { const { machineLearning } = await this.getConfig({ withCache: false }); diff --git a/server/src/utils/access.ts b/server/src/utils/access.ts index 2e0f7d10d0..21e8bdd66e 100644 --- a/server/src/utils/access.ts +++ b/server/src/utils/access.ts @@ -241,6 +241,11 @@ const checkOtherAccess = async (access: AccessRepository, request: OtherAccessRe return ids.has(auth.user.id) ? new Set([auth.user.id]) : new Set(); } + case Permission.DuplicateRead: + case Permission.DuplicateDelete: { + return access.duplicate.checkOwnerAccess(auth.user.id, ids); + } + case Permission.AuthDeviceDelete: { return await access.authDevice.checkOwnerAccess(auth.user.id, ids); } diff --git a/server/src/utils/duplicate.spec.ts b/server/src/utils/duplicate.spec.ts new file mode 100644 index 0000000000..4c5d5ddfc4 --- /dev/null +++ b/server/src/utils/duplicate.spec.ts @@ -0,0 +1,178 @@ +import { AssetResponseDto } from 'src/dtos/asset-response.dto'; +import { AssetType, AssetVisibility } from 'src/enum'; +import { getExifCount, suggestDuplicate, suggestDuplicateKeepAssetIds } from 'src/utils/duplicate'; +import { describe, expect, it } from 'vitest'; + +const createAsset = ( + id: string, + fileSizeInByte: number | null = null, + exifFields: Record = {}, +): AssetResponseDto => ({ + id, + type: AssetType.Image, + thumbhash: null, + localDateTime: new Date().toISOString(), + duration: '0:00:00.00000', + hasMetadata: true, + width: 1920, + height: 1080, + createdAt: new Date().toISOString(), + deviceAssetId: 'device-asset-1', + deviceId: 'device-1', + ownerId: 'owner-1', + originalPath: '/path/to/asset', + originalFileName: 'asset.jpg', + fileCreatedAt: new Date().toISOString(), + fileModifiedAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + isFavorite: false, + isArchived: false, + isTrashed: false, + isOffline: false, + isEdited: false, + visibility: AssetVisibility.Timeline, + checksum: 'checksum', + exifInfo: + fileSizeInByte !== null || Object.keys(exifFields).length > 0 ? { fileSizeInByte, ...exifFields } : undefined, +}); + +describe('duplicate utils', () => { + describe('getExifCount', () => { + it('should return 0 for asset without exifInfo', () => { + const asset = createAsset('asset-1'); + asset.exifInfo = undefined; + expect(getExifCount(asset)).toBe(0); + }); + + it('should return 0 for empty exifInfo', () => { + const asset = createAsset('asset-1'); + asset.exifInfo = {}; + expect(getExifCount(asset)).toBe(0); + }); + + it('should count all truthy values in exifInfo', () => { + const asset = createAsset('asset-1', 1000, { + make: 'Canon', + model: 'EOS 5D', + dateTimeOriginal: new Date(), + timeZone: 'UTC', + latitude: 40.7128, + longitude: -74.006, + city: 'New York', + state: 'NY', + country: 'USA', + description: 'A photo', + rating: 5, + }); + // fileSizeInByte (1000) + 11 other truthy fields = 12 + expect(getExifCount(asset)).toBe(12); + }); + + it('should not count null or undefined values', () => { + const asset = createAsset('asset-1', 1000, { + make: 'Canon', + model: null, + latitude: undefined, + city: '', + rating: 0, + }); + // fileSizeInByte (1000) + make ('Canon') = 2 truthy values + // model (null), latitude (undefined), city (''), rating (0) are all falsy + expect(getExifCount(asset)).toBe(2); + }); + }); + + describe('suggestDuplicate', () => { + it('should return undefined for empty list', () => { + expect(suggestDuplicate([])).toBeUndefined(); + }); + + it('should return the single asset for list with one asset', () => { + const asset = createAsset('asset-1', 1000); + expect(suggestDuplicate([asset])).toEqual(asset); + }); + + it('should return asset with largest file size', () => { + const small = createAsset('small', 1000); + const large = createAsset('large', 5000); + const medium = createAsset('medium', 3000); + + expect(suggestDuplicate([small, large, medium])?.id).toBe('large'); + expect(suggestDuplicate([large, small, medium])?.id).toBe('large'); + expect(suggestDuplicate([medium, small, large])?.id).toBe('large'); + }); + + it('should use EXIF count as tie-breaker when file sizes are equal', () => { + const lessExif = createAsset('less-exif', 1000, { make: 'Canon' }); + const moreExif = createAsset('more-exif', 1000, { + make: 'Canon', + model: 'EOS 5D', + dateTimeOriginal: new Date(), + city: 'New York', + }); + + expect(suggestDuplicate([lessExif, moreExif])?.id).toBe('more-exif'); + expect(suggestDuplicate([moreExif, lessExif])?.id).toBe('more-exif'); + }); + + it('should handle assets with no exifInfo (treat as 0 file size)', () => { + const noExif = createAsset('no-exif'); + noExif.exifInfo = undefined; + const withExif = createAsset('with-exif', 1000); + + expect(suggestDuplicate([noExif, withExif])?.id).toBe('with-exif'); + }); + + it('should handle assets with exifInfo but no fileSizeInByte', () => { + const noFileSize = createAsset('no-file-size'); + noFileSize.exifInfo = { make: 'Canon', model: 'EOS 5D' }; + const withFileSize = createAsset('with-file-size', 1000); + + expect(suggestDuplicate([noFileSize, withFileSize])?.id).toBe('with-file-size'); + }); + + it('should return last asset when all have same file size and EXIF count', () => { + const asset1 = createAsset('asset-1', 1000, { make: 'Canon' }); + const asset2 = createAsset('asset-2', 1000, { make: 'Nikon' }); + + // Both have same file size (1000) and same EXIF count (2: fileSizeInByte + make) + // Should return the last one in the sorted array + const result = suggestDuplicate([asset1, asset2]); + // Since they're equal, the last one after sorting should be returned + expect(result).toBeDefined(); + expect(['asset-1', 'asset-2']).toContain(result?.id); + }); + + it('should prioritize file size over EXIF count', () => { + const largeWithLessExif = createAsset('large-less-exif', 5000, { make: 'Canon' }); + const smallWithMoreExif = createAsset('small-more-exif', 1000, { + make: 'Canon', + model: 'EOS 5D', + dateTimeOriginal: new Date(), + city: 'New York', + state: 'NY', + country: 'USA', + }); + + expect(suggestDuplicate([largeWithLessExif, smallWithMoreExif])?.id).toBe('large-less-exif'); + }); + }); + + describe('suggestDuplicateKeepAssetIds', () => { + it('should return empty array for empty list', () => { + expect(suggestDuplicateKeepAssetIds([])).toEqual([]); + }); + + it('should return array with single asset ID', () => { + const asset = createAsset('asset-1', 1000); + expect(suggestDuplicateKeepAssetIds([asset])).toEqual(['asset-1']); + }); + + it('should return array with best asset ID', () => { + const small = createAsset('small', 1000); + const large = createAsset('large', 5000); + + expect(suggestDuplicateKeepAssetIds([small, large])).toEqual(['large']); + }); + }); +}); diff --git a/server/src/utils/duplicate.ts b/server/src/utils/duplicate.ts new file mode 100644 index 0000000000..4f6deb2fce --- /dev/null +++ b/server/src/utils/duplicate.ts @@ -0,0 +1,60 @@ +import { AssetResponseDto } from 'src/dtos/asset-response.dto'; + +/** + * Counts all truthy values in the exifInfo object. + * This matches the client implementation in web/src/lib/utils/exif-utils.ts + * + * @param asset Asset with optional exifInfo + * @returns Count of truthy EXIF values + */ +export const getExifCount = (asset: AssetResponseDto): number => { + return Object.values(asset.exifInfo ?? {}).filter(Boolean).length; +}; + +/** + * Suggests the best duplicate asset to keep from a list of duplicates. + * This is a direct port of the client logic from web/src/lib/utils/duplicate-utils.ts + * + * The best asset is determined by the following criteria: + * 1. Largest image file size in bytes + * 2. Largest count of EXIF data (as tie-breaker) + * + * @param assets List of duplicate assets + * @returns The best asset to keep, or undefined if empty list + */ +export const suggestDuplicate = (assets: AssetResponseDto[]): AssetResponseDto | undefined => { + if (assets.length === 0) { + return undefined; + } + + // Sort by file size ascending (smallest first) + let duplicateAssets = [...assets].toSorted( + (a, b) => (a.exifInfo?.fileSizeInByte ?? 0) - (b.exifInfo?.fileSizeInByte ?? 0), + ); + + // Get the largest file size (last element after sorting) + const largestFileSize = duplicateAssets.at(-1)?.exifInfo?.fileSizeInByte ?? 0; + + // Filter to keep only assets with the largest file size + duplicateAssets = duplicateAssets.filter((asset) => (asset.exifInfo?.fileSizeInByte ?? 0) === largestFileSize); + + // If there are multiple assets with the same file size, sort by EXIF count + if (duplicateAssets.length >= 2) { + duplicateAssets = duplicateAssets.toSorted((a, b) => getExifCount(a) - getExifCount(b)); + } + + // Return the last asset (highest EXIF count among highest file size) + return duplicateAssets.at(-1); +}; + +/** + * Suggests the best duplicate asset IDs to keep from a list of duplicates. + * Returns an array with a single asset ID (the best candidate), or empty if no assets. + * + * @param assets List of duplicate assets + * @returns Array of suggested asset IDs to keep (0 or 1 element) + */ +export const suggestDuplicateKeepAssetIds = (assets: AssetResponseDto[]): string[] => { + const suggested = suggestDuplicate(assets); + return suggested ? [suggested.id] : []; +}; diff --git a/server/test/mappers.ts b/server/test/mappers.ts index 3d5b34e9c0..ed2c9431f3 100644 --- a/server/test/mappers.ts +++ b/server/test/mappers.ts @@ -1,4 +1,5 @@ import { Selectable, ShallowDehydrateObject } from 'kysely'; +import { MapAsset } from 'src/dtos/asset-response.dto'; import { AssetEditActionItem } from 'src/dtos/editing.dto'; import { ActivityTable } from 'src/schema/tables/activity.table'; import { AssetTable } from 'src/schema/tables/asset.table'; @@ -205,10 +206,11 @@ export const getForStack = (stack: ReturnType) => ({ })), }); -export const getForDuplicate = (asset: ReturnType) => ({ - ...getDehydrated(asset), - exifInfo: getDehydrated(asset.exifInfo), -}); +export const getForDuplicate = (asset: ReturnType) => + ({ + ...getDehydrated(asset), + exifInfo: getDehydrated(asset.exifInfo), + }) as unknown as MapAsset; export const getForSharedLink = (sharedLink: ReturnType) => ({ ...sharedLink, diff --git a/server/test/repositories/access.repository.mock.ts b/server/test/repositories/access.repository.mock.ts index 208b09c120..f723113bd1 100644 --- a/server/test/repositories/access.repository.mock.ts +++ b/server/test/repositories/access.repository.mock.ts @@ -33,6 +33,10 @@ export const newAccessRepositoryMock = (): IAccessRepositoryMock => { checkOwnerAccess: vitest.fn().mockResolvedValue(new Set()), }, + duplicate: { + checkOwnerAccess: vitest.fn().mockResolvedValue(new Set()), + }, + memory: { checkOwnerAccess: vitest.fn().mockResolvedValue(new Set()), }, diff --git a/web/src/lib/components/LinkToDocs.svelte b/web/src/lib/components/LinkToDocs.svelte new file mode 100644 index 0000000000..604b1ac14b --- /dev/null +++ b/web/src/lib/components/LinkToDocs.svelte @@ -0,0 +1,16 @@ + + + + {#snippet children({ message })} + {message} + {/snippet} + diff --git a/web/src/lib/components/utilities-page/duplicates/duplicates-compare-control.svelte b/web/src/lib/components/utilities-page/duplicates/duplicates-compare-control.svelte index ab19f12079..094b50813b 100644 --- a/web/src/lib/components/utilities-page/duplicates/duplicates-compare-control.svelte +++ b/web/src/lib/components/utilities-page/duplicates/duplicates-compare-control.svelte @@ -6,7 +6,6 @@ import { authManager } from '$lib/managers/auth-manager.svelte'; import { handlePromiseError } from '$lib/utils'; import { getNextAsset, getPreviousAsset } from '$lib/utils/asset-utils'; - import { suggestDuplicate } from '$lib/utils/duplicate-utils'; import { navigate } from '$lib/utils/navigation'; import { getAssetInfo, type AssetResponseDto } from '@immich/sdk'; import { Button } from '@immich/ui'; @@ -17,24 +16,27 @@ interface Props { assets: AssetResponseDto[]; + suggestedKeepAssetIds: string[]; onResolve: (duplicateAssetIds: string[], trashIds: string[]) => void; onStack: (assets: AssetResponseDto[]) => void; } - let { assets, onResolve, onStack }: Props = $props(); + let { assets, suggestedKeepAssetIds, onResolve, onStack }: Props = $props(); // eslint-disable-next-line svelte/no-unnecessary-state-wrap let selectedAssetIds = $state(new SvelteSet()); let trashCount = $derived(assets.length - selectedAssetIds.size); onMount(() => { - const suggestedAsset = suggestDuplicate(assets); - - if (!suggestedAsset) { - selectedAssetIds = new SvelteSet(assets[0].id); + if (suggestedKeepAssetIds.length > 0) { + for (const id of suggestedKeepAssetIds) { + selectedAssetIds.add(id); + } return; } - selectedAssetIds.add(suggestedAsset.id); + if (assets.length > 0) { + selectedAssetIds.add(assets[0].id); + } }); onDestroy(() => { diff --git a/web/src/lib/modals/DuplicatesInformationModal.svelte b/web/src/lib/modals/DuplicatesInformationModal.svelte deleted file mode 100644 index b32165a1ae..0000000000 --- a/web/src/lib/modals/DuplicatesInformationModal.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - - -
-

{$t('deduplication_info_description')}

-
    -
  1. {$t('deduplication_criteria_1')}
  2. -
  3. {$t('deduplication_criteria_2')}
  4. -
-
-
-
diff --git a/web/src/lib/route.ts b/web/src/lib/route.ts index 5a59ec704c..4cb1965122 100644 --- a/web/src/lib/route.ts +++ b/web/src/lib/route.ts @@ -42,6 +42,12 @@ const asQueryString = ( return items.length === 0 ? '' : `?${items.join('&')}`; }; +const DOCS_BASE = 'https://docs.immich.app'; + +export const Docs = { + duplicates: () => `${DOCS_BASE}/features/duplicates-utility`, +}; + export const Route = { // auth login: (params?: { continue?: string; autoLaunch?: 0 | 1 }) => '/auth/login' + asQueryString(params), diff --git a/web/src/lib/stores/preferences.store.ts b/web/src/lib/stores/preferences.store.ts index e863d5a446..0873337e1f 100644 --- a/web/src/lib/stores/preferences.store.ts +++ b/web/src/lib/stores/preferences.store.ts @@ -49,7 +49,7 @@ const defaultMapSettings = { const persistedObject = (key: string, defaults: T) => persisted(key, defaults, { serializer: { - parse: (text) => ({ ...defaultMapSettings, ...JSON.parse(text ?? null) }), + parse: (text) => ({ ...defaults, ...JSON.parse(text ?? null) }), stringify: JSON.stringify, }, }); diff --git a/web/src/lib/utils/duplicate-utils.spec.ts b/web/src/lib/utils/duplicate-utils.spec.ts deleted file mode 100644 index 4fa427989a..0000000000 --- a/web/src/lib/utils/duplicate-utils.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { suggestDuplicate } from '$lib/utils/duplicate-utils'; -import type { AssetResponseDto } from '@immich/sdk'; - -describe('choosing a duplicate', () => { - it('picks the asset with the largest file size', () => { - const assets = [ - { exifInfo: { fileSizeInByte: 300 } }, - { exifInfo: { fileSizeInByte: 200 } }, - { exifInfo: { fileSizeInByte: 100 } }, - ]; - expect(suggestDuplicate(assets as AssetResponseDto[])).toEqual(assets[0]); - }); - - it('picks the asset with the most exif data if multiple assets have the same file size', () => { - const assets = [ - { exifInfo: { fileSizeInByte: 200, rating: 5, fNumber: 1 } }, - { exifInfo: { fileSizeInByte: 200, rating: 5 } }, - { exifInfo: { fileSizeInByte: 100, rating: 5 } }, - ]; - expect(suggestDuplicate(assets as AssetResponseDto[])).toEqual(assets[0]); - }); - - it('returns undefined for an empty array', () => { - const assets: AssetResponseDto[] = []; - expect(suggestDuplicate(assets)).toBeUndefined(); - }); - - it('handles assets with no exifInfo', () => { - const assets = [{ exifInfo: { fileSizeInByte: 200 } }, {}]; - expect(suggestDuplicate(assets as AssetResponseDto[])).toEqual(assets[0]); - }); - - it('handles assets with exifInfo but no fileSizeInByte', () => { - const assets = [{ exifInfo: { rating: 5, fNumber: 1 } }, { exifInfo: { rating: 5 } }]; - expect(suggestDuplicate(assets as AssetResponseDto[])).toEqual(assets[0]); - }); -}); diff --git a/web/src/lib/utils/duplicate-utils.ts b/web/src/lib/utils/duplicate-utils.ts deleted file mode 100644 index 1c783a3667..0000000000 --- a/web/src/lib/utils/duplicate-utils.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { getExifCount } from '$lib/utils/exif-utils'; -import type { AssetResponseDto } from '@immich/sdk'; -import { sortBy } from 'lodash-es'; - -/** - * Suggests the best duplicate asset to keep from a list of duplicates. - * - * The best asset is determined by the following criteria: - * - Largest image file size in bytes - * - Largest count of exif data - * - * @param assets List of duplicate assets - * @returns The best asset to keep - */ -export const suggestDuplicate = (assets: AssetResponseDto[]): AssetResponseDto | undefined => { - let duplicateAssets = sortBy(assets, (asset) => asset.exifInfo?.fileSizeInByte ?? 0); - - // Update the list to only include assets with the largest file size - duplicateAssets = duplicateAssets.filter( - (asset) => asset.exifInfo?.fileSizeInByte === duplicateAssets.at(-1)?.exifInfo?.fileSizeInByte, - ); - - // If there are multiple assets with the same file size, sort the list by the count of exif data - if (duplicateAssets.length >= 2) { - duplicateAssets = sortBy(duplicateAssets, getExifCount); - } - - // Return the last asset in the list - return duplicateAssets.pop(); -}; diff --git a/web/src/lib/utils/persisted.ts b/web/src/lib/utils/persisted.ts index 73eb4de5db..008352ac8f 100644 --- a/web/src/lib/utils/persisted.ts +++ b/web/src/lib/utils/persisted.ts @@ -46,11 +46,25 @@ type PersistedLocalStorageOptions = { parse(text: string): T; }; valid?: (value: T | unknown) => value is T; + upgrade?: 'merge' | ((value: T) => T); }; +const merge = (defaultValue: T) => { + return (value: T): T => { + if (typeof value === 'object') { + value = { ...defaultValue, ...value } as T; + } + + return value; + }; +}; + +const identity = (value: T): T => value; + export class PersistedLocalStorage extends PersistedBase { constructor(key: string, defaultValue: T, options: PersistedLocalStorageOptions = {}) { const valid = options.valid || (() => true); + const upgrade = options.upgrade === 'merge' ? merge(defaultValue) : identity; const serializer = options.serializer || JSON; super(key, defaultValue, { @@ -69,7 +83,7 @@ export class PersistedLocalStorage extends PersistedBase { return; } - return parsed; + return upgrade(parsed); }, write: (key: string, value: T) => { if (browser) { diff --git a/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte index c7d30febc7..148ad08a02 100644 --- a/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -3,24 +3,21 @@ import { page } from '$app/state'; import { shortcuts } from '$lib/actions/shortcut'; import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte'; + import LinkToDocs from '$lib/components/LinkToDocs.svelte'; import DuplicatesCompareControl from '$lib/components/utilities-page/duplicates/duplicates-compare-control.svelte'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; - import DuplicatesInformationModal from '$lib/modals/DuplicatesInformationModal.svelte'; import ShortcutsModal from '$lib/modals/ShortcutsModal.svelte'; import { Route } from '$lib/route'; import { locale } from '$lib/stores/preferences.store'; - import { stackAssets } from '$lib/utils/asset-utils'; - import { suggestDuplicate } from '$lib/utils/duplicate-utils'; import { handleError } from '$lib/utils/handle-error'; import type { AssetResponseDto } from '@immich/sdk'; - import { deleteAssets, deleteDuplicates, updateAssets } from '@immich/sdk'; + import { createStack, deleteDuplicates, resolveDuplicates, updateAssets } from '@immich/sdk'; import { Button, HStack, IconButton, modalManager, Text, toastManager } from '@immich/ui'; import { mdiCheckOutline, mdiChevronLeft, mdiChevronRight, - mdiInformationOutline, mdiKeyboard, mdiPageFirst, mdiPageLast, @@ -98,34 +95,48 @@ }; const handleResolve = async (duplicateId: string, duplicateAssetIds: string[], trashIds: string[]) => { + const forceDelete = !featureFlagsManager.value.trash; + const shouldConfirmDelete = trashIds.length > 0 && forceDelete; + return withConfirmation( async () => { - await deleteAssets({ assetBulkDeleteDto: { ids: trashIds, force: !featureFlagsManager.value.trash } }); - await updateAssets({ assetBulkUpdateDto: { ids: duplicateAssetIds, duplicateId: null } }); + const keepAssetIds = duplicateAssetIds.filter((id) => !trashIds.includes(id)); + + const response = await resolveDuplicates({ + duplicateResolveDto: { + groups: [{ duplicateId, keepAssetIds, trashAssetIds: trashIds }], + }, + }); + + const { success, error, errorMessage } = response[0]; + if (!success) { + throw new Error(errorMessage || error); + } duplicates = duplicates.filter((duplicate) => duplicate.duplicateId !== duplicateId); deletedNotification(trashIds.length); await navigateToIndex(duplicatesIndex); }, - trashIds.length > 0 && !featureFlagsManager.value.trash ? $t('delete_duplicates_confirmation') : undefined, - trashIds.length > 0 && !featureFlagsManager.value.trash ? $t('permanently_delete') : undefined, + shouldConfirmDelete ? $t('delete_duplicates_confirmation') : undefined, + shouldConfirmDelete ? $t('permanently_delete') : undefined, ); }; const handleStack = async (duplicateId: string, assets: AssetResponseDto[]) => { - await stackAssets(assets, false); - const duplicateAssetIds = assets.map((asset) => asset.id); - await updateAssets({ assetBulkUpdateDto: { ids: duplicateAssetIds, duplicateId: null } }); + const assetIds = assets.map((asset) => asset.id); + await createStack({ stackCreateDto: { assetIds } }); + await updateAssets({ assetBulkUpdateDto: { ids: assetIds, duplicateId: null } }); duplicates = duplicates.filter((duplicate) => duplicate.duplicateId !== duplicateId); await navigateToIndex(duplicatesIndex); }; const handleDeduplicateAll = async () => { - const idsToKeep = duplicates.map((group) => suggestDuplicate(group.assets)).map((asset) => asset?.id); - const idsToDelete = duplicates.flatMap((group, i) => - group.assets.map((asset) => asset.id).filter((asset) => asset !== idsToKeep[i]), - ); + // Use server-provided suggestedKeepAssetIds from each group + const idsToDelete = duplicates.flatMap((group) => { + const keepIds = new Set(group.suggestedKeepAssetIds); + return group.assets.map((asset) => asset.id).filter((id) => !keepIds.has(id)); + }); let prompt, confirmText; if (featureFlagsManager.value.trash) { @@ -138,14 +149,26 @@ return withConfirmation( async () => { - await deleteAssets({ assetBulkDeleteDto: { ids: idsToDelete, force: !featureFlagsManager.value.trash } }); - await updateAssets({ - assetBulkUpdateDto: { - ids: [...idsToDelete, ...idsToKeep.filter((id): id is string => !!id)], - duplicateId: null, + // Resolve all groups in a single batch request + const response = await resolveDuplicates({ + duplicateResolveDto: { + groups: duplicates.map((group) => { + const keepIds = new Set(group.suggestedKeepAssetIds); + return { + duplicateId: group.duplicateId, + keepAssetIds: group.suggestedKeepAssetIds, + trashAssetIds: group.assets.map((asset) => asset.id).filter((id) => !keepIds.has(id)), + }; + }), }, }); + // Count failures and show appropriate message + const failedCount = response.filter(({ success }) => !success).length; + if (failedCount > 0) { + toastManager.danger($t('errors.unable_to_resolve_duplicate')); + } + duplicates = []; deletedNotification(idsToDelete.length); @@ -228,26 +251,16 @@ {/snippet} -
+
{#if duplicates && duplicates.length > 0} -
-
-

{$t('duplicates_description')}

-
- modalManager.show(DuplicatesInformationModal)} - /> -
+ +

{$t('duplicates_description')}

+
{#key duplicates[duplicatesIndex].duplicateId} handleResolve(duplicates[duplicatesIndex].duplicateId, duplicateAssetIds, trashIds)} onStack={(assets) => handleStack(duplicates[duplicatesIndex].duplicateId, assets)} From e2d26ebdea86c8157017602b64fc4019fb24c842 Mon Sep 17 00:00:00 2001 From: Saurav Sharma <77329690+saurav61091@users.noreply.github.com> Date: Fri, 27 Mar 2026 00:07:05 +0530 Subject: [PATCH 047/156] fix(web): prevent Safari from overwriting live photo image with video (#26898) When downloading a live photo, Safari overwrites the image file with the motion video because both share the same base filename. Append '-motion' suffix to the video filename to prevent collision. For example, IMG_1234.heic and IMG_1234.mov become IMG_1234.heic and IMG_1234-motion.mov. Fixes #23055 --- web/src/lib/services/asset.service.spec.ts | 2 +- web/src/lib/services/asset.service.ts | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/web/src/lib/services/asset.service.spec.ts b/web/src/lib/services/asset.service.spec.ts index 170f5d2f23..b63df86479 100644 --- a/web/src/lib/services/asset.service.spec.ts +++ b/web/src/lib/services/asset.service.spec.ts @@ -78,7 +78,7 @@ describe('AssetService', () => { const asset = assetFactory.build({ originalFileName: 'asset.heic', livePhotoVideoId: '1' }); await handleDownloadAsset(asset, { edited: false }); expect($t).toHaveBeenNthCalledWith(1, 'downloading_asset_filename', { values: { filename: 'asset.heic' } }); - expect($t).toHaveBeenNthCalledWith(2, 'downloading_asset_filename', { values: { filename: 'asset.mov' } }); + expect($t).toHaveBeenNthCalledWith(2, 'downloading_asset_filename', { values: { filename: 'asset-motion.mov' } }); expect(toastManager.primary).toHaveBeenCalledWith('formatter'); }); }); diff --git a/web/src/lib/services/asset.service.ts b/web/src/lib/services/asset.service.ts index baade8facd..bc16b65577 100644 --- a/web/src/lib/services/asset.service.ts +++ b/web/src/lib/services/asset.service.ts @@ -319,8 +319,14 @@ export const handleDownloadAsset = async (asset: AssetResponseDto, { edited }: { if (asset.livePhotoVideoId) { const motionAsset = await getAssetInfo({ ...authManager.params, id: asset.livePhotoVideoId }); if (!isAndroidMotionVideo(motionAsset) || get(preferences)?.download.includeEmbeddedVideos) { + const motionFilename = motionAsset.originalFileName; + const lastDotIndex = motionFilename.lastIndexOf('.'); + const motionDownloadFilename = + lastDotIndex > 0 + ? `${motionFilename.slice(0, lastDotIndex)}-motion${motionFilename.slice(lastDotIndex)}` + : `${motionFilename}-motion`; assets.push({ - filename: motionAsset.originalFileName, + filename: motionDownloadFilename, id: asset.livePhotoVideoId, cacheKey: motionAsset.thumbhash, }); From 4b9ebc2cfff9251769b6f41a39f066992a4b1468 Mon Sep 17 00:00:00 2001 From: Min Idzelis Date: Fri, 27 Mar 2026 08:20:15 -0400 Subject: [PATCH 048/156] refactor(web): migrate isFaceEditMode from standalone store to assetViewerManager (#27307) --- .../asset-viewer/asset-viewer-nav-bar.svelte | 3 +-- .../components/asset-viewer/asset-viewer.svelte | 5 ++--- .../components/asset-viewer/detail-panel.svelte | 3 +-- .../asset-viewer/face-editor/face-editor.svelte | 17 ++++++++++------- .../components/asset-viewer/photo-viewer.svelte | 9 ++++----- .../asset-viewer/video-native-viewer.svelte | 6 +++--- .../lib/managers/asset-viewer-manager.svelte.ts | 14 +++++++++++++- web/src/lib/services/asset.service.ts | 5 +---- web/src/lib/stores/face-edit.svelte.ts | 1 - .../(user)/photos/[[assetId=id]]/+page.svelte | 6 ------ 10 files changed, 35 insertions(+), 34 deletions(-) delete mode 100644 web/src/lib/stores/face-edit.svelte.ts diff --git a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte index 00e845e8ec..29626ea265 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte @@ -25,7 +25,6 @@ import { Route } from '$lib/route'; import { getGlobalActions } from '$lib/services/app.service'; import { getAssetActions } from '$lib/services/asset.service'; - import { isFaceEditMode } from '$lib/stores/face-edit.svelte'; import { user } from '$lib/stores/user.store'; import { getSharedLink, withoutIcons } from '$lib/utils'; import type { OnUndoDelete } from '$lib/utils/actions'; @@ -93,7 +92,7 @@ title: $t('go_back'), type: $t('assets'), icon: languageManager.rtl ? mdiArrowRight : mdiArrowLeft, - $if: () => !!onClose && !isFaceEditMode.value, + $if: () => !!onClose && !assetViewerManager.isFaceEditMode, onAction: () => onClose?.(), shortcuts: [{ key: 'Escape' }], }); diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte index e2981e2e55..1072104d4d 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte @@ -14,7 +14,6 @@ import { editManager, EditToolType } from '$lib/managers/edit/edit-manager.svelte'; import { eventManager } from '$lib/managers/event-manager.svelte'; import { getAssetActions } from '$lib/services/asset.service'; - import { isFaceEditMode } from '$lib/stores/face-edit.svelte'; import { ocrManager } from '$lib/stores/ocr.svelte'; import { alwaysLoadOriginalVideo } from '$lib/stores/preferences.store'; import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store'; @@ -498,7 +497,7 @@
{/if} - {#if $slideshowState === SlideshowState.None && showNavigation && !assetViewerManager.isShowEditor && !isFaceEditMode.value && previousAsset} + {#if $slideshowState === SlideshowState.None && showNavigation && !assetViewerManager.isShowEditor && !assetViewerManager.isFaceEditMode && previousAsset}
navigateAsset('previous')} />
@@ -571,7 +570,7 @@ {/if}
- {#if $slideshowState === SlideshowState.None && showNavigation && !assetViewerManager.isShowEditor && !isFaceEditMode.value && nextAsset} + {#if $slideshowState === SlideshowState.None && showNavigation && !assetViewerManager.isShowEditor && !assetViewerManager.isFaceEditMode && nextAsset}
navigateAsset('next')} />
diff --git a/web/src/lib/components/asset-viewer/detail-panel.svelte b/web/src/lib/components/asset-viewer/detail-panel.svelte index e80d376f57..ba3ae559dc 100644 --- a/web/src/lib/components/asset-viewer/detail-panel.svelte +++ b/web/src/lib/components/asset-viewer/detail-panel.svelte @@ -10,7 +10,6 @@ import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import AssetChangeDateModal from '$lib/modals/AssetChangeDateModal.svelte'; import { Route } from '$lib/route'; - import { isFaceEditMode } from '$lib/stores/face-edit.svelte'; import { boundingBoxesArray } from '$lib/stores/people.store'; import { locale } from '$lib/stores/preferences.store'; import { preferences, user } from '$lib/stores/user.store'; @@ -208,7 +207,7 @@ shape="round" color="secondary" variant="ghost" - onclick={() => (isFaceEditMode.value = !isFaceEditMode.value)} + onclick={() => assetViewerManager.toggleFaceEditMode()} /> {#if people.length > 0 || unassignedFaces.length > 0} diff --git a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte index c5b4ab5ce7..ea2babfc11 100644 --- a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte +++ b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte @@ -2,7 +2,6 @@ import { shortcut } from '$lib/actions/shortcut'; import ImageThumbnail from '$lib/components/assets/thumbnail/image-thumbnail.svelte'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; - import { isFaceEditMode } from '$lib/stores/face-edit.svelte'; import { getPeopleThumbnailUrl } from '$lib/utils'; import { getNaturalSize, scaleToFit } from '$lib/utils/container-utils'; import { handleError } from '$lib/utils/handle-error'; @@ -10,7 +9,7 @@ import { Button, Input, modalManager, toastManager } from '@immich/ui'; import { Canvas, InteractiveFabricObject, Rect } from 'fabric'; import { clamp } from 'lodash-es'; - import { onMount, tick } from 'svelte'; + import { onDestroy, onMount, tick } from 'svelte'; import { t } from 'svelte-i18n'; interface Props { @@ -139,8 +138,8 @@ ); }; - const cancel = () => { - isFaceEditMode.value = false; + const onClose = () => { + assetViewerManager.closeFaceEditMode(); }; const getPeople = async () => { @@ -291,12 +290,16 @@ } catch (error) { handleError(error, 'Error tagging face'); } finally { - isFaceEditMode.value = false; + onClose(); } }; + + onDestroy(() => { + onClose(); + }); - +
- +
diff --git a/web/src/lib/components/asset-viewer/photo-viewer.svelte b/web/src/lib/components/asset-viewer/photo-viewer.svelte index 4a6a02cb4a..a26b66b0b6 100644 --- a/web/src/lib/components/asset-viewer/photo-viewer.svelte +++ b/web/src/lib/components/asset-viewer/photo-viewer.svelte @@ -8,7 +8,6 @@ import AssetViewerEvents from '$lib/components/AssetViewerEvents.svelte'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { castManager } from '$lib/managers/cast-manager.svelte'; - import { isFaceEditMode } from '$lib/stores/face-edit.svelte'; import { ocrManager } from '$lib/stores/ocr.svelte'; import { boundingBoxesArray, type Faces } from '$lib/stores/people.store'; import { SlideshowLook, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store'; @@ -106,7 +105,7 @@ const onPlaySlideshow = () => ($slideshowState = SlideshowState.PlaySlideshow); $effect(() => { - if (isFaceEditMode.value && assetViewerManager.zoom > 1) { + if (assetViewerManager.isFaceEditMode && assetViewerManager.zoom > 1) { onZoom(); } }); @@ -166,7 +165,7 @@ const handleImageMouseMove = (event: MouseEvent) => { $boundingBoxesArray = []; - if (!assetViewerManager.imgRef || !element || isFaceEditMode.value || ocrManager.showOverlay) { + if (!assetViewerManager.imgRef || !element || assetViewerManager.isFaceEditMode || ocrManager.showOverlay) { return; } @@ -215,7 +214,7 @@ ondblclick={onZoom} onmousemove={handleImageMouseMove} onmouseleave={handleImageMouseLeave} - use:zoomImageAction={{ disabled: isFaceEditMode.value || ocrManager.showOverlay }} + use:zoomImageAction={{ disabled: assetViewerManager.isFaceEditMode || ocrManager.showOverlay }} {...useSwipe((event) => onSwipe?.(event))} > - {#if isFaceEditMode.value && assetViewerManager.imgRef} + {#if assetViewerManager.isFaceEditMode && assetViewerManager.imgRef} {/if}
diff --git a/web/src/lib/components/asset-viewer/video-native-viewer.svelte b/web/src/lib/components/asset-viewer/video-native-viewer.svelte index e53414be07..915d5ceb58 100644 --- a/web/src/lib/components/asset-viewer/video-native-viewer.svelte +++ b/web/src/lib/components/asset-viewer/video-native-viewer.svelte @@ -3,7 +3,7 @@ import VideoRemoteViewer from '$lib/components/asset-viewer/video-remote-viewer.svelte'; import { assetViewerFadeDuration } from '$lib/constants'; import { castManager } from '$lib/managers/cast-manager.svelte'; - import { isFaceEditMode } from '$lib/stores/face-edit.svelte'; + import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { autoPlayVideo, loopVideo as loopVideoPreference, @@ -115,7 +115,7 @@ let containerHeight = $state(0); $effect(() => { - if (isFaceEditMode.value) { + if (assetViewerManager.isFaceEditMode) { videoPlayer?.pause(); } }); @@ -172,7 +172,7 @@
{/if} - {#if isFaceEditMode.value} + {#if assetViewerManager.isFaceEditMode} {/if} {/if} diff --git a/web/src/lib/managers/asset-viewer-manager.svelte.ts b/web/src/lib/managers/asset-viewer-manager.svelte.ts index f46be6b698..157ed31243 100644 --- a/web/src/lib/managers/asset-viewer-manager.svelte.ts +++ b/web/src/lib/managers/asset-viewer-manager.svelte.ts @@ -42,7 +42,7 @@ class AssetViewerManager extends BaseEventManager { isShowActivityPanel = $state(false); isPlayingMotionPhoto = $state(false); isShowEditor = $state(false); - + #isFaceEditMode = $state(false); #viewingAssetStoreState = $state(); #viewState = $state(false); gridScrollTarget = $state(); @@ -63,6 +63,10 @@ class AssetViewerManager extends BaseEventManager { return isShowDetailPanel.current; } + get isFaceEditMode() { + return this.#isFaceEditMode; + } + get zoomState() { return this.#zoomState; } @@ -161,6 +165,14 @@ class AssetViewerManager extends BaseEventManager { this.isShowEditor = false; } + toggleFaceEditMode() { + this.#isFaceEditMode = !this.#isFaceEditMode; + } + + closeFaceEditMode() { + this.#isFaceEditMode = false; + } + setAsset(asset: AssetResponseDto) { this.#viewingAssetStoreState = asset; this.#viewState = true; diff --git a/web/src/lib/services/asset.service.ts b/web/src/lib/services/asset.service.ts index bc16b65577..d2d847fc15 100644 --- a/web/src/lib/services/asset.service.ts +++ b/web/src/lib/services/asset.service.ts @@ -5,7 +5,6 @@ import { eventManager } from '$lib/managers/event-manager.svelte'; import AssetAddToAlbumModal from '$lib/modals/AssetAddToAlbumModal.svelte'; import AssetTagModal from '$lib/modals/AssetTagModal.svelte'; import SharedLinkCreateModal from '$lib/modals/SharedLinkCreateModal.svelte'; -import { isFaceEditMode } from '$lib/stores/face-edit.svelte'; import { user as authUser, preferences } from '$lib/stores/user.store'; import type { AssetControlContext } from '$lib/types'; import { getAssetMediaUrl, getSharedLink, sleep } from '$lib/utils'; @@ -229,9 +228,7 @@ export const getAssetActions = ($t: MessageFormatter, asset: AssetResponseDto) = icon: mdiFaceRecognition, type: $t('assets'), $if: () => isOwner && asset.type === AssetTypeEnum.Image && !asset.isTrashed, - onAction: () => { - isFaceEditMode.value = !isFaceEditMode.value; - }, + onAction: () => assetViewerManager.toggleFaceEditMode(), shortcuts: { key: 'p' }, }; diff --git a/web/src/lib/stores/face-edit.svelte.ts b/web/src/lib/stores/face-edit.svelte.ts deleted file mode 100644 index 0b2f436099..0000000000 --- a/web/src/lib/stores/face-edit.svelte.ts +++ /dev/null @@ -1 +0,0 @@ -export const isFaceEditMode = $state({ value: false }); diff --git a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte index 21f51a8f49..462f8fa3b6 100644 --- a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte @@ -1,5 +1,4 @@
- {#each filterIntersecting(viewerAssets) as viewerAsset (viewerAsset.id)} + {#each filterIsInOrNearViewport(viewerAssets) as viewerAsset (viewerAsset.id)} {@const position = viewerAsset.position!} {@const asset = viewerAsset.asset!} diff --git a/web/src/lib/components/timeline/Month.svelte b/web/src/lib/components/timeline/Month.svelte index 91073a0a5f..c0b20b17bb 100644 --- a/web/src/lib/components/timeline/Month.svelte +++ b/web/src/lib/components/timeline/Month.svelte @@ -3,7 +3,7 @@ import { DayGroup } from '$lib/managers/timeline-manager/day-group.svelte'; import type { MonthGroup } from '$lib/managers/timeline-manager/month-group.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; - import { assetsSnapshot } from '$lib/managers/timeline-manager/utils.svelte'; + import { assetsSnapshot, filterIsInOrNearViewport } from '$lib/managers/timeline-manager/utils.svelte'; import type { VirtualScrollManager } from '$lib/managers/VirtualScrollManager/VirtualScrollManager.svelte'; import type { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { uploadAssetsStore } from '$lib/stores/upload'; @@ -14,7 +14,16 @@ import type { Snippet } from 'svelte'; type Props = { - thumbnail: Snippet<[{ asset: TimelineAsset; position: CommonPosition; dayGroup: DayGroup; groupIndex: number }]>; + thumbnail: Snippet< + [ + { + asset: TimelineAsset; + position: CommonPosition; + dayGroup: DayGroup; + groupIndex: number; + }, + ] + >; customThumbnailLayout?: Snippet<[TimelineAsset]>; singleSelect: boolean; assetInteraction: AssetInteraction; @@ -37,10 +46,6 @@ const transitionDuration = $derived(monthGroup.timelineManager.suspendTransitions && !$isUploading ? 0 : 150); - const filterIntersecting = (intersectables: T[]) => { - return intersectables.filter(({ intersecting }) => intersecting); - }; - const getDayGroupFullDate = (dayGroup: DayGroup): string => { const { month, year } = dayGroup.monthGroup.yearMonth; const date = fromTimelinePlainDate({ @@ -52,7 +57,7 @@ }; -{#each filterIntersecting(monthGroup.dayGroups) as dayGroup, groupIndex (dayGroup.day)} +{#each filterIsInOrNearViewport(monthGroup.dayGroups) as dayGroup, groupIndex (dayGroup.day)} {@const isDayGroupSelected = assetInteraction.selectedGroup.has(dayGroup.groupTitle)}
{#each timelineManager.months as monthGroup (monthGroup.viewId)} - {@const display = monthGroup.intersecting} + {@const isInOrNearViewport = monthGroup.isInOrNearViewport} {@const absoluteHeight = monthGroup.top} {#if !monthGroup.isLoaded} @@ -654,7 +654,7 @@ >
- {:else if display} + {:else if isInOrNearViewport}
this.viewerAssets.some((viewAsset) => viewAsset.intersecting)); + isInOrNearViewport = $derived.by(() => this.viewerAssets.some((viewAsset) => viewAsset.isInOrNearViewport)); #top: number = $state(0); #start: number = $state(0); @@ -137,7 +137,7 @@ export class DayGroup { } layout(options: CommonLayoutOptions, noDefer: boolean) { - if (!noDefer && !this.monthGroup.intersecting && !this.monthGroup.timelineManager.isScrollingOnLoad) { + if (!noDefer && !this.monthGroup.isInOrNearViewport && !this.monthGroup.timelineManager.isScrollingOnLoad) { this.#deferredLayout = true; return; } diff --git a/web/src/lib/managers/timeline-manager/internal/intersection-support.svelte.ts b/web/src/lib/managers/timeline-manager/internal/intersection-support.svelte.ts index 3c6f2d8256..6fa8ab88c0 100644 --- a/web/src/lib/managers/timeline-manager/internal/intersection-support.svelte.ts +++ b/web/src/lib/managers/timeline-manager/internal/intersection-support.svelte.ts @@ -6,68 +6,64 @@ const { TIMELINE: { INTERSECTION_EXPAND_TOP, INTERSECTION_EXPAND_BOTTOM }, } = TUNABLES; -export function updateIntersectionMonthGroup(timelineManager: TimelineManager, month: MonthGroup) { - const actuallyIntersecting = calculateMonthGroupIntersecting(timelineManager, month, 0, 0); - let preIntersecting = false; - if (!actuallyIntersecting) { - preIntersecting = calculateMonthGroupIntersecting( - timelineManager, - month, - INTERSECTION_EXPAND_TOP, - INTERSECTION_EXPAND_BOTTOM, - ); +export function isIntersecting(regionTop: number, regionBottom: number, otherTop: number, otherBottom: number) { + return ( + (regionTop >= otherTop && regionTop < otherBottom) || + (regionBottom >= otherTop && regionBottom < otherBottom) || + (regionTop < otherTop && regionBottom >= otherBottom) + ); +} + +export enum ViewportProximity { + FarFromViewport, + NearViewport, + InViewport, +} + +export function isInViewport(state: ViewportProximity): boolean { + return state === ViewportProximity.InViewport; +} + +export function isInOrNearViewport(state: ViewportProximity): boolean { + return state !== ViewportProximity.FarFromViewport; +} + +function calculateViewportProximity(regionTop: number, regionBottom: number, windowTop: number, windowBottom: number) { + if (regionBottom < windowTop - INTERSECTION_EXPAND_TOP || regionTop >= windowBottom + INTERSECTION_EXPAND_BOTTOM) { + return ViewportProximity.FarFromViewport; } - month.intersecting = actuallyIntersecting || preIntersecting; - month.actuallyIntersecting = actuallyIntersecting; - if (preIntersecting || actuallyIntersecting) { + + if (regionBottom < windowTop || regionTop >= windowBottom) { + return ViewportProximity.NearViewport; + } + + return ViewportProximity.InViewport; +} + +export function updateMonthGroupViewportProximity(timelineManager: TimelineManager, month: MonthGroup) { + const proximity = calculateViewportProximity( + month.top, + month.top + month.height, + timelineManager.visibleWindow.top, + timelineManager.visibleWindow.bottom, + ); + + month.viewportProximity = proximity; + if (isInOrNearViewport(proximity)) { timelineManager.clearDeferredLayout(month); } } -/** - * General function to check if a rectangular region intersects with a window. - * @param regionTop - Top position of the region to check - * @param regionBottom - Bottom position of the region to check - * @param windowTop - Top position of the window - * @param windowBottom - Bottom position of the window - * @returns true if the region intersects with the window - */ -export function isIntersecting(regionTop: number, regionBottom: number, windowTop: number, windowBottom: number) { - return ( - (regionTop >= windowTop && regionTop < windowBottom) || - (regionBottom >= windowTop && regionBottom < windowBottom) || - (regionTop < windowTop && regionBottom >= windowBottom) - ); -} - -export function calculateMonthGroupIntersecting( - timelineManager: TimelineManager, - monthGroup: MonthGroup, - expandTop: number, - expandBottom: number, -) { - const monthGroupTop = monthGroup.top; - const monthGroupBottom = monthGroupTop + monthGroup.height; - const topWindow = timelineManager.visibleWindow.top - expandTop; - const bottomWindow = timelineManager.visibleWindow.bottom + expandBottom; - - return isIntersecting(monthGroupTop, monthGroupBottom, topWindow, bottomWindow); -} - -/** - * Calculate intersection for viewer assets with additional parameters like header height - */ -export function calculateViewerAssetIntersecting( +export function calculateViewerAssetViewportProximity( timelineManager: TimelineManager, positionTop: number, positionHeight: number, - expandTop: number = INTERSECTION_EXPAND_TOP, - expandBottom: number = INTERSECTION_EXPAND_BOTTOM, ) { - const topWindow = timelineManager.visibleWindow.top - timelineManager.headerHeight - expandTop; - const bottomWindow = timelineManager.visibleWindow.bottom + timelineManager.headerHeight + expandBottom; - - const positionBottom = positionTop + positionHeight; - - return isIntersecting(positionTop, positionBottom, topWindow, bottomWindow); + const headerHeight = timelineManager.headerHeight; + return calculateViewportProximity( + positionTop, + positionTop + positionHeight, + timelineManager.visibleWindow.top - headerHeight, + timelineManager.visibleWindow.bottom + headerHeight, + ); } diff --git a/web/src/lib/managers/timeline-manager/month-group.svelte.ts b/web/src/lib/managers/timeline-manager/month-group.svelte.ts index b41deb5785..d23dc1b801 100644 --- a/web/src/lib/managers/timeline-manager/month-group.svelte.ts +++ b/web/src/lib/managers/timeline-manager/month-group.svelte.ts @@ -17,6 +17,11 @@ import { import { t } from 'svelte-i18n'; import { get } from 'svelte/store'; +import { + ViewportProximity, + isInOrNearViewport as isInOrNearViewportUtil, + isInViewport as isInViewportUtil, +} from '$lib/managers/timeline-manager/internal/intersection-support.svelte'; import { SvelteSet } from 'svelte/reactivity'; import { DayGroup } from './day-group.svelte'; import { GroupInsertionCache } from './group-insertion-cache.svelte'; @@ -25,8 +30,7 @@ import type { AssetDescriptor, Direction, MoveAsset, TimelineAsset } from './typ import { ViewerAsset } from './viewer-asset.svelte'; export class MonthGroup { - #intersecting: boolean = $state(false); - actuallyIntersecting: boolean = $state(false); + #viewportProximity: ViewportProximity = $state(ViewportProximity.FarFromViewport); isLoaded: boolean = $state(false); dayGroups: DayGroup[] = $state([]); readonly timelineManager: TimelineManager; @@ -78,21 +82,25 @@ export class MonthGroup { } } - set intersecting(newValue: boolean) { - const old = this.#intersecting; + set viewportProximity(newValue: ViewportProximity) { + const old = this.#viewportProximity; if (old === newValue) { return; } - this.#intersecting = newValue; - if (newValue) { + this.#viewportProximity = newValue; + if (isInOrNearViewportUtil(newValue)) { void this.timelineManager.loadMonthGroup(this.yearMonth); } else { this.cancel(); } } - get intersecting() { - return this.#intersecting; + get isInOrNearViewport() { + return isInOrNearViewportUtil(this.#viewportProximity); + } + + get isInViewport() { + return isInViewportUtil(this.#viewportProximity); } get lastDayGroup() { diff --git a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts index 38c593bd00..9ab884b059 100644 --- a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts +++ b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts @@ -2,7 +2,7 @@ import { VirtualScrollManager } from '$lib/managers/VirtualScrollManager/Virtual import { authManager } from '$lib/managers/auth-manager.svelte'; import { eventManager } from '$lib/managers/event-manager.svelte'; import { GroupInsertionCache } from '$lib/managers/timeline-manager/group-insertion-cache.svelte'; -import { updateIntersectionMonthGroup } from '$lib/managers/timeline-manager/internal/intersection-support.svelte'; +import { updateMonthGroupViewportProximity } from '$lib/managers/timeline-manager/internal/intersection-support.svelte'; import { updateGeometry } from '$lib/managers/timeline-manager/internal/layout-support.svelte'; import { loadFromTimeBuckets } from '$lib/managers/timeline-manager/internal/load-support.svelte'; import { @@ -91,7 +91,7 @@ export class TimelineManager extends VirtualScrollManager { static #INIT_OPTIONS = {}; #websocketSupport: WebsocketSupport | undefined; #options: TimelineManagerOptions = TimelineManager.#INIT_OPTIONS; - #updatingIntersections = false; + #updatingViewportProximities = false; #scrollableElement: HTMLElement | undefined = $state(); #showAssetOwners = new PersistedLocalStorage('album-show-asset-owners', false); #unsubscribes: Array<() => void> = []; @@ -198,17 +198,21 @@ export class TimelineManager extends VirtualScrollManager { return clamp((this.visibleWindow.top - month.top) / month.height, 0, 1); } - override updateIntersections() { - if (this.#updatingIntersections || !this.isInitialized || this.visibleWindow.bottom === this.visibleWindow.top) { + override updateViewportProximities() { + if ( + this.#updatingViewportProximities || + !this.isInitialized || + this.visibleWindow.bottom === this.visibleWindow.top + ) { return; } - this.#updatingIntersections = true; + this.#updatingViewportProximities = true; for (const month of this.months) { - updateIntersectionMonthGroup(this, month); + updateMonthGroupViewportProximity(this, month); } - const month = this.months.find((month) => month.actuallyIntersecting); + const month = this.months.find((month) => month.isInViewport); const viewportTopRatioInMonth = this.#calculateVewportTopRatioInMonth(month); const monthBottomViewportRatio = this.#calculateMonthBottomViewportRatio(month); @@ -218,7 +222,7 @@ export class TimelineManager extends VirtualScrollManager { viewportTopRatioInMonth, }; - this.#updatingIntersections = false; + this.#updatingViewportProximities = false; } clearDeferredLayout(month: MonthGroup) { @@ -317,7 +321,7 @@ export class TimelineManager extends VirtualScrollManager { for (const month of this.months) { updateGeometry(this, month, { invalidateHeight: changedWidth }); } - this.updateIntersections(); + this.updateViewportProximities(); if (changedWidth) { this.#createScrubberMonths(); } @@ -353,7 +357,7 @@ export class TimelineManager extends VirtualScrollManager { }, cancelable); if (executionStatus === 'LOADED') { updateGeometry(this, monthGroup, { invalidateHeight: false }); - this.updateIntersections(); + this.updateViewportProximities(); } } @@ -538,7 +542,7 @@ export class TimelineManager extends VirtualScrollManager { updateGeometry(this, month, { invalidateHeight: true }); } if (changedGeometry) { - this.updateIntersections(); + this.updateViewportProximities(); } return { updated, notUpdated, changedGeometry }; } @@ -547,7 +551,7 @@ export class TimelineManager extends VirtualScrollManager { for (const month of this.months) { updateGeometry(this, month, { invalidateHeight: true }); } - this.updateIntersections(); + this.updateViewportProximities(); } getFirstAsset(): TimelineAsset | undefined { @@ -626,6 +630,6 @@ export class TimelineManager extends VirtualScrollManager { month.sortDayGroups(); updateGeometry(this, month, { invalidateHeight: true }); } - this.updateIntersections(); + this.updateViewportProximities(); } } diff --git a/web/src/lib/managers/timeline-manager/utils.svelte.ts b/web/src/lib/managers/timeline-manager/utils.svelte.ts index 2aba6470ee..efc94206ea 100644 --- a/web/src/lib/managers/timeline-manager/utils.svelte.ts +++ b/web/src/lib/managers/timeline-manager/utils.svelte.ts @@ -2,3 +2,7 @@ import type { TimelineAsset } from './types'; export const assetSnapshot = (asset: TimelineAsset): TimelineAsset => $state.snapshot(asset); export const assetsSnapshot = (assets: TimelineAsset[]) => assets.map((asset) => $state.snapshot(asset)); + +export function filterIsInOrNearViewport(items: T[]) { + return items.filter(({ isInOrNearViewport }) => isInOrNearViewport); +} diff --git a/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts b/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts index 161cc049f1..e0d8e1f5b5 100644 --- a/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts +++ b/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts @@ -1,23 +1,31 @@ import type { CommonPosition } from '$lib/utils/layout-utils'; import type { DayGroup } from './day-group.svelte'; -import { calculateViewerAssetIntersecting } from './internal/intersection-support.svelte'; +import { + ViewportProximity, + calculateViewerAssetViewportProximity, + isInOrNearViewport, +} from './internal/intersection-support.svelte'; import type { TimelineAsset } from './types'; export class ViewerAsset { readonly #group: DayGroup; - intersecting = $derived.by(() => { + #viewportProximity = $derived.by(() => { if (!this.position) { - return false; + return ViewportProximity.FarFromViewport; } const store = this.#group.monthGroup.timelineManager; const positionTop = this.#group.absoluteDayGroupTop + this.position.top; - return calculateViewerAssetIntersecting(store, positionTop, this.position.height); + return calculateViewerAssetViewportProximity(store, positionTop, this.position.height); }); + get isInOrNearViewport() { + return isInOrNearViewport(this.#viewportProximity); + } + position: CommonPosition | undefined = $state.raw(); asset: TimelineAsset = $state(); id: string = $derived(this.asset.id); From 8724848fce7ef7082e084dd763a0f08753a73110 Mon Sep 17 00:00:00 2001 From: Thomas <9749173+uhthomas@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:10:19 +0000 Subject: [PATCH 050/156] chore(mobile): reduce spacing on video controls (#27313) The spacing was required for the old slider, but the new one has its own spacing and makes it redundant. There is too much now, and we've received feedback that it should be less sparse. The default track height of 16px is an improvement over the old track height, but it is very thick. A middleground of 12px might be better. --- .../widgets/asset_viewer/bottom_bar.widget.dart | 17 +++++++---------- mobile/lib/theme/theme_data.dart | 1 + .../widgets/asset_viewer/video_controls.dart | 10 +++++----- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart index cc171f4490..b51960bb05 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart @@ -71,16 +71,13 @@ class ViewerBottomBar extends ConsumerWidget { ), child: SafeArea( top: false, - child: Padding( - padding: const EdgeInsets.only(top: 16), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - if (asset.isVideo) VideoControls(videoPlayerName: asset.heroTag), - if (!isReadonlyModeEnabled) - Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: actions), - ], - ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + if (asset.isVideo) VideoControls(videoPlayerName: asset.heroTag), + if (!isReadonlyModeEnabled) + Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: actions), + ], ), ), ), diff --git a/mobile/lib/theme/theme_data.dart b/mobile/lib/theme/theme_data.dart index 69b8596490..7200d58dca 100644 --- a/mobile/lib/theme/theme_data.dart +++ b/mobile/lib/theme/theme_data.dart @@ -62,6 +62,7 @@ ThemeData getThemeData({required ColorScheme colorScheme, required Locale locale ), chipTheme: const ChipThemeData(side: BorderSide.none), sliderTheme: const SliderThemeData( + trackHeight: 12, // ignore: deprecated_member_use year2023: false, ), diff --git a/mobile/lib/widgets/asset_viewer/video_controls.dart b/mobile/lib/widgets/asset_viewer/video_controls.dart index 85707c82ea..ff782113c7 100644 --- a/mobile/lib/widgets/asset_viewer/video_controls.dart +++ b/mobile/lib/widgets/asset_viewer/video_controls.dart @@ -66,9 +66,9 @@ class VideoControls extends HookConsumerWidget { final isLoaded = duration != Duration.zero; return Padding( - padding: const EdgeInsets.all(24), + padding: const EdgeInsets.only(left: 16, right: 16, bottom: 12), child: Column( - spacing: 16, + spacing: 4, children: [ Row( children: [ @@ -77,8 +77,8 @@ class VideoControls extends HookConsumerWidget { padding: const EdgeInsets.all(12), constraints: const BoxConstraints(), icon: isFinished - ? const Icon(Icons.replay, color: Colors.white, size: 32, shadows: _controlShadows) - : AnimatedPlayPause(color: Colors.white, size: 32, playing: isPlaying, shadows: _controlShadows), + ? const Icon(Icons.replay, color: Colors.white, shadows: _controlShadows) + : AnimatedPlayPause(color: Colors.white, playing: isPlaying, shadows: _controlShadows), onPressed: () => _toggle(ref, isCasting), ), const Spacer(), @@ -91,7 +91,7 @@ class VideoControls extends HookConsumerWidget { shadows: _controlShadows, ), ), - const SizedBox(width: 16), + const SizedBox(width: 12), ], ), Slider( From c13fd9e4b54f50c91f84349aa7a4333998cba581 Mon Sep 17 00:00:00 2001 From: Yaros Date: Fri, 27 Mar 2026 15:11:02 +0100 Subject: [PATCH 051/156] fix(mobile): video icon not showing on memories (#27311) --- mobile/lib/presentation/pages/drift_memory.page.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mobile/lib/presentation/pages/drift_memory.page.dart b/mobile/lib/presentation/pages/drift_memory.page.dart index 3f8879c91d..846f062501 100644 --- a/mobile/lib/presentation/pages/drift_memory.page.dart +++ b/mobile/lib/presentation/pages/drift_memory.page.dart @@ -207,6 +207,11 @@ class DriftMemoryPage extends HookConsumerWidget { WidgetsBinding.instance.addPostFrameCallback((_) { DriftMemoryPage.setMemory(ref, memories[pageNumber]); }); + + // Update currentAsset to the first asset of the new memory + if (memories[pageNumber].assets.isNotEmpty) { + currentAsset.value = memories[pageNumber].assets.first; + } } currentAssetPage.value = 0; From be0fc403d807bca0556e46d18193ca5e7e72de39 Mon Sep 17 00:00:00 2001 From: Putu Prema Date: Fri, 27 Mar 2026 21:21:43 +0700 Subject: [PATCH 052/156] fix(mobile): mismatch between system and app color when using low-chroma system color scheme (#27282) use DynamicSchemeVariant.fidelity to preserve low-chroma system color scheme as the app color --- mobile/lib/theme/dynamic_theme.dart | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mobile/lib/theme/dynamic_theme.dart b/mobile/lib/theme/dynamic_theme.dart index d0cb8e646f..7f7c4d05d7 100644 --- a/mobile/lib/theme/dynamic_theme.dart +++ b/mobile/lib/theme/dynamic_theme.dart @@ -19,8 +19,16 @@ abstract final class DynamicTheme { // Some palettes do not generate surface container colors accurately, // so we regenerate all colors using the primary color _theme = ImmichTheme( - light: ColorScheme.fromSeed(seedColor: primaryColor, brightness: Brightness.light), - dark: ColorScheme.fromSeed(seedColor: primaryColor, brightness: Brightness.dark), + light: ColorScheme.fromSeed( + seedColor: primaryColor, + brightness: Brightness.light, + dynamicSchemeVariant: DynamicSchemeVariant.fidelity, + ), + dark: ColorScheme.fromSeed( + seedColor: primaryColor, + brightness: Brightness.dark, + dynamicSchemeVariant: DynamicSchemeVariant.fidelity, + ), ); } } catch (error) { From 306a3b8c7f07c324e242943a3e3e5250bdac4d31 Mon Sep 17 00:00:00 2001 From: Luis Nachtigall <31982496+LeLunZ@users.noreply.github.com> Date: Fri, 27 Mar 2026 15:35:50 +0100 Subject: [PATCH 053/156] fix(mobile): images loads sometimes cancel too early (#27067) * refactor listener tracking for image stream completers and fix early cancel call * fix: improve cache listener identification in image stream tracking * add documentation and test cases for listener tracking in ImageStreamCompleter * fix: remove unnecessary image provision flag from listener tracking * fix: override setImage method in cache aware listener tracker mixin * fix: rename test file --- .../animated_image_stream_completer.dart | 42 +--- .../cache_aware_listener_tracker.mixin.dart | 84 ++++++++ ...ne_frame_multi_image_stream_completer.dart | 36 +--- ...che_aware_listener_tracker_mixin_test.dart | 183 ++++++++++++++++++ 4 files changed, 279 insertions(+), 66 deletions(-) create mode 100644 mobile/lib/presentation/widgets/images/cache_aware_listener_tracker.mixin.dart create mode 100644 mobile/test/presentation/widgets/images/cache_aware_listener_tracker_mixin_test.dart diff --git a/mobile/lib/presentation/widgets/images/animated_image_stream_completer.dart b/mobile/lib/presentation/widgets/images/animated_image_stream_completer.dart index be4fbff8cf..796d30e992 100644 --- a/mobile/lib/presentation/widgets/images/animated_image_stream_completer.dart +++ b/mobile/lib/presentation/widgets/images/animated_image_stream_completer.dart @@ -3,24 +3,21 @@ import 'dart:ui' as ui; import 'package:flutter/foundation.dart' show InformationCollector; import 'package:flutter/painting.dart'; +import 'package:immich_mobile/presentation/widgets/images/cache_aware_listener_tracker.mixin.dart'; /// A [MultiFrameImageStreamCompleter] with support for listener tracking /// which makes resource cleanup possible when no longer needed. /// Codec is disposed through the MultiFrameImageStreamCompleter's internals onDispose method -class AnimatedImageStreamCompleter extends MultiFrameImageStreamCompleter { - void Function()? _onLastListenerRemoved; - int _listenerCount = 0; - // True once any image or the codec has been provided. - // Until then the image cache holds one listener, so "last real listener gone" - // is _listenerCount == 1, not 0. - bool didProvideImage = false; - +class AnimatedImageStreamCompleter extends MultiFrameImageStreamCompleter with CacheAwareListenerTrackerMixin { AnimatedImageStreamCompleter._({ required super.codec, required super.scale, + required bool hadInitialImage, super.informationCollector, void Function()? onLastListenerRemoved, - }) : _onLastListenerRemoved = onLastListenerRemoved; + }) { + setupListenerTracking(hadInitialImage: hadInitialImage, onLastListenerRemoved: onLastListenerRemoved); + } factory AnimatedImageStreamCompleter({ required Stream stream, @@ -33,23 +30,21 @@ class AnimatedImageStreamCompleter extends MultiFrameImageStreamCompleter { final self = AnimatedImageStreamCompleter._( codec: codecCompleter.future, scale: scale, + hadInitialImage: initialImage != null, informationCollector: informationCollector, onLastListenerRemoved: onLastListenerRemoved, ); if (initialImage != null) { - self.didProvideImage = true; self.setImage(initialImage); } stream.listen( (item) { if (item is ImageInfo) { - self.didProvideImage = true; self.setImage(item); } else if (item is ui.Codec) { if (!codecCompleter.isCompleted) { - self.didProvideImage = true; codecCompleter.complete(item); } } @@ -70,27 +65,4 @@ class AnimatedImageStreamCompleter extends MultiFrameImageStreamCompleter { return self; } - - @override - void addListener(ImageStreamListener listener) { - super.addListener(listener); - _listenerCount++; - } - - @override - void removeListener(ImageStreamListener listener) { - super.removeListener(listener); - _listenerCount--; - - final bool onlyCacheListenerLeft = _listenerCount == 1 && !didProvideImage; - final bool noListenersAfterCodec = _listenerCount == 0 && didProvideImage; - - if (onlyCacheListenerLeft || noListenersAfterCodec) { - final onLastListenerRemoved = _onLastListenerRemoved; - if (onLastListenerRemoved != null) { - _onLastListenerRemoved = null; - onLastListenerRemoved(); - } - } - } } diff --git a/mobile/lib/presentation/widgets/images/cache_aware_listener_tracker.mixin.dart b/mobile/lib/presentation/widgets/images/cache_aware_listener_tracker.mixin.dart new file mode 100644 index 0000000000..e63d5c4cfc --- /dev/null +++ b/mobile/lib/presentation/widgets/images/cache_aware_listener_tracker.mixin.dart @@ -0,0 +1,84 @@ +import 'package:flutter/painting.dart'; + +/// Tracks listeners on an [ImageStreamCompleter] to safely cancel in-flight +/// network requests without interfering with [ImageCache] internals. +/// +/// ### Problem +/// Cancelling fetches when the listener count drops to 1 (cache only) or 0 +/// is unsafe due to three framework behaviours: +/// +/// 1. **Memory-pressure eviction** — `ImageCache.clear()` removes the cache +/// listener while UI widgets still need the image. A count-based check +/// would cancel the active fetch, leaving the UI with no image. +/// 2. **Synchronous detach during `putIfAbsent`** — When an `initialImage` +/// is provided, the cache attaches, receives the frame, and detaches +/// synchronously *before* the UI widget can attach. Count reaches 0 and +/// would trigger a false cancel. +/// 3. **Listener misidentification** — After the cache detaches (via 1 or 2), +/// the next UI listener could be mistaken for the cache listener, causing +/// incorrect cancellations when that widget is disposed. +/// +/// ### Solution: First-Listener Heuristic +/// The cache is always the first listener attached (via `putIfAbsent`). This +/// mixin records that identity once and uses it for all subsequent decisions: +/// +/// * **Identity locking** — The first listener is assumed to be the cache. +/// Once identified, `_hasIdentifiedCacheListener` prevents reassignment. +/// * **Targeted cancellation** — Cancel only when the identified cache +/// listener is the sole remaining listener and no image has been delivered. +/// * **Sync-removal bypass** — When `hadInitialImage` is set, the first +/// synchronous removal of the cache listener is ignored so the fetch +/// survives until the UI attaches. +mixin CacheAwareListenerTrackerMixin on ImageStreamCompleter { + void Function()? _onLastListenerRemoved; + int _listenerCount = 0; + bool _hadInitialImage = false; + bool _hasIgnoredFirstSyncRemoval = false; + ImageStreamListener? _cacheListener; + bool _hasIdentifiedCacheListener = false; + + /// Initializes the tracking state. Must be called in the subclass constructor. + void setupListenerTracking({required bool hadInitialImage, void Function()? onLastListenerRemoved}) { + _hadInitialImage = hadInitialImage; + _onLastListenerRemoved = onLastListenerRemoved; + } + + @override + void addListener(ImageStreamListener listener) { + if (!_hasIdentifiedCacheListener) { + _hasIdentifiedCacheListener = true; + _cacheListener = listener; + } + + _listenerCount++; + super.addListener(listener); + } + + @override + void removeListener(ImageStreamListener listener) { + super.removeListener(listener); + _listenerCount--; + + final bool isCacheListener = listener == _cacheListener; + if (isCacheListener) { + _cacheListener = null; + } + + if (_hadInitialImage && !_hasIgnoredFirstSyncRemoval && isCacheListener) { + _hasIgnoredFirstSyncRemoval = true; + return; + } + + final bool onlyCacheListenerLeft = _listenerCount == 1 && _cacheListener != null; + + final bool completelyAbandoned = _listenerCount == 0; + + if (onlyCacheListenerLeft || completelyAbandoned) { + final onLastListenerRemoved = _onLastListenerRemoved; + if (onLastListenerRemoved != null) { + _onLastListenerRemoved = null; + onLastListenerRemoved(); + } + } + } +} diff --git a/mobile/lib/presentation/widgets/images/one_frame_multi_image_stream_completer.dart b/mobile/lib/presentation/widgets/images/one_frame_multi_image_stream_completer.dart index 302deca4a7..e80d191ac9 100644 --- a/mobile/lib/presentation/widgets/images/one_frame_multi_image_stream_completer.dart +++ b/mobile/lib/presentation/widgets/images/one_frame_multi_image_stream_completer.dart @@ -6,14 +6,10 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:flutter/painting.dart'; +import 'package:immich_mobile/presentation/widgets/images/cache_aware_listener_tracker.mixin.dart'; /// An ImageStreamCompleter with support for loading multiple images. -class OneFramePlaceholderImageStreamCompleter extends ImageStreamCompleter { - void Function()? _onLastListenerRemoved; - int _listenerCount = 0; - // True once setImage() has been called at least once. - bool didProvideImage = false; - +class OneFramePlaceholderImageStreamCompleter extends ImageStreamCompleter with CacheAwareListenerTrackerMixin { /// The constructor to create an OneFramePlaceholderImageStreamCompleter. The [images] /// should be the primary images to display (typically asynchronously as they load). /// The [initialImage] is an optional image that will be emitted synchronously @@ -24,14 +20,14 @@ class OneFramePlaceholderImageStreamCompleter extends ImageStreamCompleter { InformationCollector? informationCollector, void Function()? onLastListenerRemoved, }) { + setupListenerTracking(hadInitialImage: initialImage != null, onLastListenerRemoved: onLastListenerRemoved); + if (initialImage != null) { - didProvideImage = true; setImage(initialImage); } - _onLastListenerRemoved = onLastListenerRemoved; + images.listen( (image) { - didProvideImage = true; setImage(image); }, onError: (Object error, StackTrace stack) { @@ -45,26 +41,4 @@ class OneFramePlaceholderImageStreamCompleter extends ImageStreamCompleter { }, ); } - - @override - void addListener(ImageStreamListener listener) { - super.addListener(listener); - _listenerCount = _listenerCount + 1; - } - - @override - void removeListener(ImageStreamListener listener) { - super.removeListener(listener); - _listenerCount = _listenerCount - 1; - - final bool onlyCacheListenerLeft = _listenerCount == 1 && !didProvideImage; - final bool noListenersAfterImage = _listenerCount == 0 && didProvideImage; - - final onLastListenerRemoved = _onLastListenerRemoved; - - if (onLastListenerRemoved != null && (noListenersAfterImage || onlyCacheListenerLeft)) { - _onLastListenerRemoved = null; - onLastListenerRemoved(); - } - } } diff --git a/mobile/test/presentation/widgets/images/cache_aware_listener_tracker_mixin_test.dart b/mobile/test/presentation/widgets/images/cache_aware_listener_tracker_mixin_test.dart new file mode 100644 index 0000000000..02bb0c1053 --- /dev/null +++ b/mobile/test/presentation/widgets/images/cache_aware_listener_tracker_mixin_test.dart @@ -0,0 +1,183 @@ +import 'dart:ui' as ui; + +import 'package:flutter/painting.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:immich_mobile/presentation/widgets/images/cache_aware_listener_tracker.mixin.dart'; + +class TestImageCompleter extends ImageStreamCompleter with CacheAwareListenerTrackerMixin { + bool wasCancelled = false; + + TestImageCompleter({required bool hadInitialImage}) { + setupListenerTracking( + hadInitialImage: hadInitialImage, + onLastListenerRemoved: () { + wasCancelled = true; + }, + ); + } + + @override + void setImage(ImageInfo image) { + super.setImage(image); + } +} + +void main() { + late ImageCache cache; + late ImageStreamListener uiListener; + + setUp(() { + // Create a fresh, real Flutter ImageCache for every test + cache = ImageCache(); + uiListener = ImageStreamListener((_, __) {}); + }); + + group('CacheAwareListenerTrackerMixin with Real ImageCache', () { + + testWidgets('cancels fetch when UI detaches before completion', (WidgetTester tester) async { + final completer = TestImageCompleter(hadInitialImage: false); + final key = Object(); + + // 1. Request image from the real cache (simulating the provider) + final stream = cache.putIfAbsent(key, () => completer)!; + + // 2. UI attaches + stream.addListener(uiListener); + expect(completer.wasCancelled, isFalse); + + // 3. Simulate asynchronous network delay... + await tester.pump(const Duration(milliseconds: 150)); + + // 4. User scrolls away before network finishes. UI detaches. + stream.removeListener(uiListener); + + expect(completer.wasCancelled, isTrue); + }); + + testWidgets('survives cache eviction while UI listener is still attached', (WidgetTester tester) async { + final completer = TestImageCompleter(hadInitialImage: false); + final key = Object(); + + // 1. Request image and attach UI + final stream = cache.putIfAbsent(key, () => completer)!; + stream.addListener(uiListener); + + // 2. Simulate app going to background -> OS Memory Warning -> Cache clears + cache.clear(); + + // Even though the real cache just aggressively detached its listener, + // the stream MUST survive because the UI widget is still on screen! + expect(completer.wasCancelled, isFalse); + + // 3. UI widget finally detaches + stream.removeListener(uiListener); + expect(completer.wasCancelled, isTrue); + }); + + testWidgets('survives synchronous cache detach during putIfAbsent with initialImage', (WidgetTester tester) async { + final completer = TestImageCompleter(hadInitialImage: true); + final key = Object(); + + // Run image creation outside FakeAsync zone to avoid hang + late ui.Image dummyImage; + await tester.runAsync(() async { + dummyImage = await createTestImage(width: 1, height: 1); + }); + + final initialImageInfo = ImageInfo(image: dummyImage); + + final stream = cache.putIfAbsent(key, () { + completer.setImage(initialImageInfo); + return completer; + })!; + + expect(completer.wasCancelled, isFalse); + + stream.addListener(uiListener); + expect(completer.wasCancelled, isFalse); + + stream.removeListener(uiListener); + expect(completer.wasCancelled, isTrue); + }); + + testWidgets('fires cleanup on full abandonment even after successful fetch', (WidgetTester tester) async { + final completer = TestImageCompleter(hadInitialImage: false); + final key = Object(); + + final stream = cache.putIfAbsent(key, () => completer)!; + stream.addListener(uiListener); + + await tester.pump(const Duration(milliseconds: 100)); + + // Run image creation outside FakeAsync zone to avoid hang + late ui.Image dummyImage; + await tester.runAsync(() async { + dummyImage = await createTestImage(width: 1, height: 1); + }); + + completer.setImage(ImageInfo(image: dummyImage)); + + stream.removeListener(uiListener); + + // The stream is completely abandoned (0 listeners), so it fires the cleanup hook. + // Since the image is already downloaded, canceling the network token is a safe no-op. + expect(completer.wasCancelled, isTrue); + }); + + testWidgets('Multiple UI listeners — only all detached, should cancel', (WidgetTester tester) async { + final completer = TestImageCompleter(hadInitialImage: false); + final key = Object(); + + final stream = cache.putIfAbsent(key, () => completer)!; + + final uiListener2 = ImageStreamListener((_, __) {}); + stream.addListener(uiListener); + stream.addListener(uiListener2); + + // First UI detach leaves cache + one UI → no cancel + stream.removeListener(uiListener); + expect(completer.wasCancelled, isFalse); + + // Second UI detach leaves only cache → cancel + stream.removeListener(uiListener2); + expect(completer.wasCancelled, isTrue); + }); + + testWidgets('Listener misidentification: new listener after cache eviction is not treated as cache', (WidgetTester tester) async { + final completer = TestImageCompleter(hadInitialImage: false); + final key = Object(); + + final stream = cache.putIfAbsent(key, () => completer)!; + + // UI attaches + stream.addListener(uiListener); + + // Cache eviction removes the cache listener + cache.clear(); + expect(completer.wasCancelled, isFalse); + + // A second UI listener attaches — must NOT be treated as cache + final uiListener2 = ImageStreamListener((_, __) {}); + stream.addListener(uiListener2); + + // Remove first UI listener; second UI still active → no cancel + stream.removeListener(uiListener); + expect(completer.wasCancelled, isFalse); + + // Remove second UI listener; completely abandoned → cancel + stream.removeListener(uiListener2); + expect(completer.wasCancelled, isTrue); + }); + + testWidgets('No UI listener ever attaches (cache-only) — cache detaches should cancel', (WidgetTester tester) async { + final completer = TestImageCompleter(hadInitialImage: false); + final key = Object(); + + cache.putIfAbsent(key, () => completer); + + // Cache eviction removes the only listener + cache.clear(); + expect(completer.wasCancelled, isTrue); + }); + }); +} From 9b80ffd9c646a553320e2197e805e9fda3813c18 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Fri, 27 Mar 2026 12:41:52 -0400 Subject: [PATCH 054/156] refactor: selection mananger (#27325) --- .../components/album-page/album-viewer.svelte | 18 ++--- .../memory-page/memory-viewer.svelte | 25 ++++--- .../individual-shared-viewer.svelte | 13 ++-- .../gallery-viewer/gallery-viewer.svelte | 6 +- .../map/MapTimelinePanel.svelte | 35 +++++---- web/src/lib/components/timeline/Month.svelte | 4 +- .../lib/components/timeline/Timeline.svelte | 10 +-- .../timeline/actions/SelectAllAction.svelte | 4 +- .../actions/TimelineKeyboardActions.svelte | 4 +- ...asset-multi-select-manager.svelte.spec.ts} | 28 +++---- .../asset-multi-select-manager.svelte.ts} | 75 ++++++++++++------- web/src/lib/managers/event-manager.svelte.ts | 1 + web/src/lib/utils/asset-utils.ts | 6 +- .../[[assetId=id]]/+page.svelte | 57 +++++++------- .../[[assetId=id]]/+page.svelte | 26 +++---- .../[[assetId=id]]/+page.svelte | 26 +++---- .../[[assetId=id]]/+page.svelte | 25 +++---- .../[[assetId=id]]/+page.svelte | 22 +++--- .../[[assetId=id]]/+page.svelte | 18 ++--- .../[[assetId=id]]/+page.svelte | 35 +++++---- .../(user)/photos/[[assetId=id]]/+page.svelte | 36 +++++---- .../[[assetId=id]]/+page.svelte | 26 +++---- .../[[assetId=id]]/+page.svelte | 20 +++-- .../[[assetId=id]]/+page.svelte | 28 ++++--- .../(user)/utilities/geolocation/+page.svelte | 27 ++++--- web/src/routes/+layout.svelte | 3 + 26 files changed, 295 insertions(+), 283 deletions(-) rename web/src/lib/{stores/asset-interaction.svelte.spec.ts => managers/asset-multi-select-manager.svelte.spec.ts} (53%) rename web/src/lib/{stores/asset-interaction.svelte.ts => managers/asset-multi-select-manager.svelte.ts} (62%) diff --git a/web/src/lib/components/album-page/album-viewer.svelte b/web/src/lib/components/album-page/album-viewer.svelte index 13ac213b1b..b66863ad77 100644 --- a/web/src/lib/components/album-page/album-viewer.svelte +++ b/web/src/lib/components/album-page/album-viewer.svelte @@ -5,12 +5,12 @@ import SelectAllAssets from '$lib/components/timeline/actions/SelectAllAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import Timeline from '$lib/components/timeline/Timeline.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { handleDownloadAlbum } from '$lib/services/album.service'; import { getGlobalActions } from '$lib/services/app.service'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { dragAndDropFilesStore } from '$lib/stores/drag-and-drop-files.store'; import { mediaQueryManager } from '$lib/stores/media-query-manager.svelte'; import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store'; @@ -39,8 +39,6 @@ const options = $derived({ albumId: album.id, order: album.order }); let timelineManager = $state() as TimelineManager; - const assetInteraction = new AssetInteraction(); - dragAndDropFilesStore.subscribe((value) => { if (value.isDragging && value.files.length > 0) { handlePromiseError(fileUploadHandler({ files: value.files, albumId: album.id })); @@ -67,15 +65,15 @@ use:shortcut={{ shortcut: { key: 'Escape' }, onShortcut: () => { - if (!assetViewerManager.isViewing && assetInteraction.selectionActive) { - cancelMultiselect(assetInteraction); + if (!assetViewerManager.isViewing && assetMultiSelectManager.selectionActive) { + cancelMultiselect(assetMultiSelectManager); } }, }} />
- +

@@ -99,13 +97,13 @@

- {#if assetInteraction.selectionActive} + {#if assetMultiSelectManager.selectionActive} assetInteraction.clearMultiselect()} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => assetMultiSelectManager.clearMultiselect()} > - + {#if sharedLink.allowDownload} {/if} diff --git a/web/src/lib/components/memory-page/memory-viewer.svelte b/web/src/lib/components/memory-page/memory-viewer.svelte index ab3256df49..ad0b48b42f 100644 --- a/web/src/lib/components/memory-page/memory-viewer.svelte +++ b/web/src/lib/components/memory-page/memory-viewer.svelte @@ -19,13 +19,13 @@ import TagAction from '$lib/components/timeline/actions/TagAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import { QueryParameter } from '$lib/constants'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { authManager } from '$lib/managers/auth-manager.svelte'; import { memoryManager, type MemoryAsset } from '$lib/managers/memory-manager.svelte'; import type { TimelineAsset, Viewport } from '$lib/managers/timeline-manager/types'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { locale, videoViewerMuted, videoViewerVolume } from '$lib/stores/preferences.store'; import { preferences } from '$lib/stores/user.store'; import { getAssetMediaUrl, handlePromiseError, memoryLaneTitle } from '$lib/utils'; @@ -80,7 +80,6 @@ const viewport: Viewport = $state({ width: 0, height: 0 }); // need to include padding in the viewport for gallery const galleryViewport: Viewport = $derived({ height: viewport.height, width: viewport.width - 32 }); - const assetInteraction = new AssetInteraction(); let progressBarController: Tween | undefined = $state(undefined); let videoPlayer: HTMLVideoElement | undefined = $state(); const asHref = (asset: { id: string }) => `?${QueryParameter.ID}=${asset.id}`; @@ -117,7 +116,7 @@ const handlePreviousMemory = () => handleNavigate(current?.previousMemory?.assets[0]); const handleEscape = async () => goto(Route.photos()); const handleSelectAll = () => - assetInteraction.selectAssets(current?.memory.assets.map((a) => toTimelineAsset(a)) || []); + assetMultiSelectManager.selectAssets(current?.memory.assets.map((a) => toTimelineAsset(a)) || []); const handleAction = async (callingContext: string, action: 'reset' | 'pause' | 'play') => { // leaving these log statements here as comments. Very useful to figure out what's going on during dev! @@ -336,14 +335,14 @@ ]} /> -{#if assetInteraction.selectionActive} +{#if assetMultiSelectManager.selectionActive}
cancelMultiselect(assetInteraction)} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => cancelMultiselect(assetMultiSelectManager)} > - {@const Actions = getAssetBulkActions($t, assetInteraction.asControlContext())} + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} - + - - {#if $preferences.tags.enabled && assetInteraction.isAllUserOwned} + + {#if $preferences.tags.enabled && assetMultiSelectManager.isAllUserOwned} {/if} @@ -669,7 +672,7 @@ assets={currentTimelineAssets} {viewerAssets} viewport={galleryViewport} - {assetInteraction} + assetInteraction={assetMultiSelectManager} slidingWindowOffset={viewerHeight} arrowNavigation={false} /> diff --git a/web/src/lib/components/share-page/individual-shared-viewer.svelte b/web/src/lib/components/share-page/individual-shared-viewer.svelte index ec58bd7ea3..09a57a85b6 100644 --- a/web/src/lib/components/share-page/individual-shared-viewer.svelte +++ b/web/src/lib/components/share-page/individual-shared-viewer.svelte @@ -5,10 +5,10 @@ import RemoveFromSharedLink from '$lib/components/timeline/actions/RemoveFromSharedLinkAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import { AssetAction } from '$lib/constants'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { authManager } from '$lib/managers/auth-manager.svelte'; import type { Viewport } from '$lib/managers/timeline-manager/types'; import { Route } from '$lib/route'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { dragAndDropFilesStore } from '$lib/stores/drag-and-drop-files.store'; import { mediaQueryManager } from '$lib/stores/media-query-manager.svelte'; import { handlePromiseError } from '$lib/utils'; @@ -31,7 +31,6 @@ let { sharedLink = $bindable(), isOwned }: Props = $props(); const viewport: Viewport = $state({ width: 0, height: 0 }); - const assetInteraction = new AssetInteraction(); let assets = $derived(sharedLink.assets); @@ -59,7 +58,7 @@ }; const handleSelectAll = () => { - assetInteraction.selectAssets(assets.map((asset) => toTimelineAsset(asset))); + assetMultiSelectManager.selectAssets(assets.map((asset) => toTimelineAsset(asset))); }; const handleAction = async (action: Action) => { @@ -76,14 +75,14 @@ {#if sharedLink?.allowUpload || assets.length > 1}
- +
- {#if assetInteraction.selectionActive} + {#if assetMultiSelectManager.selectionActive} cancelMultiselect(assetInteraction)} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => cancelMultiselect(assetMultiSelectManager)} > () as TimelineManager; - let selectedAssets = $derived(assetInteraction.selectedAssets); + let selectedAssets = $derived(assetMultiSelectManager.selectedAssets); let isAssetStackSelected = $derived(selectedAssets.length === 1 && !!selectedAssets[0].stack); let isLinkActionAvailable = $derived.by(() => { const isLivePhoto = selectedAssets.length === 1 && !!selectedAssets[0].livePhotoVideoId; @@ -55,7 +54,7 @@ selectedAssets.some((asset) => asset.isImage) && selectedAssets.some((asset) => asset.isVideo); - return assetInteraction.isAllUserOwned && (isLivePhoto || isLivePhotoCandidate); + return assetMultiSelectManager.isAllUserOwned && (isLivePhoto || isLivePhotoCandidate); }); const handleLink: OnLink = ({ still, motion }) => { @@ -70,11 +69,11 @@ const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetInteraction.clearMultiselect(); + assetMultiSelectManager.clearMultiselect(); }; const handleEscape = () => { - assetInteraction.clearMultiselect(); + assetMultiSelectManager.clearMultiselect(); }; const timelineBoundingBox = $derived( @@ -91,7 +90,7 @@ $effect.pre(() => { void timelineOptions; - assetInteraction.clearMultiselect(); + assetMultiSelectManager.clearMultiselect(); }); @@ -112,35 +111,35 @@ enableRouting={false} options={timelineOptions} onEscape={handleEscape} - {assetInteraction} + assetInteraction={assetMultiSelectManager} showArchiveIcon />
-{#if assetInteraction.selectionActive} - {@const Actions = getAssetBulkActions($t, assetInteraction.asControlContext())} +{#if assetMultiSelectManager.selectionActive} + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} assetInteraction.clearMultiselect()} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => assetMultiSelectManager.clearMultiselect()} > - + - {#if assetInteraction.isAllUserOwned} + {#if assetMultiSelectManager.isAllUserOwned} timelineManager.update(ids, (asset) => (asset.isFavorite = isFavorite))} /> - {#if assetInteraction.selectedAssets.length > 1 || isAssetStackSelected} + {#if assetMultiSelectManager.selectedAssets.length > 1 || isAssetStackSelected} updateStackedAssetInTimeline(timelineManager, result)} @@ -150,7 +149,7 @@ {#if isLinkActionAvailable} @@ -160,7 +159,7 @@ timelineManager.update(ids, (asset) => (asset.visibility = visibility))} /> {#if $preferences.tags.enabled} diff --git a/web/src/lib/components/timeline/Month.svelte b/web/src/lib/components/timeline/Month.svelte index c0b20b17bb..539b2efdf8 100644 --- a/web/src/lib/components/timeline/Month.svelte +++ b/web/src/lib/components/timeline/Month.svelte @@ -1,11 +1,11 @@ - + @@ -60,22 +58,22 @@ -{#if assetInteraction.selectionActive} +{#if assetMultiSelectManager.selectionActive} assetInteraction.clearMultiselect()} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => assetMultiSelectManager.clearMultiselect()} > - {@const Actions = getAssetBulkActions($t, assetInteraction.asControlContext())} + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} timelineManager.update(ids, (asset) => (asset.visibility = visibility))} /> - + timelineManager.update(ids, (asset) => (asset.isFavorite = isFavorite))} /> diff --git a/web/src/routes/(user)/favorites/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/favorites/[[photos=photos]]/[[assetId=id]]/+page.svelte index b13146aab6..8babca6d58 100644 --- a/web/src/routes/(user)/favorites/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/favorites/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -15,9 +15,9 @@ import TagAction from '$lib/components/timeline/actions/TagAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import Timeline from '$lib/components/timeline/Timeline.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { getAssetBulkActions } from '$lib/services/asset.service'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { preferences } from '$lib/stores/user.store'; import { ActionButton, CommandPaletteDefaultProvider } from '@immich/ui'; import { mdiDotsVertical } from '@mdi/js'; @@ -33,28 +33,26 @@ let timelineManager = $state() as TimelineManager; const options = { isFavorite: true, withStacked: true }; - const assetInteraction = new AssetInteraction(); - const handleEscape = () => { - if (assetInteraction.selectionActive) { - assetInteraction.clearMultiselect(); + if (assetMultiSelectManager.selectionActive) { + assetMultiSelectManager.clearMultiselect(); return; } }; const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetInteraction.clearMultiselect(); + assetMultiSelectManager.clearMultiselect(); }; - + {#snippet empty()} @@ -64,16 +62,16 @@ -{#if assetInteraction.selectionActive} +{#if assetMultiSelectManager.selectionActive} assetInteraction.clearMultiselect()} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => assetMultiSelectManager.clearMultiselect()} > - {@const Actions = getAssetBulkActions($t, assetInteraction.asControlContext())} + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} timelineManager.removeAssets(assetIds)} /> - + @@ -82,7 +80,7 @@ timelineManager.update(ids, (asset) => (asset.visibility = visibility))} /> {#if $preferences.tags.enabled} diff --git a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte index 3cafdcbc5b..6fd6e30c8a 100644 --- a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -19,10 +19,10 @@ import TagAction from '$lib/components/timeline/actions/TagAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import SkipLink from '$lib/elements/SkipLink.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import type { Viewport } from '$lib/managers/timeline-manager/types'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { foldersStore } from '$lib/stores/folders.svelte'; import { preferences } from '$lib/stores/user.store'; import { cancelMultiselect } from '$lib/utils/asset-utils'; @@ -40,7 +40,6 @@ let { data }: Props = $props(); const viewport: Viewport = $state({ width: 0, height: 0 }); - const assetInteraction = new AssetInteraction(); const handleNavigateToFolder = (folderName: string) => navigateToView(joinPaths(data.tree.path, folderName)); @@ -48,7 +47,7 @@ afterNavigate(function clearAssetSelection() { // Clear the asset selection when we navigate (like going to another folder) - cancelMultiselect(assetInteraction); + cancelMultiselect(assetMultiSelectManager); }); function navigateToView(path: string) { @@ -56,7 +55,7 @@ } async function triggerAssetUpdate() { - cancelMultiselect(assetInteraction); + cancelMultiselect(assetMultiSelectManager); if (data.tree.path) { await foldersStore.refreshAssetsByPath(data.tree.path); } @@ -68,7 +67,7 @@ return; } - assetInteraction.selectAssets(data.pathAssets.map((asset) => toTimelineAsset(asset))); + assetMultiSelectManager.selectAssets(data.pathAssets.map((asset) => toTimelineAsset(asset))); } @@ -100,7 +99,7 @@
-{#if assetInteraction.selectionActive} +{#if assetMultiSelectManager.selectionActive}
cancelMultiselect(assetInteraction)} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => cancelMultiselect(assetMultiSelectManager)} > - {@const Actions = getAssetBulkActions($t, assetInteraction.asControlContext())} + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} 0) { for (const id of ids) { @@ -148,8 +147,8 @@ - - {#if $preferences.tags.enabled && assetInteraction.isAllUserOwned} + + {#if $preferences.tags.enabled && assetMultiSelectManager.isAllUserOwned} {/if} diff --git a/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte index 931c19341b..8c0059bf17 100644 --- a/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -13,10 +13,10 @@ import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import Timeline from '$lib/components/timeline/Timeline.svelte'; import { AssetAction } from '$lib/constants'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { Route } from '$lib/route'; import { getUserActions } from '$lib/services/user.service'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { AssetVisibility } from '@immich/sdk'; import { mdiDotsVertical } from '@mdi/js'; import { t } from 'svelte-i18n'; @@ -31,17 +31,15 @@ let timelineManager = $state() as TimelineManager; const options = { visibility: AssetVisibility.Locked }; - const assetInteraction = new AssetInteraction(); - const handleEscape = () => { - if (assetInteraction.selectionActive) { - assetInteraction.clearMultiselect(); + if (assetMultiSelectManager.selectionActive) { + assetMultiSelectManager.clearMultiselect(); return; } }; const handleMoveOffLockedFolder = (assetIds: string[]) => { - assetInteraction.clearMultiselect(); + assetMultiSelectManager.clearMultiselect(); timelineManager.removeAssets(assetIds); }; @@ -57,14 +55,14 @@ @@ -75,12 +73,12 @@ -{#if assetInteraction.selectionActive} +{#if assetMultiSelectManager.selectionActive} assetInteraction.clearMultiselect()} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => assetMultiSelectManager.clearMultiselect()} > - + diff --git a/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 2412c0e0c9..ef1b1bc8b1 100644 --- a/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -5,9 +5,9 @@ import DownloadAction from '$lib/components/timeline/actions/DownloadAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import Timeline from '$lib/components/timeline/Timeline.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { AssetVisibility } from '@immich/sdk'; import { ActionButton, CommandPaletteDefaultProvider } from '@immich/ui'; import { mdiArrowLeft } from '@mdi/js'; @@ -26,26 +26,24 @@ withStacked: true, }); - const assetInteraction = new AssetInteraction(); - const handleEscape = () => { - if (assetInteraction.selectionActive) { - assetInteraction.clearMultiselect(); + if (assetMultiSelectManager.selectionActive) { + assetMultiSelectManager.clearMultiselect(); return; } };
- +
-{#if assetInteraction.selectionActive} +{#if assetMultiSelectManager.selectionActive} assetInteraction.clearMultiselect()} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => assetMultiSelectManager.clearMultiselect()} > - {@const Actions = getAssetBulkActions($t, assetInteraction.asControlContext())} + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte index a891c01b3e..259aaefbe0 100644 --- a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -32,7 +32,7 @@ import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; import { getPersonActions } from '$lib/services/person.service'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { locale } from '$lib/stores/preferences.store'; import { preferences } from '$lib/stores/user.store'; import { websocketEvents } from '$lib/stores/websocket'; @@ -65,7 +65,6 @@ let timelineManager = $state() as TimelineManager; const options = $derived({ visibility: AssetVisibility.Timeline, personId: data.person.id }); - const assetInteraction = new AssetInteraction(); let viewMode: PersonPageViewMode = $state(PersonPageViewMode.VIEW_ASSETS); let isEditingName = $state(false); @@ -106,8 +105,8 @@ }); const handleEscape = async () => { - if (assetInteraction.selectionActive) { - assetInteraction.clearMultiselect(); + if (assetMultiSelectManager.selectionActive) { + assetMultiSelectManager.clearMultiselect(); return; } @@ -127,8 +126,8 @@ }); const handleUnmerge = () => { - timelineManager.removeAssets(assetInteraction.selectedAssets.map((a) => a.id)); - assetInteraction.clearMultiselect(); + timelineManager.removeAssets(assetMultiSelectManager.selectedAssets.map((a) => a.id)); + assetMultiSelectManager.clearMultiselect(); viewMode = PersonPageViewMode.VIEW_ASSETS; }; @@ -154,7 +153,7 @@ handleError(error, $t('errors.unable_to_set_feature_photo')); } - assetInteraction.clearMultiselect(); + assetMultiSelectManager.clearMultiselect(); viewMode = PersonPageViewMode.VIEW_ASSETS; }; @@ -283,7 +282,7 @@ const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetInteraction.clearMultiselect(); + assetMultiSelectManager.clearMultiselect(); }; const onPersonUpdate = async (response: PersonResponseDto) => { @@ -347,7 +346,7 @@ {person} bind:timelineManager {options} - {assetInteraction} + assetInteraction={assetMultiSelectManager} isSelectionMode={viewMode === PersonPageViewMode.SELECT_PERSON} singleSelect={viewMode === PersonPageViewMode.SELECT_PERSON} onSelect={handleSelectFeaturePhoto} @@ -458,18 +457,18 @@
- {#if assetInteraction.selectionActive} + {#if assetMultiSelectManager.selectionActive} assetInteraction.clearMultiselect()} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => assetMultiSelectManager.clearMultiselect()} > - {@const Actions = getAssetBulkActions($t, assetInteraction.asControlContext())} + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} - + timelineManager.update(ids, (asset) => (asset.isFavorite = isFavorite))} /> @@ -484,10 +483,10 @@ timelineManager.update(ids, (asset) => (asset.visibility = visibility))} /> - {#if $preferences.tags.enabled && assetInteraction.isAllUserOwned} + {#if $preferences.tags.enabled && assetMultiSelectManager.isAllUserOwned} {/if} @@ -522,7 +521,7 @@ {#if viewMode === PersonPageViewMode.UNASSIGN_ASSETS} a.id)} + assetIds={assetMultiSelectManager.selectedAssets.map((a) => a.id)} personAssets={person} onClose={() => (viewMode = PersonPageViewMode.VIEW_ASSETS)} onConfirm={handleUnmerge} diff --git a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte index 462f8fa3b6..94ec148e9f 100644 --- a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte @@ -24,7 +24,7 @@ import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { preferences, user } from '$lib/stores/user.store'; import { getAssetMediaUrl, memoryLaneTitle } from '$lib/utils'; import { @@ -44,9 +44,7 @@ let timelineManager = $state() as TimelineManager; const options = { visibility: AssetVisibility.Timeline, withStacked: true, withPartners: true }; - const assetInteraction = new AssetInteraction(); - - let selectedAssets = $derived(assetInteraction.selectedAssets); + let selectedAssets = $derived(assetMultiSelectManager.selectedAssets); let isAssetStackSelected = $derived(selectedAssets.length === 1 && !!selectedAssets[0].stack); let isLinkActionAvailable = $derived.by(() => { const isLivePhoto = selectedAssets.length === 1 && !!selectedAssets[0].livePhotoVideoId; @@ -55,15 +53,15 @@ selectedAssets.some((asset) => asset.isImage) && selectedAssets.some((asset) => asset.isVideo); - return assetInteraction.isAllUserOwned && (isLivePhoto || isLivePhotoCandidate); + return assetMultiSelectManager.isAllUserOwned && (isLivePhoto || isLivePhotoCandidate); }); const handleEscape = () => { if (assetViewerManager.isViewing) { return; } - if (assetInteraction.selectionActive) { - assetInteraction.clearMultiselect(); + if (assetMultiSelectManager.selectionActive) { + assetMultiSelectManager.clearMultiselect(); return; } }; @@ -80,7 +78,7 @@ const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetInteraction.clearMultiselect(); + assetMultiSelectManager.clearMultiselect(); }; const items = $derived( @@ -94,12 +92,12 @@ ); - + -{#if assetInteraction.selectionActive} +{#if assetMultiSelectManager.selectionActive} assetInteraction.clearMultiselect()} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => assetMultiSelectManager.clearMultiselect()} > - {@const Actions = getAssetBulkActions($t, assetInteraction.asControlContext())} + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} - + - {#if assetInteraction.isAllUserOwned} + {#if assetMultiSelectManager.isAllUserOwned} timelineManager.update(ids, (asset) => (asset.isFavorite = isFavorite))} /> - {#if assetInteraction.selectedAssets.length > 1 || isAssetStackSelected} + {#if assetMultiSelectManager.selectedAssets.length > 1 || isAssetStackSelected} updateStackedAssetInTimeline(timelineManager, result)} @@ -144,7 +142,7 @@ {#if isLinkActionAvailable} diff --git a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte index 4f050b8629..ed44036e1e 100644 --- a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -23,7 +23,7 @@ import type { Viewport } from '$lib/managers/timeline-manager/types'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { lang, locale } from '$lib/stores/preferences.store'; import { preferences } from '$lib/stores/user.store'; import { handlePromiseError } from '$lib/utils'; @@ -62,8 +62,6 @@ let scrollY = $state(0); let scrollYHistory = 0; - const assetInteraction = new AssetInteraction(); - type SearchTerms = MetadataSearchDto & Pick; let searchQuery = $derived(page.url.searchParams.get(QueryParameter.QUERY)); let smartSearchEnabled = $derived(featureFlagsManager.value.smartSearch); @@ -112,12 +110,12 @@ }; const handleSetVisibility = (assetIds: string[]) => { - assetInteraction.clearMultiselect(); + assetMultiSelectManager.clearMultiselect(); onAssetDelete(assetIds); }; const handleSelectAll = () => { - assetInteraction.selectAssets(searchResultAssets.map((asset) => toTimelineAsset(asset))); + assetMultiSelectManager.selectAssets(searchResultAssets.map((asset) => toTimelineAsset(asset))); }; async function onSearchQueryUpdate() { @@ -226,7 +224,7 @@ } const onAlbumAddAssets = ({ assetIds }: { assetIds: string[] }) => { - cancelMultiselect(assetInteraction); + cancelMultiselect(assetMultiSelectManager); if (terms.isNotInAlbum) { const assetIdSet = new Set(assetIds); @@ -294,7 +292,7 @@ {#if searchResultAssets.length > 0}
- {#if assetInteraction.selectionActive} + {#if assetMultiSelectManager.selectionActive}
cancelMultiselect(assetInteraction)} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => cancelMultiselect(assetMultiSelectManager)} > - {@const Actions = getAssetBulkActions($t, assetInteraction.asControlContext())} + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} @@ -338,9 +336,9 @@ onclick={handleSelectAll} /> - {#if assetInteraction.isAllUserOwned} + {#if assetMultiSelectManager.isAllUserOwned} { for (const id of ids) { const asset = searchResultAssets.find((asset) => asset.id === id); @@ -357,7 +355,7 @@ - + {#if $preferences.tags.enabled} diff --git a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte index fefd8dd032..98f47dd1e0 100644 --- a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -26,7 +26,7 @@ import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; import { getTagActions } from '$lib/services/tag.service'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { preferences, user } from '$lib/stores/user.store'; import { joinPaths, TreeNode } from '$lib/utils/tree-utils'; import { getAllTags, type TagResponseDto } from '@immich/sdk'; @@ -41,8 +41,6 @@ let { data }: Props = $props(); - const assetInteraction = new AssetInteraction(); - let tags = $derived(data.tags); const tree = $derived(TreeNode.fromTags(tags)); const tag = $derived(tree.traverse(data.path)); @@ -58,7 +56,7 @@ const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetInteraction.clearMultiselect(); + assetMultiSelectManager.clearMultiselect(); }; const onRefresh = async () => { @@ -99,7 +97,7 @@ enableRouting={true} bind:timelineManager {options} - {assetInteraction} + assetInteraction={assetMultiSelectManager} removeAction={AssetAction.UNARCHIVE} > {#snippet empty()} @@ -113,20 +111,20 @@
- {#if assetInteraction.selectionActive} + {#if assetMultiSelectManager.selectionActive}
assetInteraction.clearMultiselect()} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => assetMultiSelectManager.clearMultiselect()} > - {@const Actions = getAssetBulkActions($t, assetInteraction.asControlContext())} + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} - + timelineManager.update(ids, (asset) => (asset.isFavorite = isFavorite))} > diff --git a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte index 8f7be29004..c4f5f5051e 100644 --- a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -13,7 +13,7 @@ import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { Route } from '$lib/route'; import { getTrashActions } from '$lib/services/trash.service'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { handlePromiseError } from '$lib/utils'; import { t } from 'svelte-i18n'; import type { PageData } from './$types'; @@ -27,15 +27,13 @@ let timelineManager = $state() as TimelineManager; const options = { isTrashed: true }; - const assetInteraction = new AssetInteraction(); - if (!featureFlagsManager.value.trash) { handlePromiseError(goto(Route.photos())); } const handleEscape = () => { - if (assetInteraction.selectionActive) { - assetInteraction.clearMultiselect(); + if (assetMultiSelectManager.selectionActive) { + assetMultiSelectManager.clearMultiselect(); return; } }; @@ -45,12 +43,18 @@ {#if featureFlagsManager.value.trash} - +

{$t('trashed_items_will_be_permanently_deleted_after', { values: { days: serverConfigManager.value.trashDays }, @@ -63,12 +67,12 @@ {/if} -{#if assetInteraction.selectionActive} +{#if assetMultiSelectManager.selectionActive} assetInteraction.clearMultiselect()} + assets={assetMultiSelectManager.selectedAssets} + clearSelect={() => assetMultiSelectManager.clearMultiselect()} > - + timelineManager.removeAssets(assetIds)} /> timelineManager.removeAssets(assetIds)} /> diff --git a/web/src/routes/(user)/utilities/geolocation/+page.svelte b/web/src/routes/(user)/utilities/geolocation/+page.svelte index d8cd0c3850..96caa9ba94 100644 --- a/web/src/routes/(user)/utilities/geolocation/+page.svelte +++ b/web/src/routes/(user)/utilities/geolocation/+page.svelte @@ -10,7 +10,7 @@ import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; import GeolocationPointPickerModal from '$lib/modals/GeolocationPointPickerModal.svelte'; import GeolocationUpdateConfirmModal from '$lib/modals/GeolocationUpdateConfirmModal.svelte'; - import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import type { LatLng } from '$lib/types'; import { cancelMultiselect } from '$lib/utils/asset-utils'; import { setQueryValue } from '$lib/utils/navigation'; @@ -28,7 +28,6 @@ let { data }: Props = $props(); let isLoading = $state(false); - let assetInteraction = new AssetInteraction(); let point = $state(); let locationUpdated = $state(false); @@ -47,7 +46,7 @@ const confirmed = await modalManager.show(GeolocationUpdateConfirmModal, { point, - assetCount: assetInteraction.selectedAssets.length, + assetCount: assetMultiSelectManager.selectedAssets.length, }); if (!confirmed) { @@ -56,14 +55,14 @@ await updateAssets({ assetBulkUpdateDto: { - ids: assetInteraction.selectedAssets.map((asset) => asset.id), + ids: assetMultiSelectManager.selectedAssets.map((asset) => asset.id), latitude: point.lat, longitude: point.lng, }, }); const updatedAssets = await Promise.all( - assetInteraction.selectedAssets.map(async (asset) => { + assetMultiSelectManager.selectedAssets.map(async (asset) => { const updatedAsset = await getAssetInfo({ ...authManager.params, id: asset.id }); return toTimelineAsset(updatedAsset); }), @@ -78,8 +77,8 @@ if (event.key === 'Shift') { event.preventDefault(); } - if (event.key === 'Escape' && assetInteraction.selectionActive) { - cancelMultiselect(assetInteraction); + if (event.key === 'Escape' && assetMultiSelectManager.selectionActive) { + cancelMultiselect(assetMultiSelectManager); } }; const onKeyUp = (event: KeyboardEvent) => { @@ -89,7 +88,7 @@ }; const handleDeselectAll = () => { - cancelMultiselect(assetInteraction); + cancelMultiselect(assetMultiSelectManager); }; const handlePickPoint = async () => { @@ -101,8 +100,8 @@ point = selected; }; const handleEscape = () => { - if (assetInteraction.selectionActive) { - assetInteraction.clearMultiselect(); + if (assetMultiSelectManager.selectionActive) { + assetMultiSelectManager.clearMultiselect(); return; } }; @@ -168,7 +167,7 @@ size="small" color="secondary" variant="ghost" - disabled={!assetInteraction.selectionActive} + disabled={!assetMultiSelectManager.selectionActive} onclick={handleDeselectAll} > {$t('unselect_all')} @@ -177,11 +176,11 @@ leadingIcon={mdiMapMarkerMultipleOutline} size="small" color="primary" - disabled={assetInteraction.selectedAssets.length === 0} + disabled={assetMultiSelectManager.selectedAssets.length === 0} onclick={() => handleUpdate()} >

@@ -198,7 +197,7 @@ enableRouting={true} bind:timelineManager {options} - {assetInteraction} + assetInteraction={assetMultiSelectManager} removeAction={AssetAction.ARCHIVE} onEscape={handleEscape} withStacked diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte index 71bd66641c..8139fb94c8 100644 --- a/web/src/routes/+layout.svelte +++ b/web/src/routes/+layout.svelte @@ -99,6 +99,9 @@ if (isAssetViewerRoute(from) && isAssetViewerRoute(to)) { return; } + + eventManager.emit('AppNavigate'); + showNavigationLoadingBar = true; }); From 14cce0cba3987402de06cf70494a3df961aa7edf Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Fri, 27 Mar 2026 13:48:51 -0400 Subject: [PATCH 055/156] refactor: asset select manager (#27327) --- .../components/album-page/album-viewer.svelte | 7 ++-- .../memory-page/memory-viewer.svelte | 5 +-- .../individual-shared-viewer.svelte | 6 +-- .../gallery-viewer/gallery-viewer.svelte | 36 +++++++---------- .../map/MapTimelinePanel.svelte | 16 ++++---- .../lib/components/timeline/Timeline.svelte | 16 ++++---- .../timeline/actions/SelectAllAction.svelte | 39 +++++++------------ .../actions/TimelineKeyboardActions.svelte | 22 +++++------ .../asset-multi-select-manager.svelte.ts | 32 +++++++-------- web/src/lib/utils/asset-utils.ts | 7 +--- .../[[assetId=id]]/+page.svelte | 27 +++++++------ .../[[assetId=id]]/+page.svelte | 9 ++--- .../[[assetId=id]]/+page.svelte | 9 ++--- .../[[assetId=id]]/+page.svelte | 25 +++++------- .../[[assetId=id]]/+page.svelte | 9 ++--- .../[[assetId=id]]/+page.svelte | 7 +--- .../[[assetId=id]]/+page.svelte | 19 ++++----- .../(user)/photos/[[assetId=id]]/+page.svelte | 16 ++++---- .../[[assetId=id]]/+page.svelte | 11 +++--- .../[[assetId=id]]/+page.svelte | 8 ++-- .../[[assetId=id]]/+page.svelte | 9 ++--- .../(user)/utilities/geolocation/+page.svelte | 25 +++++------- 22 files changed, 148 insertions(+), 212 deletions(-) diff --git a/web/src/lib/components/album-page/album-viewer.svelte b/web/src/lib/components/album-page/album-viewer.svelte index b66863ad77..448b7f84b5 100644 --- a/web/src/lib/components/album-page/album-viewer.svelte +++ b/web/src/lib/components/album-page/album-viewer.svelte @@ -15,7 +15,6 @@ import { mediaQueryManager } from '$lib/stores/media-query-manager.svelte'; import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store'; import { handlePromiseError } from '$lib/utils'; - import { cancelMultiselect } from '$lib/utils/asset-utils'; import { fileUploadHandler, openFileUploadDialog } from '$lib/utils/file-uploader'; import type { AlbumResponseDto, SharedLinkResponseDto, UserResponseDto } from '@immich/sdk'; import { ActionButton, IconButton, Logo } from '@immich/ui'; @@ -66,7 +65,7 @@ shortcut: { key: 'Escape' }, onShortcut: () => { if (!assetViewerManager.isViewing && assetMultiSelectManager.selectionActive) { - cancelMultiselect(assetMultiSelectManager); + assetMultiSelectManager.clear(); } }, }} @@ -100,8 +99,8 @@ {#if assetMultiSelectManager.selectionActive} assetMultiSelectManager.clearMultiselect()} + assets={assetMultiSelectManager.assets} + clearSelect={() => assetMultiSelectManager.clear()} > {#if sharedLink.allowDownload} diff --git a/web/src/lib/components/memory-page/memory-viewer.svelte b/web/src/lib/components/memory-page/memory-viewer.svelte index ad0b48b42f..9e24a0a050 100644 --- a/web/src/lib/components/memory-page/memory-viewer.svelte +++ b/web/src/lib/components/memory-page/memory-viewer.svelte @@ -29,7 +29,6 @@ import { locale, videoViewerMuted, videoViewerVolume } from '$lib/stores/preferences.store'; import { preferences } from '$lib/stores/user.store'; import { getAssetMediaUrl, handlePromiseError, memoryLaneTitle } from '$lib/utils'; - import { cancelMultiselect } from '$lib/utils/asset-utils'; import { fromISODateTimeUTC, toTimelineAsset } from '$lib/utils/timeline-util'; import { AssetMediaSize, AssetTypeEnum, getAssetInfo } from '@immich/sdk'; import { ActionButton, IconButton, toastManager } from '@immich/ui'; @@ -339,8 +338,8 @@
cancelMultiselect(assetMultiSelectManager)} + assets={assetMultiSelectManager.assets} + clearSelect={() => assetMultiSelectManager.clear()} > {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/lib/components/share-page/individual-shared-viewer.svelte b/web/src/lib/components/share-page/individual-shared-viewer.svelte index 09a57a85b6..388fa15a23 100644 --- a/web/src/lib/components/share-page/individual-shared-viewer.svelte +++ b/web/src/lib/components/share-page/individual-shared-viewer.svelte @@ -12,7 +12,7 @@ import { dragAndDropFilesStore } from '$lib/stores/drag-and-drop-files.store'; import { mediaQueryManager } from '$lib/stores/media-query-manager.svelte'; import { handlePromiseError } from '$lib/utils'; - import { cancelMultiselect, downloadArchive } from '$lib/utils/asset-utils'; + import { downloadArchive } from '$lib/utils/asset-utils'; import { fileUploadHandler, openFileUploadDialog } from '$lib/utils/file-uploader'; import { handleError } from '$lib/utils/handle-error'; import { toTimelineAsset } from '$lib/utils/timeline-util'; @@ -81,8 +81,8 @@
{#if assetMultiSelectManager.selectionActive} cancelMultiselect(assetMultiSelectManager)} + assets={assetMultiSelectManager.assets} + clearSelect={() => assetMultiSelectManager.clear()} > toTimelineAsset(a))); }; - const deselectAllAssets = () => { - cancelMultiselect(assetInteraction); - }; - const onKeyDown = (event: KeyboardEvent) => { if (event.key === 'Shift') { event.preventDefault(); @@ -153,18 +143,18 @@ // Select/deselect already loaded assets if (deselect) { - for (const candidate of assetInteraction.assetSelectionCandidates) { + for (const candidate of assetInteraction.candidates) { assetInteraction.removeAssetFromMultiselectGroup(candidate.id); } assetInteraction.removeAssetFromMultiselectGroup(asset.id); } else { - for (const candidate of assetInteraction.assetSelectionCandidates) { + for (const candidate of assetInteraction.candidates) { assetInteraction.selectAsset(candidate); } assetInteraction.selectAsset(asset); } - assetInteraction.clearAssetSelectionCandidates(); + assetInteraction.clearCandidates(); assetInteraction.setAssetSelectionStart(deselect ? null : asset); }; @@ -202,13 +192,13 @@ }; const onDelete = () => { - const hasTrashedAsset = assetInteraction.selectedAssets.some((asset) => asset.isTrashed); + const hasTrashedAsset = assetInteraction.assets.some((asset) => asset.isTrashed); handlePromiseError(trashOrDelete(hasTrashedAsset)); }; const trashOrDelete = async (force: boolean = false) => { const forceOrNoTrash = force || !featureFlagsManager.value.trash; - const selectedAssets = assetInteraction.selectedAssets; + const selectedAssets = assetInteraction.assets; if ($showDeleteModal && forceOrNoTrash) { const confirmed = await modalManager.show(AssetDeleteConfirmModal, { size: selectedAssets.length }); @@ -224,17 +214,17 @@ onReload, ); - assetInteraction.clearMultiselect(); + assetInteraction.clear(); }; const toggleArchive = async () => { const ids = await archiveAssets( - assetInteraction.selectedAssets, + assetInteraction.assets, assetInteraction.isAllArchived ? AssetVisibility.Timeline : AssetVisibility.Archive, ); if (ids) { assets = assets.filter((asset) => !ids.includes(asset.id)); - deselectAllAssets(); + assetInteraction.clear(); } }; @@ -274,8 +264,8 @@ if (assetInteraction.selectionActive) { shortcuts.push( - { shortcut: { key: 'Escape' }, onShortcut: deselectAllAssets }, - { shortcut: { key: 'D', ctrl: true }, onShortcut: deselectAllAssets }, + { shortcut: { key: 'Escape' }, onShortcut: () => assetInteraction.clear() }, + { shortcut: { key: 'D', ctrl: true }, onShortcut: () => assetInteraction.clear() }, ); if (allowDeletion) { shortcuts.push( @@ -335,13 +325,13 @@ $effect(() => { if (!lastAssetMouseEvent) { - assetInteraction.clearAssetSelectionCandidates(); + assetInteraction.clearCandidates(); } }); $effect(() => { if (!shiftKeyIsDown) { - assetInteraction.clearAssetSelectionCandidates(); + assetInteraction.clearCandidates(); } }); diff --git a/web/src/lib/components/shared-components/map/MapTimelinePanel.svelte b/web/src/lib/components/shared-components/map/MapTimelinePanel.svelte index 094fee241d..552430238d 100644 --- a/web/src/lib/components/shared-components/map/MapTimelinePanel.svelte +++ b/web/src/lib/components/shared-components/map/MapTimelinePanel.svelte @@ -45,7 +45,7 @@ let { bbox, selectedClusterIds, assetCount, onClose }: Props = $props(); let timelineManager = $state() as TimelineManager; - let selectedAssets = $derived(assetMultiSelectManager.selectedAssets); + let selectedAssets = $derived(assetMultiSelectManager.assets); let isAssetStackSelected = $derived(selectedAssets.length === 1 && !!selectedAssets[0].stack); let isLinkActionAvailable = $derived.by(() => { const isLivePhoto = selectedAssets.length === 1 && !!selectedAssets[0].livePhotoVideoId; @@ -69,11 +69,11 @@ const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); }; const handleEscape = () => { - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); }; const timelineBoundingBox = $derived( @@ -90,7 +90,7 @@ $effect.pre(() => { void timelineOptions; - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); }); @@ -124,8 +124,8 @@ assetMultiSelectManager.clearMultiselect()} + assets={assetMultiSelectManager.assets} + clearSelect={() => assetMultiSelectManager.clear()} > @@ -139,7 +139,7 @@ - {#if assetMultiSelectManager.selectedAssets.length > 1 || isAssetStackSelected} + {#if assetMultiSelectManager.assets.length > 1 || isAssetStackSelected} updateStackedAssetInTimeline(timelineManager, result)} @@ -149,7 +149,7 @@ {#if isLinkActionAvailable} diff --git a/web/src/lib/components/timeline/Timeline.svelte b/web/src/lib/components/timeline/Timeline.svelte index fad77895de..eb237cc7af 100644 --- a/web/src/lib/components/timeline/Timeline.svelte +++ b/web/src/lib/components/timeline/Timeline.svelte @@ -404,7 +404,7 @@ } } - assetInteraction.selectAll = timelineManager.assetCount === assetInteraction.selectedAssets.length; + assetInteraction.selectAll = timelineManager.assetCount === assetInteraction.assets.length; }; const onSelectAssets = async (asset: TimelineAsset) => { @@ -413,23 +413,23 @@ } onSelect(asset); - const rangeSelection = assetInteraction.assetSelectionCandidates.length > 0; + const rangeSelection = assetInteraction.candidates.length > 0; const deselect = assetInteraction.hasSelectedAsset(asset.id); // Select/deselect already loaded assets if (deselect) { - for (const candidate of assetInteraction.assetSelectionCandidates) { + for (const candidate of assetInteraction.candidates) { assetInteraction.removeAssetFromMultiselectGroup(candidate.id); } assetInteraction.removeAssetFromMultiselectGroup(asset.id); } else { - for (const candidate of assetInteraction.assetSelectionCandidates) { + for (const candidate of assetInteraction.candidates) { handleSelectAsset(candidate); } handleSelectAsset(asset); } - assetInteraction.clearAssetSelectionCandidates(); + assetInteraction.clearCandidates(); if (assetInteraction.startAsset && rangeSelection) { const startBucket = timelineManager.getMonthGroupByAssetId(assetInteraction.startAsset.id); @@ -498,13 +498,13 @@ $effect(() => { if (!lastAssetMouseEvent) { - assetInteraction.clearAssetSelectionCandidates(); + assetInteraction.clearCandidates(); } }); $effect(() => { if (!shiftKeyIsDown) { - assetInteraction.clearAssetSelectionCandidates(); + assetInteraction.clearCandidates(); } }); @@ -539,7 +539,7 @@ assetInteraction.removeGroupFromMultiselectGroup(groupTitle); } - assetInteraction.selectAll = timelineManager.assetCount === assetInteraction.selectedAssets.length; + assetInteraction.selectAll = timelineManager.assetCount === assetInteraction.assets.length; }; const _onClick = ( diff --git a/web/src/lib/components/timeline/actions/SelectAllAction.svelte b/web/src/lib/components/timeline/actions/SelectAllAction.svelte index b06382c325..9a6cb05a8f 100644 --- a/web/src/lib/components/timeline/actions/SelectAllAction.svelte +++ b/web/src/lib/components/timeline/actions/SelectAllAction.svelte @@ -1,46 +1,33 @@ {#if withText} - + {:else} - + {/if} diff --git a/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte b/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte index 3701c4157e..d6cb1c170b 100644 --- a/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte +++ b/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte @@ -19,7 +19,7 @@ import { searchStore } from '$lib/stores/search.svelte'; import { handlePromiseError } from '$lib/utils'; import { deleteAssets, updateStackedAssetInTimeline } from '$lib/utils/actions'; - import { archiveAssets, cancelMultiselect, selectAllAssets, stackAssets } from '$lib/utils/asset-utils'; + import { archiveAssets, selectAllAssets, stackAssets } from '$lib/utils/asset-utils'; import { AssetVisibility } from '@immich/sdk'; import { isModalOpen, modalManager } from '@immich/ui'; @@ -34,7 +34,7 @@ const trashOrDelete = async (forceRequested?: boolean) => { const force = forceRequested || !featureFlagsManager.value.trash; - const selectedAssets = assetInteraction.selectedAssets; + const selectedAssets = assetInteraction.assets; if ($showDeleteModal && force) { const confirmed = await modalManager.show(AssetDeleteConfirmModal, { size: selectedAssets.length }); @@ -52,16 +52,16 @@ selectedAssets, force ? undefined : (assets) => timelineManager.upsertAssets(assets), ); - assetInteraction.clearMultiselect(); + assetInteraction.clear(); }; const onDelete = () => { - const hasTrashedAsset = assetInteraction.selectedAssets.some((asset) => asset.isTrashed); + const hasTrashedAsset = assetInteraction.assets.some((asset) => asset.isTrashed); handlePromiseError(trashOrDelete(hasTrashedAsset)); }; const onStackAssets = async () => { - const result = await stackAssets(assetInteraction.selectedAssets); + const result = await stackAssets(assetInteraction.assets); updateStackedAssetInTimeline(timelineManager, result); @@ -70,18 +70,14 @@ const toggleArchive = async () => { const visibility = assetInteraction.isAllArchived ? AssetVisibility.Timeline : AssetVisibility.Archive; - const ids = await archiveAssets(assetInteraction.selectedAssets, visibility); + const ids = await archiveAssets(assetInteraction.assets, visibility); timelineManager.update(ids, (asset) => (asset.visibility = visibility)); eventManager.emit('AssetsArchive', ids); - deselectAllAssets(); + assetInteraction.clear(); }; let shiftKeyIsDown = $state(false); - const deselectAllAssets = () => { - cancelMultiselect(assetInteraction); - }; - const onKeyDown = (event: KeyboardEvent) => { if (searchStore.isSearchEnabled) { return; @@ -125,7 +121,7 @@ $effect(() => { if (isEmpty) { - assetInteraction.clearMultiselect(); + assetInteraction.clear(); } }); @@ -166,7 +162,7 @@ shortcuts.push( { shortcut: { key: 'Delete' }, onShortcut: onDelete }, { shortcut: { key: 'Delete', shift: true }, onShortcut: () => trashOrDelete(true) }, - { shortcut: { key: 'D', ctrl: true }, onShortcut: () => deselectAllAssets() }, + { shortcut: { key: 'D', ctrl: true }, onShortcut: () => assetInteraction.clear() }, { shortcut: { key: 's' }, onShortcut: () => onStackAssets() }, { shortcut: { key: 'a', shift: true }, onShortcut: toggleArchive }, ); diff --git a/web/src/lib/managers/asset-multi-select-manager.svelte.ts b/web/src/lib/managers/asset-multi-select-manager.svelte.ts index 935bc1adfa..ec282f659a 100644 --- a/web/src/lib/managers/asset-multi-select-manager.svelte.ts +++ b/web/src/lib/managers/asset-multi-select-manager.svelte.ts @@ -19,21 +19,21 @@ export class AssetMultiSelectManager { selectedGroup = new SvelteSet(); - assetSelectionCandidates = $state([]); + candidates = $state([]); selectionActive = $derived(this.#selectedMap.size > 0); - selectedAssets = $derived(Array.from(this.#selectedMap.values())); - isAllTrashed = $derived(this.selectedAssets.every((asset) => asset.isTrashed)); - isAllArchived = $derived(this.selectedAssets.every((asset) => asset.visibility === AssetVisibility.Archive)); - isAllFavorite = $derived(this.selectedAssets.every((asset) => asset.isFavorite)); - isAllUserOwned = $derived(this.selectedAssets.every((asset) => asset.ownerId === this.#userId)); + assets = $derived(Array.from(this.#selectedMap.values())); + isAllTrashed = $derived(this.assets.every((asset) => asset.isTrashed)); + isAllArchived = $derived(this.assets.every((asset) => asset.visibility === AssetVisibility.Archive)); + isAllFavorite = $derived(this.assets.every((asset) => asset.isFavorite)); + isAllUserOwned = $derived(this.assets.every((asset) => asset.ownerId === this.#userId)); #unsubscribe?: () => void; constructor(options?: AssetMultiSelectOptions) { const { resetOnNavigate = false } = options ?? {}; if (resetOnNavigate) { - this.#unsubscribe = eventManager.on({ AppNavigate: () => this.clearMultiselect() }); + this.#unsubscribe = eventManager.on({ AppNavigate: () => this.clear() }); } } @@ -43,9 +43,9 @@ export class AssetMultiSelectManager { asControlContext(): AssetControlContext { return { - getOwnedAssets: () => this.selectedAssets.filter((asset) => asset.ownerId === this.#userId), - getAssets: () => this.selectedAssets, - clearSelect: () => this.clearMultiselect(), + getOwnedAssets: () => this.assets.filter((asset) => asset.ownerId === this.#userId), + getAssets: () => this.assets, + clearSelect: () => this.clear(), }; } @@ -54,7 +54,7 @@ export class AssetMultiSelectManager { } hasSelectionCandidate(assetId: string) { - return this.assetSelectionCandidates.some((asset) => asset.id === assetId); + return this.candidates.some((asset) => asset.id === assetId); } selectAsset(asset: TimelineAsset) { @@ -84,14 +84,14 @@ export class AssetMultiSelectManager { } setAssetSelectionCandidates(assets: TimelineAsset[]) { - this.assetSelectionCandidates = assets; + this.candidates = assets; } - clearAssetSelectionCandidates() { - this.assetSelectionCandidates = []; + clearCandidates() { + this.candidates = []; } - clearMultiselect() { + clear() { this.selectAll = false; // Multi-selection @@ -99,7 +99,7 @@ export class AssetMultiSelectManager { this.selectedGroup.clear(); // Range selection - this.assetSelectionCandidates = []; + this.candidates = []; this.startAsset = null; } } diff --git a/web/src/lib/utils/asset-utils.ts b/web/src/lib/utils/asset-utils.ts index 37ed78ef6e..9e9cf57726 100644 --- a/web/src/lib/utils/asset-utils.ts +++ b/web/src/lib/utils/asset-utils.ts @@ -402,7 +402,7 @@ export const selectAllAssets = async (timelineManager: TimelineManager, assetInt } if (!assetInteraction.selectAll) { - assetInteraction.clearMultiselect(); + assetInteraction.clear(); break; // Cancelled } assetInteraction.selectAssets([...monthGroup.assetsIterator()]); @@ -418,11 +418,6 @@ export const selectAllAssets = async (timelineManager: TimelineManager, assetInt } }; -export const cancelMultiselect = (assetInteraction: AssetMultiSelectManager) => { - assetInteraction.selectAll = false; - assetInteraction.clearMultiselect(); -}; - export const toggleArchive = async (asset: AssetResponseDto) => { const $t = get(t); try { diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte index a2811c399c..60372f5ad4 100644 --- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -49,7 +49,6 @@ import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store'; import { preferences, user } from '$lib/stores/user.store'; import { handlePromiseError } from '$lib/utils'; - import { cancelMultiselect } from '$lib/utils/asset-utils'; import { handleError } from '$lib/utils/handle-error'; import { isAlbumsRoute, navigate, type AssetGridRouteSearchParams } from '$lib/utils/navigation'; import { AlbumUserRole, AssetVisibility, getAlbumInfo, updateAlbumInfo, type AlbumResponseDto } from '@immich/sdk'; @@ -127,7 +126,7 @@ return; } if (assetMultiSelectManager.selectionActive) { - cancelMultiselect(assetMultiSelectManager); + assetMultiSelectManager.clear(); return; } await goto(Route.albums()); @@ -148,13 +147,13 @@ }; const handleCloseSelectAssets = async () => { - timelineMultiSelectManager.clearMultiselect(); + timelineMultiSelectManager.clear(); await setModeToView(); }; const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); }; const handleRemoveAssets = async (assetIds: string[]) => { @@ -175,13 +174,13 @@ await updateThumbnail(assetId); viewMode = AlbumPageViewMode.VIEW; - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); }; const updateThumbnailUsingCurrentSelection = async () => { - if (assetMultiSelectManager.selectedAssets.length === 1) { - const [firstAsset] = assetMultiSelectManager.selectedAssets; - assetMultiSelectManager.clearMultiselect(); + if (assetMultiSelectManager.assets.length === 1) { + const [firstAsset] = assetMultiSelectManager.assets; + assetMultiSelectManager.clear(); await updateThumbnail(firstAsset.id); } }; @@ -290,7 +289,7 @@ } await refreshAlbum(); - timelineMultiSelectManager.clearMultiselect(); + timelineMultiSelectManager.clear(); await setModeToView(); }; @@ -312,7 +311,7 @@ const { Cast } = $derived(getGlobalActions($t)); const { Share } = $derived(getAlbumActions($t, album)); - const { AddAssets, Upload } = $derived(getAlbumAssetsActions($t, album, timelineMultiSelectManager.selectedAssets)); + const { AddAssets, Upload } = $derived(getAlbumAssetsActions($t, album, timelineMultiSelectManager.assets)); const Close = $derived({ title: $t('go_back'), @@ -453,8 +452,8 @@ {#if assetMultiSelectManager.selectionActive} assetMultiSelectManager.clearMultiselect()} + assets={assetMultiSelectManager.assets} + clearSelect={() => assetMultiSelectManager.clear()} > {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} @@ -480,7 +479,7 @@ /> {/if} - {#if assetMultiSelectManager.selectedAssets.length === 1} + {#if assetMultiSelectManager.assets.length === 1} {/snippet} diff --git a/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte index d28ec38e0f..0b2df6079c 100644 --- a/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -32,14 +32,14 @@ const handleEscape = () => { if (assetMultiSelectManager.selectionActive) { - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); return; } }; const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); }; @@ -59,10 +59,7 @@ {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clearMultiselect()} - > + assetMultiSelectManager.clear()}> {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} { if (assetMultiSelectManager.selectionActive) { - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); return; } }; const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); }; @@ -63,10 +63,7 @@ {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clearMultiselect()} - > + assetMultiSelectManager.clear()}> {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} timelineManager.removeAssets(assetIds)} /> diff --git a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte index 6fd6e30c8a..264f36fdff 100644 --- a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -25,7 +25,6 @@ import { getAssetBulkActions } from '$lib/services/asset.service'; import { foldersStore } from '$lib/stores/folders.svelte'; import { preferences } from '$lib/stores/user.store'; - import { cancelMultiselect } from '$lib/utils/asset-utils'; import { toTimelineAsset } from '$lib/utils/timeline-util'; import { joinPaths } from '$lib/utils/tree-utils'; import { ActionButton, CommandPaletteDefaultProvider, IconButton, Text } from '@immich/ui'; @@ -45,30 +44,29 @@ const getLinkForPath = (path: string) => Route.folders({ path }); - afterNavigate(function clearAssetSelection() { - // Clear the asset selection when we navigate (like going to another folder) - cancelMultiselect(assetMultiSelectManager); + afterNavigate(() => { + assetMultiSelectManager.clear(); }); - function navigateToView(path: string) { + const navigateToView = (path: string) => { return goto(getLinkForPath(path), { keepFocus: true, noScroll: true }); - } + }; - async function triggerAssetUpdate() { - cancelMultiselect(assetMultiSelectManager); + const triggerAssetUpdate = async () => { + assetMultiSelectManager.clear(); if (data.tree.path) { await foldersStore.refreshAssetsByPath(data.tree.path); } await invalidateAll(); - } + }; - function handleSelectAllAssets() { + const handleSelectAllAssets = () => { if (!data.pathAssets) { return; } assetMultiSelectManager.selectAssets(data.pathAssets.map((asset) => toTimelineAsset(asset))); - } + }; @@ -112,10 +110,7 @@ {#if assetMultiSelectManager.selectionActive}
- cancelMultiselect(assetMultiSelectManager)} - > + assetMultiSelectManager.clear()}> {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte index 8c0059bf17..a0d2992409 100644 --- a/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -33,13 +33,13 @@ const handleEscape = () => { if (assetMultiSelectManager.selectionActive) { - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); return; } }; const handleMoveOffLockedFolder = (assetIds: string[]) => { - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); timelineManager.removeAssets(assetIds); }; @@ -74,10 +74,7 @@ {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clearMultiselect()} - > + assetMultiSelectManager.clear()}> diff --git a/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte index ef1b1bc8b1..dbe9276c4b 100644 --- a/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -28,7 +28,7 @@ const handleEscape = () => { if (assetMultiSelectManager.selectionActive) { - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); return; } }; @@ -39,10 +39,7 @@ {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clearMultiselect()} - > + assetMultiSelectManager.clear()}> {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 259aaefbe0..611ea2ccd8 100644 --- a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -26,13 +26,13 @@ import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import Timeline from '$lib/components/timeline/Timeline.svelte'; import { PersonPageViewMode, QueryParameter, SessionStorageKey } from '$lib/constants'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; import PersonMergeSuggestionModal from '$lib/modals/PersonMergeSuggestionModal.svelte'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; import { getPersonActions } from '$lib/services/person.service'; - import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { locale } from '$lib/stores/preferences.store'; import { preferences } from '$lib/stores/user.store'; import { websocketEvents } from '$lib/stores/websocket'; @@ -106,7 +106,7 @@ const handleEscape = async () => { if (assetMultiSelectManager.selectionActive) { - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); return; } @@ -126,8 +126,8 @@ }); const handleUnmerge = () => { - timelineManager.removeAssets(assetMultiSelectManager.selectedAssets.map((a) => a.id)); - assetMultiSelectManager.clearMultiselect(); + timelineManager.removeAssets(assetMultiSelectManager.assets.map((a) => a.id)); + assetMultiSelectManager.clear(); viewMode = PersonPageViewMode.VIEW_ASSETS; }; @@ -153,7 +153,7 @@ handleError(error, $t('errors.unable_to_set_feature_photo')); } - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); viewMode = PersonPageViewMode.VIEW_ASSETS; }; @@ -282,7 +282,7 @@ const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); }; const onPersonUpdate = async (response: PersonResponseDto) => { @@ -458,10 +458,7 @@
{#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clearMultiselect()} - > + assetMultiSelectManager.clear()}> {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} @@ -521,7 +518,7 @@ {#if viewMode === PersonPageViewMode.UNASSIGN_ASSETS} a.id)} + assetIds={assetMultiSelectManager.assets.map((a) => a.id)} personAssets={person} onClose={() => (viewMode = PersonPageViewMode.VIEW_ASSETS)} onConfirm={handleUnmerge} diff --git a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte index 94ec148e9f..5376804c17 100644 --- a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte @@ -19,12 +19,12 @@ import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import Timeline from '$lib/components/timeline/Timeline.svelte'; import { AssetAction } from '$lib/constants'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { memoryManager } from '$lib/managers/memory-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; - import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { preferences, user } from '$lib/stores/user.store'; import { getAssetMediaUrl, memoryLaneTitle } from '$lib/utils'; import { @@ -44,7 +44,7 @@ let timelineManager = $state() as TimelineManager; const options = { visibility: AssetVisibility.Timeline, withStacked: true, withPartners: true }; - let selectedAssets = $derived(assetMultiSelectManager.selectedAssets); + let selectedAssets = $derived(assetMultiSelectManager.assets); let isAssetStackSelected = $derived(selectedAssets.length === 1 && !!selectedAssets[0].stack); let isLinkActionAvailable = $derived.by(() => { const isLivePhoto = selectedAssets.length === 1 && !!selectedAssets[0].livePhotoVideoId; @@ -61,7 +61,7 @@ return; } if (assetMultiSelectManager.selectionActive) { - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); return; } }; @@ -78,7 +78,7 @@ const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); }; const items = $derived( @@ -114,8 +114,8 @@ {#if assetMultiSelectManager.selectionActive} assetMultiSelectManager.clearMultiselect()} + assets={assetMultiSelectManager.assets} + clearSelect={() => assetMultiSelectManager.clear()} > {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} @@ -132,7 +132,7 @@ - {#if assetMultiSelectManager.selectedAssets.length > 1 || isAssetStackSelected} + {#if assetMultiSelectManager.assets.length > 1 || isAssetStackSelected} updateStackedAssetInTimeline(timelineManager, result)} @@ -142,7 +142,7 @@ {#if isLinkActionAvailable} diff --git a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte index ed44036e1e..1de18569b0 100644 --- a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -19,15 +19,14 @@ import TagAction from '$lib/components/timeline/actions/TagAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import { QueryParameter } from '$lib/constants'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import type { Viewport } from '$lib/managers/timeline-manager/types'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; - import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { lang, locale } from '$lib/stores/preferences.store'; import { preferences } from '$lib/stores/user.store'; import { handlePromiseError } from '$lib/utils'; - import { cancelMultiselect } from '$lib/utils/asset-utils'; import { parseUtcDate } from '$lib/utils/date-time'; import { handleError } from '$lib/utils/handle-error'; import { isAlbumsRoute, isPeopleRoute } from '$lib/utils/navigation'; @@ -110,7 +109,7 @@ }; const handleSetVisibility = (assetIds: string[]) => { - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); onAssetDelete(assetIds); }; @@ -224,7 +223,7 @@ } const onAlbumAddAssets = ({ assetIds }: { assetIds: string[] }) => { - cancelMultiselect(assetMultiSelectManager); + assetMultiSelectManager.clear(); if (terms.isNotInAlbum) { const assetIdSet = new Set(assetIds); @@ -320,8 +319,8 @@ {#if assetMultiSelectManager.selectionActive}
cancelMultiselect(assetMultiSelectManager)} + assets={assetMultiSelectManager.assets} + clearSelect={() => assetMultiSelectManager.clear()} > {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte index 98f47dd1e0..b79d5d76e1 100644 --- a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -22,11 +22,11 @@ import TagAction from '$lib/components/timeline/actions/TagAction.svelte'; import { AssetAction } from '$lib/constants'; import SkipLink from '$lib/elements/SkipLink.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; import { getTagActions } from '$lib/services/tag.service'; - import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { preferences, user } from '$lib/stores/user.store'; import { joinPaths, TreeNode } from '$lib/utils/tree-utils'; import { getAllTags, type TagResponseDto } from '@immich/sdk'; @@ -56,7 +56,7 @@ const handleSetVisibility = (assetIds: string[]) => { timelineManager.removeAssets(assetIds); - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); }; const onRefresh = async () => { @@ -115,8 +115,8 @@
assetMultiSelectManager.clearMultiselect()} + assets={assetMultiSelectManager.assets} + clearSelect={() => assetMultiSelectManager.clear()} > {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte index c4f5f5051e..3c75444f40 100644 --- a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -8,12 +8,12 @@ import SelectAllAssets from '$lib/components/timeline/actions/SelectAllAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import Timeline from '$lib/components/timeline/Timeline.svelte'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { serverConfigManager } from '$lib/managers/server-config-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { Route } from '$lib/route'; import { getTrashActions } from '$lib/services/trash.service'; - import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { handlePromiseError } from '$lib/utils'; import { t } from 'svelte-i18n'; import type { PageData } from './$types'; @@ -33,7 +33,7 @@ const handleEscape = () => { if (assetMultiSelectManager.selectionActive) { - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); return; } }; @@ -68,10 +68,7 @@ {/if} {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clearMultiselect()} - > + assetMultiSelectManager.clear()}> timelineManager.removeAssets(assetIds)} /> timelineManager.removeAssets(assetIds)} /> diff --git a/web/src/routes/(user)/utilities/geolocation/+page.svelte b/web/src/routes/(user)/utilities/geolocation/+page.svelte index 96caa9ba94..5f0bbe8e88 100644 --- a/web/src/routes/(user)/utilities/geolocation/+page.svelte +++ b/web/src/routes/(user)/utilities/geolocation/+page.svelte @@ -4,15 +4,14 @@ import EmptyPlaceholder from '$lib/components/shared-components/empty-placeholder.svelte'; import Timeline from '$lib/components/timeline/Timeline.svelte'; import { AssetAction } from '$lib/constants'; + import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { authManager } from '$lib/managers/auth-manager.svelte'; import type { DayGroup } from '$lib/managers/timeline-manager/day-group.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; import GeolocationPointPickerModal from '$lib/modals/GeolocationPointPickerModal.svelte'; import GeolocationUpdateConfirmModal from '$lib/modals/GeolocationUpdateConfirmModal.svelte'; - import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import type { LatLng } from '$lib/types'; - import { cancelMultiselect } from '$lib/utils/asset-utils'; import { setQueryValue } from '$lib/utils/navigation'; import { toTimelineAsset } from '$lib/utils/timeline-util'; import { AssetVisibility, getAssetInfo, updateAssets } from '@immich/sdk'; @@ -46,7 +45,7 @@ const confirmed = await modalManager.show(GeolocationUpdateConfirmModal, { point, - assetCount: assetMultiSelectManager.selectedAssets.length, + assetCount: assetMultiSelectManager.assets.length, }); if (!confirmed) { @@ -55,14 +54,14 @@ await updateAssets({ assetBulkUpdateDto: { - ids: assetMultiSelectManager.selectedAssets.map((asset) => asset.id), + ids: assetMultiSelectManager.assets.map((asset) => asset.id), latitude: point.lat, longitude: point.lng, }, }); const updatedAssets = await Promise.all( - assetMultiSelectManager.selectedAssets.map(async (asset) => { + assetMultiSelectManager.assets.map(async (asset) => { const updatedAsset = await getAssetInfo({ ...authManager.params, id: asset.id }); return toTimelineAsset(updatedAsset); }), @@ -70,7 +69,7 @@ timelineManager.upsertAssets(updatedAssets); - handleDeselectAll(); + assetMultiSelectManager.clear(); }; const onKeyDown = (event: KeyboardEvent) => { @@ -78,7 +77,7 @@ event.preventDefault(); } if (event.key === 'Escape' && assetMultiSelectManager.selectionActive) { - cancelMultiselect(assetMultiSelectManager); + assetMultiSelectManager.clear(); } }; const onKeyUp = (event: KeyboardEvent) => { @@ -87,10 +86,6 @@ } }; - const handleDeselectAll = () => { - cancelMultiselect(assetMultiSelectManager); - }; - const handlePickPoint = async () => { const selected = await modalManager.show(GeolocationPointPickerModal, { point }); if (!selected) { @@ -101,7 +96,7 @@ }; const handleEscape = () => { if (assetMultiSelectManager.selectionActive) { - assetMultiSelectManager.clearMultiselect(); + assetMultiSelectManager.clear(); return; } }; @@ -168,7 +163,7 @@ color="secondary" variant="ghost" disabled={!assetMultiSelectManager.selectionActive} - onclick={handleDeselectAll} + onclick={() => assetMultiSelectManager.clear()} > {$t('unselect_all')} @@ -176,11 +171,11 @@ leadingIcon={mdiMapMarkerMultipleOutline} size="small" color="primary" - disabled={assetMultiSelectManager.selectedAssets.length === 0} + disabled={assetMultiSelectManager.assets.length === 0} onclick={() => handleUpdate()} >
From 5889c42eb660588da6ec7c855ca562bdebda80f7 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Fri, 27 Mar 2026 14:23:33 -0400 Subject: [PATCH 056/156] refactor: asset select manager (#27329) --- .../components/album-page/album-viewer.svelte | 11 ++------ .../memory-page/memory-viewer.svelte | 6 +--- .../individual-shared-viewer.svelte | 5 +--- .../map/MapTimelinePanel.svelte | 8 ++---- .../timeline/AssetSelectControlBar.svelte | 28 ++++++++----------- .../asset-multi-select-manager.svelte.ts | 3 +- .../[[assetId=id]]/+page.svelte | 5 +--- .../[[assetId=id]]/+page.svelte | 2 +- .../[[assetId=id]]/+page.svelte | 2 +- .../[[assetId=id]]/+page.svelte | 2 +- .../[[assetId=id]]/+page.svelte | 2 +- .../[[assetId=id]]/+page.svelte | 2 +- .../[[assetId=id]]/+page.svelte | 2 +- .../(user)/photos/[[assetId=id]]/+page.svelte | 8 ++---- .../[[assetId=id]]/+page.svelte | 5 +--- .../[[assetId=id]]/+page.svelte | 8 ++---- .../[[assetId=id]]/+page.svelte | 2 +- 17 files changed, 33 insertions(+), 68 deletions(-) diff --git a/web/src/lib/components/album-page/album-viewer.svelte b/web/src/lib/components/album-page/album-viewer.svelte index 448b7f84b5..e0182d1c08 100644 --- a/web/src/lib/components/album-page/album-viewer.svelte +++ b/web/src/lib/components/album-page/album-viewer.svelte @@ -16,7 +16,7 @@ import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store'; import { handlePromiseError } from '$lib/utils'; import { fileUploadHandler, openFileUploadDialog } from '$lib/utils/file-uploader'; - import type { AlbumResponseDto, SharedLinkResponseDto, UserResponseDto } from '@immich/sdk'; + import type { AlbumResponseDto, SharedLinkResponseDto } from '@immich/sdk'; import { ActionButton, IconButton, Logo } from '@immich/ui'; import { mdiDownload, mdiFileImagePlusOutline, mdiPresentationPlay } from '@mdi/js'; import { t } from 'svelte-i18n'; @@ -26,10 +26,9 @@ interface Props { sharedLink: SharedLinkResponseDto; - user?: UserResponseDto | undefined; } - let { sharedLink, user = undefined }: Props = $props(); + let { sharedLink }: Props = $props(); const album = sharedLink.album as AlbumResponseDto; @@ -97,11 +96,7 @@
{#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clear()} - > + {#if sharedLink.allowDownload} diff --git a/web/src/lib/components/memory-page/memory-viewer.svelte b/web/src/lib/components/memory-page/memory-viewer.svelte index 9e24a0a050..f053164066 100644 --- a/web/src/lib/components/memory-page/memory-viewer.svelte +++ b/web/src/lib/components/memory-page/memory-viewer.svelte @@ -336,11 +336,7 @@ {#if assetMultiSelectManager.selectionActive}
- assetMultiSelectManager.clear()} - > + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clear()} - > + - assetMultiSelectManager.clear()} - > + diff --git a/web/src/lib/components/timeline/AssetSelectControlBar.svelte b/web/src/lib/components/timeline/AssetSelectControlBar.svelte index e722ce90c8..8ebccd03b8 100644 --- a/web/src/lib/components/timeline/AssetSelectControlBar.svelte +++ b/web/src/lib/components/timeline/AssetSelectControlBar.svelte @@ -1,32 +1,26 @@ - - - + {#snippet leading()}

{assets.length}

diff --git a/web/src/lib/managers/asset-multi-select-manager.svelte.ts b/web/src/lib/managers/asset-multi-select-manager.svelte.ts index ec282f659a..eb75825102 100644 --- a/web/src/lib/managers/asset-multi-select-manager.svelte.ts +++ b/web/src/lib/managers/asset-multi-select-manager.svelte.ts @@ -43,7 +43,8 @@ export class AssetMultiSelectManager { asControlContext(): AssetControlContext { return { - getOwnedAssets: () => this.assets.filter((asset) => asset.ownerId === this.#userId), + getOwnedAssets: () => + this.#userId ? this.assets.filter((asset) => asset.ownerId === this.#userId) : this.assets, getAssets: () => this.assets, clearSelect: () => this.clear(), }; diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 60372f5ad4..c4fb6e91f9 100644 --- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -451,10 +451,7 @@ {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clear()} - > + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte index 0b2df6079c..c7d5d73f06 100644 --- a/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -59,7 +59,7 @@ {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clear()}> + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clear()}> + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} timelineManager.removeAssets(assetIds)} /> diff --git a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte index 264f36fdff..9299e9001b 100644 --- a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -110,7 +110,7 @@ {#if assetMultiSelectManager.selectionActive}
- assetMultiSelectManager.clear()}> + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte index a0d2992409..a01b47884c 100644 --- a/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -74,7 +74,7 @@ {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clear()}> + diff --git a/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte index dbe9276c4b..97b1d89bae 100644 --- a/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -39,7 +39,7 @@ {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clear()}> + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 611ea2ccd8..9e5ddbb960 100644 --- a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -458,7 +458,7 @@
{#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clear()}> + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte index 5376804c17..aa7ba28812 100644 --- a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte @@ -25,7 +25,7 @@ import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; - import { preferences, user } from '$lib/stores/user.store'; + import { preferences } from '$lib/stores/user.store'; import { getAssetMediaUrl, memoryLaneTitle } from '$lib/utils'; import { updateStackedAssetInTimeline, @@ -112,11 +112,7 @@ {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clear()} - > + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte index 1de18569b0..970d2f5886 100644 --- a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -318,10 +318,7 @@
{#if assetMultiSelectManager.selectionActive}
- assetMultiSelectManager.clear()} - > + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte index b79d5d76e1..56786821f6 100644 --- a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -27,7 +27,7 @@ import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; import { getTagActions } from '$lib/services/tag.service'; - import { preferences, user } from '$lib/stores/user.store'; + import { preferences } from '$lib/stores/user.store'; import { joinPaths, TreeNode } from '$lib/utils/tree-utils'; import { getAllTags, type TagResponseDto } from '@immich/sdk'; import { ActionButton, CommandPaletteDefaultProvider, Text } from '@immich/ui'; @@ -113,11 +113,7 @@
{#if assetMultiSelectManager.selectionActive}
- assetMultiSelectManager.clear()} - > + {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} diff --git a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte index 3c75444f40..18b793c566 100644 --- a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -68,7 +68,7 @@ {/if} {#if assetMultiSelectManager.selectionActive} - assetMultiSelectManager.clear()}> + timelineManager.removeAssets(assetIds)} /> timelineManager.removeAssets(assetIds)} /> From a277c6311f638de27857a60ec6b20d1d8d9002e7 Mon Sep 17 00:00:00 2001 From: Luis Nachtigall <31982496+LeLunZ@users.noreply.github.com> Date: Sat, 28 Mar 2026 01:07:38 +0100 Subject: [PATCH 057/156] fix(mobile): streamline error handling for live photo saving (#27337) --- mobile/lib/services/download.service.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/services/download.service.dart b/mobile/lib/services/download.service.dart index 7d2cf01b7c..8e810ced2a 100644 --- a/mobile/lib/services/download.service.dart +++ b/mobile/lib/services/download.service.dart @@ -109,7 +109,7 @@ class DownloadService { return result != null; } on PlatformException catch (error, stack) { // Handle saving MotionPhotos on iOS - if (error.code == 'PHPhotosErrorDomain (-1)') { + if (error.code.startsWith('PHPhotosErrorDomain')) { final result = await _fileMediaRepository.saveImageWithFile(imageFilePath, title: task.filename); return result != null; } From eb20b715e4bb6c6668890f3b79fff6f541987d93 Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Sat, 28 Mar 2026 13:50:09 +0100 Subject: [PATCH 058/156] fix: don't auto-close manually reopened PRs (#27347) --- .github/workflows/auto-close.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/auto-close.yml b/.github/workflows/auto-close.yml index 60371d1abb..348c0785bb 100644 --- a/.github/workflows/auto-close.yml +++ b/.github/workflows/auto-close.yml @@ -35,7 +35,12 @@ jobs: close_template: runs-on: ubuntu-latest needs: parse_template - if: ${{ needs.parse_template.outputs.uses_template == 'false' && github.event.pull_request.state != 'closed' }} + if: >- + ${{ + needs.parse_template.outputs.uses_template == 'false' + && github.event.pull_request.state != 'closed' + && !contains(github.event.pull_request.labels.*.name, 'auto-closed:template') + }} permissions: pull-requests: write steps: From 181b028b09dfe633a5d337055cd986b58638dd82 Mon Sep 17 00:00:00 2001 From: Nicolas-micuda-becker <155229215+Nicolas-micuda-becker@users.noreply.github.com> Date: Sat, 28 Mar 2026 22:25:44 +0100 Subject: [PATCH 059/156] fix(web): keep upload totals stable when dismissing items (#27247) (#27354) * fix(web): keep upload totals stable when dismissing items (#27247) * chore: remove package-lock.json --------- Co-authored-by: bwees --- web/src/lib/stores/upload.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/web/src/lib/stores/upload.ts b/web/src/lib/stores/upload.ts index b36a2e5e70..46eb5f1623 100644 --- a/web/src/lib/stores/upload.ts +++ b/web/src/lib/stores/upload.ts @@ -85,11 +85,6 @@ function createUploadStore() { if (assetToRemove) { stats.update((stats) => { switch (assetToRemove.state) { - case UploadState.DONE: { - stats.success--; - break; - } - case UploadState.DUPLICATED: { stats.duplicates--; break; @@ -99,9 +94,12 @@ function createUploadStore() { stats.errors--; break; } + + case UploadState.DONE: { + break; + } } - stats.total--; return stats; }); } From b09ebb11e9cf49eb236f5fdabfe897302cf39c31 Mon Sep 17 00:00:00 2001 From: Tony Fung Date: Sat, 28 Mar 2026 14:33:05 -0700 Subject: [PATCH 060/156] perf(server): optimize people page query (#27346) Optimize People page query: modified SQL to use index for faster performance --- server/src/queries/person.repository.sql | 2 +- server/src/repositories/person.repository.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/queries/person.repository.sql b/server/src/queries/person.repository.sql index 964aaaccee..80756f26c7 100644 --- a/server/src/queries/person.repository.sql +++ b/server/src/queries/person.repository.sql @@ -228,12 +228,12 @@ select from "asset_face" left join "asset" on "asset"."id" = "asset_face"."assetId" - and "asset_face"."personId" = $1 and "asset"."visibility" = 'timeline' and "asset"."deletedAt" is null where "asset_face"."deletedAt" is null and "asset_face"."isVisible" is true + and "asset_face"."personId" = $1 -- PersonRepository.getNumberOfPeople select diff --git a/server/src/repositories/person.repository.ts b/server/src/repositories/person.repository.ts index 00156a2492..8701779de5 100644 --- a/server/src/repositories/person.repository.ts +++ b/server/src/repositories/person.repository.ts @@ -352,13 +352,13 @@ export class PersonRepository { .leftJoin('asset', (join) => join .onRef('asset.id', '=', 'asset_face.assetId') - .on('asset_face.personId', '=', personId) .on('asset.visibility', '=', sql.lit(AssetVisibility.Timeline)) .on('asset.deletedAt', 'is', null), ) .select((eb) => eb.fn.count(eb.fn('distinct', ['asset.id'])).as('count')) .where('asset_face.deletedAt', 'is', null) .where('asset_face.isVisible', 'is', true) + .where('asset_face.personId', '=', personId) .executeTakeFirst(); return { From 17d49410890303386e92f0c2b0d2559aec195006 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Mon, 30 Mar 2026 10:45:57 -0400 Subject: [PATCH 061/156] refactor: asset select manager (#27330) --- .../components/memory-page/memory-viewer.svelte | 2 +- .../shared-components/map/MapTimelinePanel.svelte | 2 +- .../timeline/AssetSelectControlBar.svelte | 3 --- .../timeline/actions/ArchiveAction.svelte | 12 +++++------- .../timeline/actions/ChangeDateAction.svelte | 12 ++++++------ .../actions/ChangeDescriptionAction.svelte | 7 +++---- .../timeline/actions/ChangeLocationAction.svelte | 7 +++---- .../timeline/actions/CreateSharedLinkAction.svelte | 6 ++---- .../timeline/actions/DeleteAssetsAction.svelte | 8 +++----- .../timeline/actions/DownloadAction.svelte | 12 +++++------- .../timeline/actions/FavoriteAction.svelte | 8 +++----- .../timeline/actions/LinkLivePhotoAction.svelte | 14 ++++++-------- .../timeline/actions/RemoveFromAlbumAction.svelte | 10 ++++------ .../actions/RemoveFromSharedLinkAction.svelte | 8 +++----- .../timeline/actions/RestoreAction.svelte | 8 +++----- .../timeline/actions/SetVisibilityAction.svelte | 5 ++--- .../components/timeline/actions/StackAction.svelte | 13 +++++-------- .../components/timeline/actions/TagAction.svelte | 10 ++++------ .../managers/asset-multi-select-manager.svelte.ts | 13 +++++-------- web/src/lib/services/asset.service.ts | 8 ++++---- web/src/lib/utils/context.ts | 3 --- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 2 +- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 2 +- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 2 +- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 2 +- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 2 +- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 2 +- .../(user)/photos/[[assetId=id]]/+page.svelte | 2 +- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 2 +- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 2 +- 30 files changed, 77 insertions(+), 112 deletions(-) diff --git a/web/src/lib/components/memory-page/memory-viewer.svelte b/web/src/lib/components/memory-page/memory-viewer.svelte index f053164066..3aa68c5825 100644 --- a/web/src/lib/components/memory-page/memory-viewer.svelte +++ b/web/src/lib/components/memory-page/memory-viewer.svelte @@ -337,7 +337,7 @@ {#if assetMultiSelectManager.selectionActive}
- {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} + {@const Actions = getAssetBulkActions($t)} {#if assetMultiSelectManager.selectionActive} - {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} + {@const Actions = getAssetBulkActions($t)} diff --git a/web/src/lib/components/timeline/AssetSelectControlBar.svelte b/web/src/lib/components/timeline/AssetSelectControlBar.svelte index 8ebccd03b8..07fd1688a9 100644 --- a/web/src/lib/components/timeline/AssetSelectControlBar.svelte +++ b/web/src/lib/components/timeline/AssetSelectControlBar.svelte @@ -1,7 +1,6 @@ diff --git a/web/src/lib/components/timeline/actions/ChangeDescriptionAction.svelte b/web/src/lib/components/timeline/actions/ChangeDescriptionAction.svelte index 883e43aa50..2fb8dcc5a0 100644 --- a/web/src/lib/components/timeline/actions/ChangeDescriptionAction.svelte +++ b/web/src/lib/components/timeline/actions/ChangeDescriptionAction.svelte @@ -1,8 +1,8 @@ diff --git a/web/src/lib/components/timeline/actions/ChangeLocationAction.svelte b/web/src/lib/components/timeline/actions/ChangeLocationAction.svelte index 537d38586b..5d9fdc139d 100644 --- a/web/src/lib/components/timeline/actions/ChangeLocationAction.svelte +++ b/web/src/lib/components/timeline/actions/ChangeLocationAction.svelte @@ -1,9 +1,9 @@ diff --git a/web/src/lib/components/timeline/actions/DeleteAssetsAction.svelte b/web/src/lib/components/timeline/actions/DeleteAssetsAction.svelte index e643bae512..16fa72a75d 100644 --- a/web/src/lib/components/timeline/actions/DeleteAssetsAction.svelte +++ b/web/src/lib/components/timeline/actions/DeleteAssetsAction.svelte @@ -1,10 +1,10 @@ diff --git a/web/src/lib/components/timeline/actions/DownloadAction.svelte b/web/src/lib/components/timeline/actions/DownloadAction.svelte index 509aa3a0d7..0a9ab89df8 100644 --- a/web/src/lib/components/timeline/actions/DownloadAction.svelte +++ b/web/src/lib/components/timeline/actions/DownloadAction.svelte @@ -1,15 +1,15 @@ diff --git a/web/src/lib/components/timeline/actions/FavoriteAction.svelte b/web/src/lib/components/timeline/actions/FavoriteAction.svelte index d970a16b8d..b60740d471 100644 --- a/web/src/lib/components/timeline/actions/FavoriteAction.svelte +++ b/web/src/lib/components/timeline/actions/FavoriteAction.svelte @@ -1,7 +1,7 @@ diff --git a/web/src/lib/components/timeline/actions/RestoreAction.svelte b/web/src/lib/components/timeline/actions/RestoreAction.svelte index 48094825f6..946167fb61 100644 --- a/web/src/lib/components/timeline/actions/RestoreAction.svelte +++ b/web/src/lib/components/timeline/actions/RestoreAction.svelte @@ -1,6 +1,6 @@ diff --git a/web/src/lib/components/timeline/actions/TagAction.svelte b/web/src/lib/components/timeline/actions/TagAction.svelte index 63748cd214..e4887441e3 100644 --- a/web/src/lib/components/timeline/actions/TagAction.svelte +++ b/web/src/lib/components/timeline/actions/TagAction.svelte @@ -1,11 +1,11 @@ diff --git a/web/src/lib/managers/asset-multi-select-manager.svelte.ts b/web/src/lib/managers/asset-multi-select-manager.svelte.ts index eb75825102..6bdea33094 100644 --- a/web/src/lib/managers/asset-multi-select-manager.svelte.ts +++ b/web/src/lib/managers/asset-multi-select-manager.svelte.ts @@ -1,7 +1,6 @@ import { eventManager } from '$lib/managers/event-manager.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; import { user } from '$lib/stores/user.store'; -import type { AssetControlContext } from '$lib/types'; import { AssetVisibility, type UserAdminResponseDto } from '@immich/sdk'; import { SvelteMap, SvelteSet } from 'svelte/reactivity'; import { fromStore } from 'svelte/store'; @@ -22,7 +21,10 @@ export class AssetMultiSelectManager { candidates = $state([]); selectionActive = $derived(this.#selectedMap.size > 0); + assets = $derived(Array.from(this.#selectedMap.values())); + ownedAssets = $derived(this.#userId ? this.assets.filter((asset) => asset.ownerId === this.#userId) : this.assets); + isAllTrashed = $derived(this.assets.every((asset) => asset.isTrashed)); isAllArchived = $derived(this.assets.every((asset) => asset.visibility === AssetVisibility.Archive)); isAllFavorite = $derived(this.assets.every((asset) => asset.isFavorite)); @@ -41,13 +43,8 @@ export class AssetMultiSelectManager { this.#unsubscribe?.(); } - asControlContext(): AssetControlContext { - return { - getOwnedAssets: () => - this.#userId ? this.assets.filter((asset) => asset.ownerId === this.#userId) : this.assets, - getAssets: () => this.assets, - clearSelect: () => this.clear(), - }; + getOwnedAssets() { + return this.#userId ? this.assets.filter((asset) => asset.ownerId === this.#userId) : this.assets; } hasSelectedAsset(assetId: string) { diff --git a/web/src/lib/services/asset.service.ts b/web/src/lib/services/asset.service.ts index d2d847fc15..a5fd76983a 100644 --- a/web/src/lib/services/asset.service.ts +++ b/web/src/lib/services/asset.service.ts @@ -1,4 +1,5 @@ import { ProjectionType } from '$lib/constants'; +import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { authManager } from '$lib/managers/auth-manager.svelte'; import { eventManager } from '$lib/managers/event-manager.svelte'; @@ -6,7 +7,6 @@ import AssetAddToAlbumModal from '$lib/modals/AssetAddToAlbumModal.svelte'; import AssetTagModal from '$lib/modals/AssetTagModal.svelte'; import SharedLinkCreateModal from '$lib/modals/SharedLinkCreateModal.svelte'; import { user as authUser, preferences } from '$lib/stores/user.store'; -import type { AssetControlContext } from '$lib/types'; import { getAssetMediaUrl, getSharedLink, sleep } from '$lib/utils'; import { downloadUrl } from '$lib/utils/asset-utils'; import { handleError } from '$lib/utils/handle-error'; @@ -48,14 +48,14 @@ import { import type { MessageFormatter } from 'svelte-i18n'; import { get } from 'svelte/store'; -export const getAssetBulkActions = ($t: MessageFormatter, ctx: AssetControlContext) => { - const ownedAssets = ctx.getOwnedAssets(); +export const getAssetBulkActions = ($t: MessageFormatter) => { + const ownedAssets = assetMultiSelectManager.ownedAssets; const assetIds = ownedAssets.map((asset) => asset.id); const isAllVideos = ownedAssets.every((asset) => asset.isVideo); const onAction = async (name: AssetJobName) => { await handleRunAssetJob({ name, assetIds }); - ctx.clearSelect(); + assetMultiSelectManager.clear(); }; const AddToAlbum: ActionItem = { diff --git a/web/src/lib/utils/context.ts b/web/src/lib/utils/context.ts index 080017a2d3..733b8e6eb9 100644 --- a/web/src/lib/utils/context.ts +++ b/web/src/lib/utils/context.ts @@ -1,4 +1,3 @@ -import type { AssetControlContext } from '$lib/types'; import { getContext, setContext } from 'svelte'; export function createContext(key: string | symbol = Symbol()) { @@ -7,5 +6,3 @@ export function createContext(key: string | symbol = Symbol()) { set: (context: T) => setContext(key, context), }; } - -export const { get: getAssetControlContext, set: setAssetControlContext } = createContext(); diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte index c4fb6e91f9..8e8eea13d8 100644 --- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -452,7 +452,7 @@ {#if assetMultiSelectManager.selectionActive} - {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} + {@const Actions = getAssetBulkActions($t)} diff --git a/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte index c7d5d73f06..c89b4b7892 100644 --- a/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -60,7 +60,7 @@ {#if assetMultiSelectManager.selectionActive} - {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} + {@const Actions = getAssetBulkActions($t)} {#if assetMultiSelectManager.selectionActive} - {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} + {@const Actions = getAssetBulkActions($t)} timelineManager.removeAssets(assetIds)} /> diff --git a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte index 9299e9001b..59220b9113 100644 --- a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -111,7 +111,7 @@ {#if assetMultiSelectManager.selectionActive}
- {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} + {@const Actions = getAssetBulkActions($t)} - {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} + {@const Actions = getAssetBulkActions($t)} diff --git a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 9e5ddbb960..0ae1f8bb66 100644 --- a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -459,7 +459,7 @@
{#if assetMultiSelectManager.selectionActive} - {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} + {@const Actions = getAssetBulkActions($t)} diff --git a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte index aa7ba28812..b1aaa69725 100644 --- a/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/photos/[[assetId=id]]/+page.svelte @@ -113,7 +113,7 @@ {#if assetMultiSelectManager.selectionActive} - {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} + {@const Actions = getAssetBulkActions($t)} diff --git a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte index 970d2f5886..cbdfa73b37 100644 --- a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -319,7 +319,7 @@ {#if assetMultiSelectManager.selectionActive}
- {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} + {@const Actions = getAssetBulkActions($t)} diff --git a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte index 56786821f6..90efd3bac8 100644 --- a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -114,7 +114,7 @@ {#if assetMultiSelectManager.selectionActive}
- {@const Actions = getAssetBulkActions($t, assetMultiSelectManager.asControlContext())} + {@const Actions = getAssetBulkActions($t)} From e8309585d61a7ea7ada90aa08c45c3e03ec2a3c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 19:44:39 +0200 Subject: [PATCH 062/156] fix(deps): update dependency nodemailer to v8 [security] (#27351) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 10 +++++----- server/package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1837d2c60a..9b82023305 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -518,8 +518,8 @@ importers: specifier: ^7.0.0 version: 7.0.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17) nodemailer: - specifier: ^7.0.0 - version: 7.0.13 + specifier: ^8.0.0 + version: 8.0.4 openid-client: specifier: ^6.3.3 version: 6.8.2 @@ -9391,8 +9391,8 @@ packages: node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} - nodemailer@7.0.13: - resolution: {integrity: sha512-PNDFSJdP+KFgdsG3ZzMXCgquO7I6McjY2vlqILjtJd0hy8wEvtugS9xKRF2NWlPNGxvLCXlTNIae4serI7dinw==} + nodemailer@8.0.4: + resolution: {integrity: sha512-k+jf6N8PfQJ0Fe8ZhJlgqU5qJU44Lpvp2yvidH3vp1lPnVQMgi4yEEMPXg5eJS1gFIJTVq1NHBk7Ia9ARdSBdQ==} engines: {node: '>=6.0.0'} nopt@1.0.10: @@ -22445,7 +22445,7 @@ snapshots: node-releases@2.0.27: {} - nodemailer@7.0.13: {} + nodemailer@8.0.4: {} nopt@1.0.10: dependencies: diff --git a/server/package.json b/server/package.json index 8c4a65bb57..48b4ac6920 100644 --- a/server/package.json +++ b/server/package.json @@ -98,7 +98,7 @@ "nestjs-cls": "^5.0.0", "nestjs-kysely": "3.1.2", "nestjs-otel": "^7.0.0", - "nodemailer": "^7.0.0", + "nodemailer": "^8.0.0", "openid-client": "^6.3.3", "pg": "^8.11.3", "pg-connection-string": "^2.9.1", From a1a293986853481c5a2c948dc69152436b47b28f Mon Sep 17 00:00:00 2001 From: Mert <101130780+mertalev@users.noreply.github.com> Date: Mon, 30 Mar 2026 17:05:21 -0400 Subject: [PATCH 063/156] fix(mobile): low upload timeout on android (#27399) fix timeout --- .../infrastructure/repositories/network.repository.dart | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mobile/lib/infrastructure/repositories/network.repository.dart b/mobile/lib/infrastructure/repositories/network.repository.dart index bb5796e220..75f7850168 100644 --- a/mobile/lib/infrastructure/repositories/network.repository.dart +++ b/mobile/lib/infrastructure/repositories/network.repository.dart @@ -22,7 +22,14 @@ class NetworkRepository { final session = URLSession.fromRawPointer(clientPointer.cast()); _client = CupertinoClient.fromSharedSession(session); } else { - _client = OkHttpClient.fromJniGlobalRef(clientPointer); + _client = OkHttpClient.fromJniGlobalRef( + clientPointer, + configuration: const OkHttpClientConfiguration( + connectTimeout: Duration(seconds: 30), + readTimeout: Duration(seconds: 60), + writeTimeout: Duration(seconds: 60), + ), + ); } } From ce346bf95661fd126d10b4d1136e40caacc799eb Mon Sep 17 00:00:00 2001 From: Min Idzelis Date: Mon, 30 Mar 2026 17:16:38 -0400 Subject: [PATCH 064/156] feat(web): dim photo outside hovered face bounding box (#27402) When hovering over a detected face in the photo viewer, an SVG mask overlay dims the rest of the image (40% black) while leaving the hovered face fully visible. The overlay fades in/out smoothly via CSS opacity transition by freezing the last highlighted box positions in state, preventing the overlay from popping off instantly when the mouse leaves. Change-Id: I07e2eb2b297820ec89812785fe7943846a6a6964 --- .../asset-viewer/photo-viewer.svelte | 58 ++++++++++++++----- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/web/src/lib/components/asset-viewer/photo-viewer.svelte b/web/src/lib/components/asset-viewer/photo-viewer.svelte index a26b66b0b6..a42eab6c4f 100644 --- a/web/src/lib/components/asset-viewer/photo-viewer.svelte +++ b/web/src/lib/components/asset-viewer/photo-viewer.svelte @@ -16,7 +16,7 @@ import { getNaturalSize, scaleToFit, type ContentMetrics } from '$lib/utils/container-utils'; import { handleError } from '$lib/utils/handle-error'; import { getOcrBoundingBoxes } from '$lib/utils/ocr-utils'; - import { getBoundingBox } from '$lib/utils/people-utils'; + import { getBoundingBox, type BoundingBox } from '$lib/utils/people-utils'; import { type SharedLinkResponseDto } from '@immich/sdk'; import { toastManager } from '@immich/ui'; import { onDestroy, untrack } from 'svelte'; @@ -82,6 +82,18 @@ }; }); + const highlightedBoxes = $derived(getBoundingBox($boundingBoxesArray, overlayMetrics)); + const isHighlighting = $derived(highlightedBoxes.length > 0); + + let visibleBoxes = $state([]); + let visibleBoundingBoxes = $state([]); + $effect(() => { + if (isHighlighting) { + visibleBoxes = highlightedBoxes; + visibleBoundingBoxes = $boundingBoxesArray; + } + }); + const ocrBoxes = $derived(ocrManager.showOverlay ? getOcrBoundingBoxes(ocrManager.data, overlayMetrics) : []); const onCopy = async () => { @@ -242,21 +254,37 @@ {/if} {/snippet} {#snippet overlays()} - {#each getBoundingBox($boundingBoxesArray, overlayMetrics) as boundingbox, index (boundingbox.id)} -
- {#if faceToNameMap.get($boundingBoxesArray[index])} +
+ + + + + {#each visibleBoxes as box (box.id)} + + {/each} + + + + + {#each visibleBoxes as boundingbox, index (boundingbox.id)}
- {faceToNameMap.get($boundingBoxesArray[index])} -
- {/if} - {/each} + class="absolute border-solid border-white border-3 rounded-lg" + style="top: {boundingbox.top}px; left: {boundingbox.left}px; height: {boundingbox.height}px; width: {boundingbox.width}px;" + >
+ {#if faceToNameMap.get(visibleBoundingBoxes[index])} +
+ {faceToNameMap.get(visibleBoundingBoxes[index])} +
+ {/if} + {/each} +
{#each ocrBoxes as ocrBox (ocrBox.id)} From a2e3635ac954d3f0922d4cda18b19ba22d747499 Mon Sep 17 00:00:00 2001 From: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> Date: Tue, 31 Mar 2026 00:22:07 +0200 Subject: [PATCH 065/156] chore: use esm global import (#27408) --- server/src/repositories/oauth.repository.ts | 28 +++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/server/src/repositories/oauth.repository.ts b/server/src/repositories/oauth.repository.ts index 5af5163f8f..b2e72e470a 100644 --- a/server/src/repositories/oauth.repository.ts +++ b/server/src/repositories/oauth.repository.ts @@ -1,5 +1,19 @@ import { Injectable, InternalServerErrorException } from '@nestjs/common'; -import type { UserInfoResponse } from 'openid-client' with { 'resolution-mode': 'import' }; +import { + allowInsecureRequests, + authorizationCodeGrant, + buildAuthorizationUrl, + calculatePKCECodeChallenge, + ClientSecretBasic, + ClientSecretPost, + discovery, + fetchUserInfo, + None, + randomPKCECodeVerifier, + randomState, + skipSubjectCheck, + type UserInfoResponse, +} from 'openid-client'; import { OAuthTokenEndpointAuthMethod } from 'src/enum'; import { LoggingRepository } from 'src/repositories/logging.repository'; @@ -24,8 +38,6 @@ export class OAuthRepository { } async authorize(config: OAuthConfig, redirectUrl: string, state?: string, codeChallenge?: string) { - const { buildAuthorizationUrl, randomState, randomPKCECodeVerifier, calculatePKCECodeChallenge } = - await import('openid-client'); const client = await this.getClient(config); state ??= randomState(); @@ -64,7 +76,6 @@ export class OAuthRepository { expectedState: string, codeVerifier: string, ): Promise { - const { authorizationCodeGrant, fetchUserInfo, ...oidc } = await import('openid-client'); const client = await this.getClient(config); const pkceCodeVerifier = client.serverMetadata().supportsPKCE() ? codeVerifier : undefined; @@ -77,7 +88,7 @@ export class OAuthRepository { this.logger.debug('Using ID token claims instead of userinfo endpoint'); profile = tokenClaims as OAuthProfile; } else { - profile = await fetchUserInfo(client, tokens.access_token, oidc.skipSubjectCheck); + profile = await fetchUserInfo(client, tokens.access_token, skipSubjectCheck); } if (!profile.sub) { @@ -124,7 +135,6 @@ export class OAuthRepository { timeout, }: OAuthConfig) { try { - const { allowInsecureRequests, discovery } = await import('openid-client'); return await discovery( new URL(issuerUrl), clientId, @@ -134,7 +144,7 @@ export class OAuthRepository { userinfo_signed_response_alg: profileSigningAlgorithm === 'none' ? undefined : profileSigningAlgorithm, id_token_signed_response_alg: signingAlgorithm, }, - await this.getTokenAuthMethod(tokenEndpointAuthMethod, clientSecret), + this.getTokenAuthMethod(tokenEndpointAuthMethod, clientSecret), { execute: [allowInsecureRequests], timeout, @@ -146,9 +156,7 @@ export class OAuthRepository { } } - private async getTokenAuthMethod(tokenEndpointAuthMethod: OAuthTokenEndpointAuthMethod, clientSecret?: string) { - const { None, ClientSecretPost, ClientSecretBasic } = await import('openid-client'); - + private getTokenAuthMethod(tokenEndpointAuthMethod: OAuthTokenEndpointAuthMethod, clientSecret?: string) { if (!clientSecret) { return None(); } From 18201a26d9690b37a867e11bcb6cecbf07e53839 Mon Sep 17 00:00:00 2001 From: Min Idzelis Date: Mon, 30 Mar 2026 20:19:53 -0400 Subject: [PATCH 066/156] feat(web): OCR overlay interactivity during zoom (#27039) Change-Id: Id62e1a0264df2de0f3177a59b24bc5176a6a6964 --- e2e/src/ui/mock-network/ocr-network.ts | 55 ++++ e2e/src/ui/specs/asset-viewer/ocr.e2e-spec.ts | 300 ++++++++++++++++++ web/src/lib/actions/zoom-image.ts | 146 +++++++-- web/src/lib/components/AdaptiveImage.svelte | 122 +++---- .../face-editor/face-editor.svelte | 5 +- .../asset-viewer/ocr-bounding-box.svelte | 48 ++- .../photo-sphere-viewer-adapter.svelte | 6 +- .../asset-viewer/photo-viewer.svelte | 31 +- web/src/lib/utils/container-utils.spec.ts | 87 ++++- web/src/lib/utils/container-utils.ts | 77 ++++- web/src/lib/utils/ocr-utils.spec.ts | 27 +- web/src/lib/utils/ocr-utils.ts | 23 +- web/src/lib/utils/people-utils.spec.ts | 55 +--- web/src/lib/utils/people-utils.ts | 34 +- 14 files changed, 770 insertions(+), 246 deletions(-) create mode 100644 e2e/src/ui/mock-network/ocr-network.ts create mode 100644 e2e/src/ui/specs/asset-viewer/ocr.e2e-spec.ts diff --git a/e2e/src/ui/mock-network/ocr-network.ts b/e2e/src/ui/mock-network/ocr-network.ts new file mode 100644 index 0000000000..3b1a2fe62e --- /dev/null +++ b/e2e/src/ui/mock-network/ocr-network.ts @@ -0,0 +1,55 @@ +import { faker } from '@faker-js/faker'; +import type { AssetOcrResponseDto } from '@immich/sdk'; +import { BrowserContext } from '@playwright/test'; + +export type MockOcrBox = { + text: string; + x1: number; + y1: number; + x2: number; + y2: number; + x3: number; + y3: number; + x4: number; + y4: number; +}; + +export const createMockOcrData = (assetId: string, boxes: MockOcrBox[]): AssetOcrResponseDto[] => { + return boxes.map((box) => ({ + id: faker.string.uuid(), + assetId, + x1: box.x1, + y1: box.y1, + x2: box.x2, + y2: box.y2, + x3: box.x3, + y3: box.y3, + x4: box.x4, + y4: box.y4, + boxScore: 0.95, + textScore: 0.9, + text: box.text, + })); +}; + +export const setupOcrMockApiRoutes = async ( + context: BrowserContext, + ocrDataByAssetId: Map, +) => { + await context.route('**/assets/*/ocr', async (route, request) => { + if (request.method() !== 'GET') { + return route.fallback(); + } + const url = new URL(request.url()); + const segments = url.pathname.split('/'); + const assetIdIndex = segments.indexOf('assets') + 1; + const assetId = segments[assetIdIndex]; + + const ocrData = ocrDataByAssetId.get(assetId) ?? []; + return route.fulfill({ + status: 200, + contentType: 'application/json', + json: ocrData, + }); + }); +}; diff --git a/e2e/src/ui/specs/asset-viewer/ocr.e2e-spec.ts b/e2e/src/ui/specs/asset-viewer/ocr.e2e-spec.ts new file mode 100644 index 0000000000..5a442a6081 --- /dev/null +++ b/e2e/src/ui/specs/asset-viewer/ocr.e2e-spec.ts @@ -0,0 +1,300 @@ +import type { AssetOcrResponseDto, AssetResponseDto } from '@immich/sdk'; +import { expect, test } from '@playwright/test'; +import { toAssetResponseDto } from 'src/ui/generators/timeline'; +import { + createMockStack, + createMockStackAsset, + MockStack, + setupBrokenAssetMockApiRoutes, +} from 'src/ui/mock-network/broken-asset-network'; +import { createMockOcrData, setupOcrMockApiRoutes } from 'src/ui/mock-network/ocr-network'; +import { assetViewerUtils } from '../timeline/utils'; +import { setupAssetViewerFixture } from './utils'; + +test.describe.configure({ mode: 'parallel' }); + +const PRIMARY_OCR_BOXES = [ + { text: 'Hello World', x1: 0.1, y1: 0.1, x2: 0.4, y2: 0.1, x3: 0.4, y3: 0.15, x4: 0.1, y4: 0.15 }, + { text: 'Immich Photo', x1: 0.2, y1: 0.3, x2: 0.6, y2: 0.3, x3: 0.6, y3: 0.36, x4: 0.2, y4: 0.36 }, +]; + +const SECONDARY_OCR_BOXES = [ + { text: 'Second Asset Text', x1: 0.15, y1: 0.2, x2: 0.55, y2: 0.2, x3: 0.55, y3: 0.26, x4: 0.15, y4: 0.26 }, +]; + +test.describe('OCR bounding boxes', () => { + const fixture = setupAssetViewerFixture(920); + + test.beforeEach(async ({ context }) => { + const primaryAssetDto = toAssetResponseDto(fixture.primaryAsset); + const ocrDataByAssetId = new Map([ + [primaryAssetDto.id, createMockOcrData(primaryAssetDto.id, PRIMARY_OCR_BOXES)], + ]); + + await setupOcrMockApiRoutes(context, ocrDataByAssetId); + }); + + test('OCR bounding boxes appear when clicking OCR button', async ({ page }) => { + await page.goto(`/photos/${fixture.primaryAsset.id}`); + await assetViewerUtils.waitForViewerLoad(page, fixture.primaryAsset); + + const ocrButton = page.getByLabel('Text recognition'); + await expect(ocrButton).toBeVisible(); + await ocrButton.click(); + + const ocrBoxes = page.locator('[data-viewer-content] [data-testid="ocr-box"]'); + await expect(ocrBoxes).toHaveCount(2); + + await expect(ocrBoxes.nth(0)).toContainText('Hello World'); + await expect(ocrBoxes.nth(1)).toContainText('Immich Photo'); + }); + + test('OCR bounding boxes toggle off on second click', async ({ page }) => { + await page.goto(`/photos/${fixture.primaryAsset.id}`); + await assetViewerUtils.waitForViewerLoad(page, fixture.primaryAsset); + + const ocrButton = page.getByLabel('Text recognition'); + await ocrButton.click(); + await expect(page.locator('[data-viewer-content] [data-testid="ocr-box"]').first()).toBeVisible(); + + await ocrButton.click(); + await expect(page.locator('[data-viewer-content] [data-testid="ocr-box"]')).toHaveCount(0); + }); +}); + +test.describe('OCR with stacked assets', () => { + const fixture = setupAssetViewerFixture(921); + let mockStack: MockStack; + let primaryAssetDto: AssetResponseDto; + let secondAssetDto: AssetResponseDto; + + test.beforeAll(async () => { + primaryAssetDto = toAssetResponseDto(fixture.primaryAsset); + secondAssetDto = createMockStackAsset(fixture.adminUserId); + secondAssetDto.originalFileName = 'second-ocr-asset.jpg'; + mockStack = createMockStack(primaryAssetDto, [secondAssetDto], new Set()); + }); + + test.beforeEach(async ({ context }) => { + await setupBrokenAssetMockApiRoutes(context, mockStack); + + const ocrDataByAssetId = new Map([ + [primaryAssetDto.id, createMockOcrData(primaryAssetDto.id, PRIMARY_OCR_BOXES)], + [secondAssetDto.id, createMockOcrData(secondAssetDto.id, SECONDARY_OCR_BOXES)], + ]); + + await setupOcrMockApiRoutes(context, ocrDataByAssetId); + }); + + test('different OCR boxes shown for different stacked assets', async ({ page }) => { + await page.goto(`/photos/${fixture.primaryAsset.id}`); + await assetViewerUtils.waitForViewerLoad(page, fixture.primaryAsset); + + const ocrButton = page.getByLabel('Text recognition'); + await expect(ocrButton).toBeVisible(); + await ocrButton.click(); + + const ocrBoxes = page.locator('[data-viewer-content] [data-testid="ocr-box"]'); + await expect(ocrBoxes).toHaveCount(2); + await expect(ocrBoxes.nth(0)).toContainText('Hello World'); + + const stackThumbnails = page.locator('#stack-slideshow [data-asset]'); + await expect(stackThumbnails).toHaveCount(2); + await stackThumbnails.nth(1).click(); + + // refreshOcr() clears showOverlay when switching assets, so re-enable it + await expect(ocrBoxes).toHaveCount(0); + await expect(ocrButton).toBeVisible(); + await ocrButton.click(); + + await expect(ocrBoxes).toHaveCount(1); + await expect(ocrBoxes.first()).toContainText('Second Asset Text'); + }); +}); + +test.describe('OCR boxes and zoom', () => { + const fixture = setupAssetViewerFixture(922); + + test.beforeEach(async ({ context }) => { + const primaryAssetDto = toAssetResponseDto(fixture.primaryAsset); + const ocrDataByAssetId = new Map([ + [primaryAssetDto.id, createMockOcrData(primaryAssetDto.id, PRIMARY_OCR_BOXES)], + ]); + + await setupOcrMockApiRoutes(context, ocrDataByAssetId); + }); + + test('OCR boxes scale with zoom', async ({ page }) => { + await page.goto(`/photos/${fixture.primaryAsset.id}`); + await assetViewerUtils.waitForViewerLoad(page, fixture.primaryAsset); + + const ocrButton = page.getByLabel('Text recognition'); + await expect(ocrButton).toBeVisible(); + await ocrButton.click(); + + const ocrBox = page.locator('[data-viewer-content] [data-testid="ocr-box"]').first(); + await expect(ocrBox).toBeVisible(); + + const initialBox = await ocrBox.boundingBox(); + expect(initialBox).toBeTruthy(); + + const { width, height } = page.viewportSize()!; + await page.mouse.move(width / 2, height / 2); + await page.mouse.wheel(0, -3); + + await expect(async () => { + const zoomedBox = await ocrBox.boundingBox(); + expect(zoomedBox).toBeTruthy(); + expect(zoomedBox!.width).toBeGreaterThan(initialBox!.width); + expect(zoomedBox!.height).toBeGreaterThan(initialBox!.height); + }).toPass({ timeout: 2000 }); + }); +}); + +test.describe('OCR text interaction', () => { + const fixture = setupAssetViewerFixture(923); + + test.beforeEach(async ({ context }) => { + const primaryAssetDto = toAssetResponseDto(fixture.primaryAsset); + const ocrDataByAssetId = new Map([ + [primaryAssetDto.id, createMockOcrData(primaryAssetDto.id, PRIMARY_OCR_BOXES)], + ]); + + await setupOcrMockApiRoutes(context, ocrDataByAssetId); + }); + + test('OCR text box has data-overlay-interactive attribute', async ({ page }) => { + await page.goto(`/photos/${fixture.primaryAsset.id}`); + await assetViewerUtils.waitForViewerLoad(page, fixture.primaryAsset); + + await page.getByLabel('Text recognition').click(); + + const ocrBox = page.locator('[data-viewer-content] [data-testid="ocr-box"]').first(); + await expect(ocrBox).toBeVisible(); + await expect(ocrBox).toHaveAttribute('data-overlay-interactive'); + }); + + test('OCR text box receives focus on click', async ({ page }) => { + await page.goto(`/photos/${fixture.primaryAsset.id}`); + await assetViewerUtils.waitForViewerLoad(page, fixture.primaryAsset); + + await page.getByLabel('Text recognition').click(); + + const ocrBox = page.locator('[data-viewer-content] [data-testid="ocr-box"]').first(); + await expect(ocrBox).toBeVisible(); + + await ocrBox.click(); + await expect(ocrBox).toBeFocused(); + }); + + test('dragging on OCR text box does not trigger image pan', async ({ page }) => { + await page.goto(`/photos/${fixture.primaryAsset.id}`); + await assetViewerUtils.waitForViewerLoad(page, fixture.primaryAsset); + + await page.getByLabel('Text recognition').click(); + + const ocrBox = page.locator('[data-viewer-content] [data-testid="ocr-box"]').first(); + await expect(ocrBox).toBeVisible(); + + const imgLocator = page.locator('[data-viewer-content] img[draggable="false"]'); + const initialTransform = await imgLocator.evaluate((element) => { + return getComputedStyle(element.closest('[style*="transform"]') ?? element).transform; + }); + + const box = await ocrBox.boundingBox(); + expect(box).toBeTruthy(); + const centerX = box!.x + box!.width / 2; + const centerY = box!.y + box!.height / 2; + + await page.mouse.move(centerX, centerY); + await page.mouse.down(); + await page.mouse.move(centerX + 50, centerY + 30, { steps: 5 }); + await page.mouse.up(); + + const afterTransform = await imgLocator.evaluate((element) => { + return getComputedStyle(element.closest('[style*="transform"]') ?? element).transform; + }); + expect(afterTransform).toBe(initialTransform); + }); + + test('split touch gesture across zoom container does not trigger zoom', async ({ page }) => { + await page.goto(`/photos/${fixture.primaryAsset.id}`); + await assetViewerUtils.waitForViewerLoad(page, fixture.primaryAsset); + + await page.getByLabel('Text recognition').click(); + const ocrBox = page.locator('[data-viewer-content] [data-testid="ocr-box"]').first(); + await expect(ocrBox).toBeVisible(); + + const imgLocator = page.locator('[data-viewer-content] img[draggable="false"]'); + const initialTransform = await imgLocator.evaluate((element) => { + return getComputedStyle(element.closest('[style*="transform"]') ?? element).transform; + }); + + const viewerContent = page.locator('[data-viewer-content]'); + const viewerBox = await viewerContent.boundingBox(); + expect(viewerBox).toBeTruthy(); + + // Dispatch a synthetic split gesture: one touch inside the viewer, one outside + await page.evaluate( + ({ viewerCenterX, viewerCenterY, outsideY }) => { + const viewer = document.querySelector('[data-viewer-content]'); + if (!viewer) { + return; + } + + const createTouch = (id: number, x: number, y: number) => { + return new Touch({ + identifier: id, + target: viewer, + clientX: x, + clientY: y, + }); + }; + + const insideTouch = createTouch(0, viewerCenterX, viewerCenterY); + const outsideTouch = createTouch(1, viewerCenterX, outsideY); + + const touchStartEvent = new TouchEvent('touchstart', { + touches: [insideTouch, outsideTouch], + targetTouches: [insideTouch], + changedTouches: [insideTouch, outsideTouch], + bubbles: true, + cancelable: true, + }); + + const touchMoveEvent = new TouchEvent('touchmove', { + touches: [createTouch(0, viewerCenterX, viewerCenterY - 30), createTouch(1, viewerCenterX, outsideY + 30)], + targetTouches: [createTouch(0, viewerCenterX, viewerCenterY - 30)], + changedTouches: [ + createTouch(0, viewerCenterX, viewerCenterY - 30), + createTouch(1, viewerCenterX, outsideY + 30), + ], + bubbles: true, + cancelable: true, + }); + + const touchEndEvent = new TouchEvent('touchend', { + touches: [], + targetTouches: [], + changedTouches: [insideTouch, outsideTouch], + bubbles: true, + cancelable: true, + }); + + viewer.dispatchEvent(touchStartEvent); + viewer.dispatchEvent(touchMoveEvent); + viewer.dispatchEvent(touchEndEvent); + }, + { + viewerCenterX: viewerBox!.x + viewerBox!.width / 2, + viewerCenterY: viewerBox!.y + viewerBox!.height / 2, + outsideY: 10, // near the top of the page, outside the viewer + }, + ); + + const afterTransform = await imgLocator.evaluate((element) => { + return getComputedStyle(element.closest('[style*="transform"]') ?? element).transform; + }); + expect(afterTransform).toBe(initialTransform); + }); +}); diff --git a/web/src/lib/actions/zoom-image.ts b/web/src/lib/actions/zoom-image.ts index 35c3d3a106..07c44569cd 100644 --- a/web/src/lib/actions/zoom-image.ts +++ b/web/src/lib/actions/zoom-image.ts @@ -1,11 +1,18 @@ import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { createZoomImageWheel } from '@zoom-image/core'; -export const zoomImageAction = (node: HTMLElement, options?: { disabled?: boolean }) => { +// Minimal touch shape — avoids importing DOM TouchEvent which isn't available in all TS targets. +type TouchEventLike = { + touches: Iterable<{ clientX: number; clientY: number }> & { length: number }; + targetTouches: ArrayLike; +}; +const asTouchEvent = (event: Event) => event as unknown as TouchEventLike; + +export const zoomImageAction = (node: HTMLElement, options?: { zoomTarget?: HTMLElement }) => { const zoomInstance = createZoomImageWheel(node, { maxZoom: 10, initialState: assetViewerManager.zoomState, - zoomTarget: null, + zoomTarget: options?.zoomTarget, }); const unsubscribes = [ @@ -13,47 +20,130 @@ export const zoomImageAction = (node: HTMLElement, options?: { disabled?: boolea zoomInstance.subscribe(({ state }) => assetViewerManager.onZoomChange(state)), ]; - const onInteractionStart = (event: Event) => { - if (options?.disabled) { - event.stopImmediatePropagation(); + const controller = new AbortController(); + const { signal } = controller; + + node.addEventListener('pointerdown', () => assetViewerManager.cancelZoomAnimation(), { capture: true, signal }); + + // Intercept events in capture phase to prevent zoom-image from seeing interactions on + // overlay elements (e.g. OCR text boxes), preserving browser defaults like text selection. + const isOverlayEvent = (event: Event) => !!(event.target as HTMLElement).closest('[data-overlay-interactive]'); + const isOverlayAtPoint = (x: number, y: number) => + !!document.elementFromPoint(x, y)?.closest('[data-overlay-interactive]'); + + // Pointer event interception: track pointers that start on overlays and intercept the entire gesture. + const overlayPointers = new Set(); + const interceptedPointers = new Set(); + const interceptOverlayPointerDown = (event: PointerEvent) => { + if (isOverlayEvent(event) || isOverlayAtPoint(event.clientX, event.clientY)) { + overlayPointers.add(event.pointerId); + interceptedPointers.add(event.pointerId); + event.stopPropagation(); + } else if (overlayPointers.size > 0) { + // Split gesture (e.g. pinch with one finger on overlay) — intercept entirely. + interceptedPointers.add(event.pointerId); + event.stopPropagation(); } - assetViewerManager.cancelZoomAnimation(); }; + const interceptOverlayPointerEvent = (event: PointerEvent) => { + if (interceptedPointers.has(event.pointerId)) { + event.stopPropagation(); + } + }; + const interceptOverlayPointerEnd = (event: PointerEvent) => { + overlayPointers.delete(event.pointerId); + if (interceptedPointers.delete(event.pointerId)) { + event.stopPropagation(); + } + }; + node.addEventListener('pointerdown', interceptOverlayPointerDown, { capture: true, signal }); + node.addEventListener('pointermove', interceptOverlayPointerEvent, { capture: true, signal }); + node.addEventListener('pointerup', interceptOverlayPointerEnd, { capture: true, signal }); + node.addEventListener('pointerleave', interceptOverlayPointerEnd, { capture: true, signal }); - node.addEventListener('wheel', onInteractionStart, { capture: true }); - node.addEventListener('pointerdown', onInteractionStart, { capture: true }); + // Touch event interception for overlay touches or split gestures (pinch across container boundary). + // Once intercepted, stays intercepted until all fingers are lifted. + let touchGestureIntercepted = false; + const interceptOverlayTouchEvent = (event: Event) => { + if (touchGestureIntercepted) { + event.stopPropagation(); + return; + } + const { touches, targetTouches } = asTouchEvent(event); + if (touches && targetTouches) { + if (touches.length > targetTouches.length) { + touchGestureIntercepted = true; + event.stopPropagation(); + return; + } + for (const touch of touches) { + if (isOverlayAtPoint(touch.clientX, touch.clientY)) { + touchGestureIntercepted = true; + event.stopPropagation(); + return; + } + } + } else if (isOverlayEvent(event)) { + event.stopPropagation(); + } + }; + const resetTouchGesture = (event: Event) => { + const { touches } = asTouchEvent(event); + if (touches.length === 0) { + touchGestureIntercepted = false; + } + }; + node.addEventListener('touchstart', interceptOverlayTouchEvent, { capture: true, signal }); + node.addEventListener('touchmove', interceptOverlayTouchEvent, { capture: true, signal }); + node.addEventListener('touchend', resetTouchGesture, { capture: true, signal }); - // Suppress Safari's synthetic dblclick on double-tap. Without this, zoom-image's touchstart - // handler zooms to maxZoom (10x), then Safari's synthetic dblclick triggers photo-viewer's - // handler which conflicts. Chrome does not fire synthetic dblclick on touch. + // Wheel and dblclick interception on overlay elements. + // Dblclick also intercepted for all touch double-taps (Safari fires synthetic dblclick + // on double-tap, which conflicts with zoom-image's touch zoom handler). let lastPointerWasTouch = false; - const trackPointerType = (event: PointerEvent) => { - lastPointerWasTouch = event.pointerType === 'touch'; - }; - const suppressTouchDblClick = (event: MouseEvent) => { - if (lastPointerWasTouch) { - event.stopImmediatePropagation(); - } - }; - node.addEventListener('pointerdown', trackPointerType, { capture: true }); - node.addEventListener('dblclick', suppressTouchDblClick, { capture: true }); + node.addEventListener('pointerdown', (event) => (lastPointerWasTouch = event.pointerType === 'touch'), { + capture: true, + signal, + }); + node.addEventListener( + 'wheel', + (event) => { + if (isOverlayEvent(event)) { + event.stopPropagation(); + } + }, + { capture: true, signal }, + ); + node.addEventListener( + 'dblclick', + (event) => { + if (lastPointerWasTouch || isOverlayEvent(event)) { + event.stopImmediatePropagation(); + } + }, + { capture: true, signal }, + ); - // Allow zoomed content to render outside the container bounds + if (options?.zoomTarget) { + options.zoomTarget.style.willChange = 'transform'; + } node.style.overflow = 'visible'; - // Prevent browser handling of touch gestures so zoom-image can manage them node.style.touchAction = 'none'; return { - update(newOptions?: { disabled?: boolean }) { + update(newOptions?: { zoomTarget?: HTMLElement }) { options = newOptions; + if (newOptions?.zoomTarget !== undefined) { + zoomInstance.setState({ zoomTarget: newOptions.zoomTarget }); + } }, destroy() { + controller.abort(); + if (options?.zoomTarget) { + options.zoomTarget.style.willChange = ''; + } for (const unsubscribe of unsubscribes) { unsubscribe(); } - node.removeEventListener('wheel', onInteractionStart, { capture: true }); - node.removeEventListener('pointerdown', onInteractionStart, { capture: true }); - node.removeEventListener('pointerdown', trackPointerType, { capture: true }); - node.removeEventListener('dblclick', suppressTouchDblClick, { capture: true }); zoomInstance.cleanup(); }, }; diff --git a/web/src/lib/components/AdaptiveImage.svelte b/web/src/lib/components/AdaptiveImage.svelte index fad4d49d1b..90c9328cf8 100644 --- a/web/src/lib/components/AdaptiveImage.svelte +++ b/web/src/lib/components/AdaptiveImage.svelte @@ -7,7 +7,7 @@ import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { getAssetUrls } from '$lib/utils'; import { AdaptiveImageLoader, type QualityList } from '$lib/utils/adaptive-image-loader.svelte'; - import { scaleToCover, scaleToFit } from '$lib/utils/container-utils'; + import { scaleToCover, scaleToFit, type Size } from '$lib/utils/container-utils'; import { getAltText } from '$lib/utils/thumbnail-util'; import { toTimelineAsset } from '$lib/utils/timeline-util'; import type { AssetResponseDto, SharedLinkResponseDto } from '@immich/sdk'; @@ -17,10 +17,7 @@ asset: AssetResponseDto; sharedLink?: SharedLinkResponseDto; objectFit?: 'contain' | 'cover'; - container: { - width: number; - height: number; - }; + container: Size; onUrlChange?: (url: string) => void; onImageReady?: () => void; onError?: () => void; @@ -149,81 +146,66 @@ (quality.preview === 'success' ? previewElement : undefined) ?? (quality.thumbnail === 'success' ? thumbnailElement : undefined); }); - - const zoomTransform = $derived.by(() => { - const { currentZoom, currentPositionX, currentPositionY } = assetViewerManager.zoomState; - if (currentZoom === 1 && currentPositionX === 0 && currentPositionY === 0) { - return undefined; - } - return `translate(${currentPositionX}px, ${currentPositionY}px) scale(${currentZoom})`; - });
{@render backdrop?.()} - -
-
- {#if show.alphaBackground} - - {/if} +
+ {#if show.alphaBackground} + + {/if} - {#if show.thumbhash} - {#if asset.thumbhash} - - - {:else if show.spinner} - - {/if} + {#if show.thumbhash} + {#if asset.thumbhash} + + + {:else if show.spinner} + {/if} + {/if} - {#if show.thumbnail} - - {/if} + {#if show.thumbnail} + + {/if} - {#if show.brokenAsset} - - {/if} + {#if show.brokenAsset} + + {/if} - {#if show.preview} - - {/if} + {#if show.preview} + + {/if} - {#if show.original} - - {/if} -
+ {#if show.original} + + {/if}
diff --git a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte index ea2babfc11..8f7103c2a3 100644 --- a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte +++ b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte @@ -12,12 +12,12 @@ import { onDestroy, onMount, tick } from 'svelte'; import { t } from 'svelte-i18n'; - interface Props { + type Props = { htmlElement: HTMLImageElement | HTMLVideoElement; containerWidth: number; containerHeight: number; assetId: string; - } + }; let { htmlElement, containerWidth, containerHeight, assetId }: Props = $props(); @@ -304,6 +304,7 @@
+ import { mediaQueryManager } from '$lib/stores/media-query-manager.svelte'; import type { OcrBox } from '$lib/utils/ocr-utils'; import { calculateBoundingBoxMatrix, calculateFittedFontSize } from '$lib/utils/ocr-utils'; @@ -8,6 +9,7 @@ let { ocrBox }: Props = $props(); + const isTouch = $derived(mediaQueryManager.pointerCoarse); const dimensions = $derived(calculateBoundingBoxMatrix(ocrBox.points)); const transform = $derived(`matrix3d(${dimensions.matrix.join(',')})`); @@ -15,13 +17,23 @@ calculateFittedFontSize(ocrBox.text, dimensions.width, dimensions.height, ocrBox.verticalMode) + 'px', ); + const handleSelectStart = (event: Event) => { + const target = event.currentTarget as HTMLElement; + requestAnimationFrame(() => { + const selection = globalThis.getSelection(); + if (selection) { + selection.selectAllChildren(target); + } + }); + }; + const verticalStyle = $derived.by(() => { switch (ocrBox.verticalMode) { case 'cjk': { - return ' writing-mode: vertical-rl;'; + return 'writing-mode: vertical-rl;'; } case 'rotated': { - return ' writing-mode: vertical-rl; text-orientation: sideways;'; + return 'writing-mode: vertical-rl; text-orientation: sideways;'; } default: { return ''; @@ -30,17 +42,23 @@ }); -
-
- {ocrBox.text} -
+
+ {ocrBox.text}
diff --git a/web/src/lib/components/asset-viewer/photo-sphere-viewer-adapter.svelte b/web/src/lib/components/asset-viewer/photo-sphere-viewer-adapter.svelte index 926383d9c2..d46b5e0dc1 100644 --- a/web/src/lib/components/asset-viewer/photo-sphere-viewer-adapter.svelte +++ b/web/src/lib/components/asset-viewer/photo-sphere-viewer-adapter.svelte @@ -128,10 +128,8 @@ } const boxes = getOcrBoundingBoxes(ocrData, { - contentWidth: viewer.state.textureData.panoData.croppedWidth, - contentHeight: viewer.state.textureData.panoData.croppedHeight, - offsetX: 0, - offsetY: 0, + width: viewer.state.textureData.panoData.croppedWidth, + height: viewer.state.textureData.panoData.croppedHeight, }); for (const [index, box] of boxes.entries()) { diff --git a/web/src/lib/components/asset-viewer/photo-viewer.svelte b/web/src/lib/components/asset-viewer/photo-viewer.svelte index a42eab6c4f..a3c560ef8d 100644 --- a/web/src/lib/components/asset-viewer/photo-viewer.svelte +++ b/web/src/lib/components/asset-viewer/photo-viewer.svelte @@ -13,7 +13,7 @@ import { SlideshowLook, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store'; import { handlePromiseError } from '$lib/utils'; import { canCopyImageToClipboard, copyImageToClipboard } from '$lib/utils/asset-utils'; - import { getNaturalSize, scaleToFit, type ContentMetrics } from '$lib/utils/container-utils'; + import { getNaturalSize, scaleToFit, type Size } from '$lib/utils/container-utils'; import { handleError } from '$lib/utils/handle-error'; import { getOcrBoundingBoxes } from '$lib/utils/ocr-utils'; import { getBoundingBox, type BoundingBox } from '$lib/utils/people-utils'; @@ -24,14 +24,14 @@ import { t } from 'svelte-i18n'; import type { AssetCursor } from './asset-viewer.svelte'; - interface Props { + type Props = { cursor: AssetCursor; element?: HTMLDivElement; sharedLink?: SharedLinkResponseDto; onReady?: () => void; onError?: () => void; onSwipe?: (event: SwipeCustomEvent) => void; - } + }; let { cursor, element = $bindable(), sharedLink, onReady, onError, onSwipe }: Props = $props(); @@ -66,23 +66,15 @@ height: containerHeight, }); - const overlayMetrics = $derived.by((): ContentMetrics => { + const overlaySize = $derived.by((): Size => { if (!assetViewerManager.imgRef || !visibleImageReady) { - return { contentWidth: 0, contentHeight: 0, offsetX: 0, offsetY: 0 }; + return { width: 0, height: 0 }; } - const natural = getNaturalSize(assetViewerManager.imgRef); - const scaled = scaleToFit(natural, { width: containerWidth, height: containerHeight }); - - return { - contentWidth: scaled.width, - contentHeight: scaled.height, - offsetX: 0, - offsetY: 0, - }; + return scaleToFit(getNaturalSize(assetViewerManager.imgRef), { width: containerWidth, height: containerHeight }); }); - const highlightedBoxes = $derived(getBoundingBox($boundingBoxesArray, overlayMetrics)); + const highlightedBoxes = $derived(getBoundingBox($boundingBoxesArray, overlaySize)); const isHighlighting = $derived(highlightedBoxes.length > 0); let visibleBoxes = $state([]); @@ -94,7 +86,7 @@ } }); - const ocrBoxes = $derived(ocrManager.showOverlay ? getOcrBoundingBoxes(ocrManager.data, overlayMetrics) : []); + const ocrBoxes = $derived(ocrManager.showOverlay ? getOcrBoundingBoxes(ocrManager.data, overlaySize) : []); const onCopy = async () => { if (!canCopyImageToClipboard() || !assetViewerManager.imgRef) { @@ -162,6 +154,8 @@ $slideshowState !== SlideshowState.None && $slideshowLook === SlideshowLook.BlurredBackground && !!asset.thumbhash, ); + let adaptiveImage = $state(); + const faceToNameMap = $derived.by(() => { // eslint-disable-next-line svelte/prefer-svelte-reactivity const map = new Map(); @@ -192,7 +186,7 @@ const mouseX = (event.clientX - containerRect.left - contentOffsetX * currentZoom - currentPositionX) / currentZoom; const mouseY = (event.clientY - containerRect.top - contentOffsetY * currentZoom - currentPositionY) / currentZoom; - const faceBoxes = getBoundingBox(faces, overlayMetrics); + const faceBoxes = getBoundingBox(faces, overlaySize); for (const [index, box] of faceBoxes.entries()) { if (mouseX >= box.left && mouseX <= box.left + box.width && mouseY >= box.top && mouseY <= box.top + box.height) { @@ -226,7 +220,7 @@ ondblclick={onZoom} onmousemove={handleImageMouseMove} onmouseleave={handleImageMouseLeave} - use:zoomImageAction={{ disabled: assetViewerManager.isFaceEditMode || ocrManager.showOverlay }} + use:zoomImageAction={{ zoomTarget: adaptiveImage }} {...useSwipe((event) => onSwipe?.(event))} > {#snippet backdrop()} {#if blurredSlideshow} diff --git a/web/src/lib/utils/container-utils.spec.ts b/web/src/lib/utils/container-utils.spec.ts index 802ed24e40..d6a1efbe6a 100644 --- a/web/src/lib/utils/container-utils.spec.ts +++ b/web/src/lib/utils/container-utils.spec.ts @@ -1,4 +1,11 @@ -import { getContentMetrics, getNaturalSize, scaleToFit } from '$lib/utils/container-utils'; +import { + getContentMetrics, + getNaturalSize, + mapNormalizedRectToContent, + mapNormalizedToContent, + scaleToCover, + scaleToFit, +} from '$lib/utils/container-utils'; const mockImage = (props: { naturalWidth: number; @@ -92,3 +99,81 @@ describe('getNaturalSize', () => { expect(getNaturalSize(video)).toEqual({ width: 1920, height: 1080 }); }); }); + +describe('scaleToCover', () => { + it('should scale up to cover container when image is smaller', () => { + expect(scaleToCover({ width: 400, height: 300 }, { width: 800, height: 600 })).toEqual({ + width: 800, + height: 600, + }); + }); + + it('should use height scale when image is wider than container', () => { + expect(scaleToCover({ width: 2000, height: 1000 }, { width: 800, height: 600 })).toEqual({ + width: 1200, + height: 600, + }); + }); + + it('should use width scale when image is taller than container', () => { + expect(scaleToCover({ width: 1000, height: 2000 }, { width: 800, height: 600 })).toEqual({ + width: 800, + height: 1600, + }); + }); +}); + +describe('mapNormalizedToContent', () => { + const metrics = { contentWidth: 800, contentHeight: 400, offsetX: 0, offsetY: 100 }; + + it('should map top-left corner', () => { + expect(mapNormalizedToContent({ x: 0, y: 0 }, metrics)).toEqual({ x: 0, y: 100 }); + }); + + it('should map bottom-right corner', () => { + expect(mapNormalizedToContent({ x: 1, y: 1 }, metrics)).toEqual({ x: 800, y: 500 }); + }); + + it('should map center point', () => { + expect(mapNormalizedToContent({ x: 0.5, y: 0.5 }, metrics)).toEqual({ x: 400, y: 300 }); + }); + + it('should apply offsets correctly for letterboxed content', () => { + const letterboxed = { contentWidth: 300, contentHeight: 600, offsetX: 250, offsetY: 0 }; + expect(mapNormalizedToContent({ x: 0, y: 0 }, letterboxed)).toEqual({ x: 250, y: 0 }); + expect(mapNormalizedToContent({ x: 1, y: 1 }, letterboxed)).toEqual({ x: 550, y: 600 }); + }); + + it('should accept Size (zero offsets)', () => { + const size = { width: 800, height: 400 }; + expect(mapNormalizedToContent({ x: 0, y: 0 }, size)).toEqual({ x: 0, y: 0 }); + expect(mapNormalizedToContent({ x: 1, y: 1 }, size)).toEqual({ x: 800, y: 400 }); + expect(mapNormalizedToContent({ x: 0.5, y: 0.5 }, size)).toEqual({ x: 400, y: 200 }); + }); +}); + +describe('mapNormalizedRectToContent', () => { + const metrics = { contentWidth: 800, contentHeight: 400, offsetX: 0, offsetY: 100 }; + + it('should map a normalized rect to content pixel coordinates', () => { + const rect = mapNormalizedRectToContent({ x: 0.25, y: 0.25 }, { x: 0.75, y: 0.75 }, metrics); + expect(rect).toEqual({ left: 200, top: 200, width: 400, height: 200 }); + }); + + it('should map full image rect', () => { + const rect = mapNormalizedRectToContent({ x: 0, y: 0 }, { x: 1, y: 1 }, metrics); + expect(rect).toEqual({ left: 0, top: 100, width: 800, height: 400 }); + }); + + it('should handle letterboxed content with horizontal offsets', () => { + const letterboxed = { contentWidth: 300, contentHeight: 600, offsetX: 250, offsetY: 0 }; + const rect = mapNormalizedRectToContent({ x: 0, y: 0 }, { x: 1, y: 1 }, letterboxed); + expect(rect).toEqual({ left: 250, top: 0, width: 300, height: 600 }); + }); + + it('should accept Size (zero offsets)', () => { + const size = { width: 800, height: 400 }; + const rect = mapNormalizedRectToContent({ x: 0.25, y: 0.25 }, { x: 0.75, y: 0.75 }, size); + expect(rect).toEqual({ left: 200, top: 100, width: 400, height: 200 }); + }); +}); diff --git a/web/src/lib/utils/container-utils.ts b/web/src/lib/utils/container-utils.ts index ffa2fae769..36e260fcc7 100644 --- a/web/src/lib/utils/container-utils.ts +++ b/web/src/lib/utils/container-utils.ts @@ -1,14 +1,35 @@ -export interface ContentMetrics { +// Coordinate spaces used throughout the viewer: +// +// "Normalized": 0–1 range, (0,0) = top-left, (1,1) = bottom-right. Resolution-independent. +// Example: OCR coordinates, or face coords after dividing by metadata dimensions. +// +// "Content": pixel position within the container after scaling (scaleToFit/scaleToCover) +// and centering. Used for DOM overlay positioning (face boxes, OCR text). +// +// "Natural": pixel position in the original full-resolution image file (e.g. 4000×3000). +// Used when cropping or drawing on the source image. +// +// "Metadata pixel space": coordinates from face detection / OCR models, in pixels relative +// to face.imageWidth/imageHeight. Divide by those dimensions to get normalized coords. + +export type Point = { + x: number; + y: number; +}; + +export type Size = { + width: number; + height: number; +}; + +export type ContentMetrics = { contentWidth: number; contentHeight: number; offsetX: number; offsetY: number; -} +}; -export const scaleToCover = ( - dimensions: { width: number; height: number }, - container: { width: number; height: number }, -): { width: number; height: number } => { +export const scaleToCover = (dimensions: Size, container: Size): Size => { const scaleX = container.width / dimensions.width; const scaleY = container.height / dimensions.height; const scale = Math.max(scaleX, scaleY); @@ -18,10 +39,7 @@ export const scaleToCover = ( }; }; -export const scaleToFit = ( - dimensions: { width: number; height: number }, - container: { width: number; height: number }, -): { width: number; height: number } => { +export const scaleToFit = (dimensions: Size, container: Size): Size => { const scaleX = container.width / dimensions.width; const scaleY = container.height / dimensions.height; const scale = Math.min(scaleX, scaleY); @@ -31,14 +49,14 @@ export const scaleToFit = ( }; }; -const getElementSize = (element: HTMLImageElement | HTMLVideoElement): { width: number; height: number } => { +const getElementSize = (element: HTMLImageElement | HTMLVideoElement): Size => { if (element instanceof HTMLVideoElement) { return { width: element.clientWidth, height: element.clientHeight }; } return { width: element.width, height: element.height }; }; -export const getNaturalSize = (element: HTMLImageElement | HTMLVideoElement): { width: number; height: number } => { +export const getNaturalSize = (element: HTMLImageElement | HTMLVideoElement): Size => { if (element instanceof HTMLVideoElement) { return { width: element.videoWidth, height: element.videoHeight }; } @@ -56,3 +74,38 @@ export const getContentMetrics = (element: HTMLImageElement | HTMLVideoElement): offsetY: (client.height - contentHeight) / 2, }; }; + +export function mapNormalizedToContent(point: Point, sizeOrMetrics: Size | ContentMetrics): Point { + if ('contentWidth' in sizeOrMetrics) { + return { + x: point.x * sizeOrMetrics.contentWidth + sizeOrMetrics.offsetX, + y: point.y * sizeOrMetrics.contentHeight + sizeOrMetrics.offsetY, + }; + } + return { + x: point.x * sizeOrMetrics.width, + y: point.y * sizeOrMetrics.height, + }; +} + +export type Rect = { + top: number; + left: number; + width: number; + height: number; +}; + +export function mapNormalizedRectToContent( + topLeft: Point, + bottomRight: Point, + sizeOrMetrics: Size | ContentMetrics, +): Rect { + const tl = mapNormalizedToContent(topLeft, sizeOrMetrics); + const br = mapNormalizedToContent(bottomRight, sizeOrMetrics); + return { + top: tl.y, + left: tl.x, + width: br.x - tl.x, + height: br.y - tl.y, + }; +} diff --git a/web/src/lib/utils/ocr-utils.spec.ts b/web/src/lib/utils/ocr-utils.spec.ts index c3ce70394d..c88936fddf 100644 --- a/web/src/lib/utils/ocr-utils.spec.ts +++ b/web/src/lib/utils/ocr-utils.spec.ts @@ -1,5 +1,5 @@ import type { OcrBoundingBox } from '$lib/stores/ocr.svelte'; -import type { ContentMetrics } from '$lib/utils/container-utils'; +import type { Size } from '$lib/utils/container-utils'; import { getOcrBoundingBoxes } from '$lib/utils/ocr-utils'; describe('getOcrBoundingBoxes', () => { @@ -21,9 +21,9 @@ describe('getOcrBoundingBoxes', () => { text: 'hello', }, ]; - const metrics: ContentMetrics = { contentWidth: 1000, contentHeight: 500, offsetX: 0, offsetY: 0 }; + const imageSize: Size = { width: 1000, height: 500 }; - const boxes = getOcrBoundingBoxes(ocrData, metrics); + const boxes = getOcrBoundingBoxes(ocrData, imageSize); expect(boxes).toHaveLength(1); expect(boxes[0].id).toBe('box1'); @@ -37,7 +37,7 @@ describe('getOcrBoundingBoxes', () => { ]); }); - it('should apply offsets for letterboxed images', () => { + it('should map full-image box to full display area', () => { const ocrData: OcrBoundingBox[] = [ { id: 'box1', @@ -55,21 +55,20 @@ describe('getOcrBoundingBoxes', () => { text: 'test', }, ]; - const metrics: ContentMetrics = { contentWidth: 600, contentHeight: 400, offsetX: 100, offsetY: 50 }; + const imageSize: Size = { width: 600, height: 400 }; - const boxes = getOcrBoundingBoxes(ocrData, metrics); + const boxes = getOcrBoundingBoxes(ocrData, imageSize); expect(boxes[0].points).toEqual([ - { x: 100, y: 50 }, - { x: 700, y: 50 }, - { x: 700, y: 450 }, - { x: 100, y: 450 }, + { x: 0, y: 0 }, + { x: 600, y: 0 }, + { x: 600, y: 400 }, + { x: 0, y: 400 }, ]); }); it('should return empty array for empty input', () => { - const metrics: ContentMetrics = { contentWidth: 800, contentHeight: 600, offsetX: 0, offsetY: 0 }; - expect(getOcrBoundingBoxes([], metrics)).toEqual([]); + expect(getOcrBoundingBoxes([], { width: 800, height: 600 })).toEqual([]); }); it('should handle multiple boxes', () => { @@ -105,9 +104,9 @@ describe('getOcrBoundingBoxes', () => { text: 'second', }, ]; - const metrics: ContentMetrics = { contentWidth: 200, contentHeight: 200, offsetX: 0, offsetY: 0 }; + const imageSize: Size = { width: 200, height: 200 }; - const boxes = getOcrBoundingBoxes(ocrData, metrics); + const boxes = getOcrBoundingBoxes(ocrData, imageSize); expect(boxes).toHaveLength(2); expect(boxes[0].text).toBe('first'); diff --git a/web/src/lib/utils/ocr-utils.ts b/web/src/lib/utils/ocr-utils.ts index c483eb9551..2bf23bff2d 100644 --- a/web/src/lib/utils/ocr-utils.ts +++ b/web/src/lib/utils/ocr-utils.ts @@ -1,23 +1,19 @@ import type { OcrBoundingBox } from '$lib/stores/ocr.svelte'; -import type { ContentMetrics } from '$lib/utils/container-utils'; +import { mapNormalizedToContent, type Point, type Size } from '$lib/utils/container-utils'; import { clamp } from 'lodash-es'; - -export type Point = { - x: number; - y: number; -}; +export type { Point } from '$lib/utils/container-utils'; const distance = (p1: Point, p2: Point) => Math.hypot(p2.x - p1.x, p2.y - p1.y); export type VerticalMode = 'none' | 'cjk' | 'rotated'; -export interface OcrBox { +export type OcrBox = { id: string; points: Point[]; text: string; confidence: number; verticalMode: VerticalMode; -} +}; const CJK_PATTERN = /[\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\uAC00-\uD7AF\uFF00-\uFFEF]/; @@ -38,7 +34,7 @@ const getVerticalMode = (width: number, height: number, text: string): VerticalM * @param points - Array of 4 corner points of the bounding box * @returns 4x4 matrix to transform the div with text onto the polygon defined by the corner points, and size to set on the source div. */ -export const calculateBoundingBoxMatrix = (points: Point[]): { matrix: number[]; width: number; height: number } => { +export const calculateBoundingBoxMatrix = (points: Point[]): Size & { matrix: number[] } => { const [topLeft, topRight, bottomRight, bottomLeft] = points; const width = Math.max(distance(topLeft, topRight), distance(bottomLeft, bottomRight)); @@ -163,7 +159,7 @@ export const calculateFittedFontSize = ( return clamp(Math.min(scaleFromWidth, scaleFromHeight), MIN_FONT_SIZE, MAX_FONT_SIZE); }; -export const getOcrBoundingBoxes = (ocrData: OcrBoundingBox[], metrics: ContentMetrics): OcrBox[] => { +export const getOcrBoundingBoxes = (ocrData: OcrBoundingBox[], imageSize: Size): OcrBox[] => { const boxes: OcrBox[] = []; for (const ocr of ocrData) { const points = [ @@ -171,10 +167,7 @@ export const getOcrBoundingBoxes = (ocrData: OcrBoundingBox[], metrics: ContentM { x: ocr.x2, y: ocr.y2 }, { x: ocr.x3, y: ocr.y3 }, { x: ocr.x4, y: ocr.y4 }, - ].map((point) => ({ - x: point.x * metrics.contentWidth + metrics.offsetX, - y: point.y * metrics.contentHeight + metrics.offsetY, - })); + ].map((point) => mapNormalizedToContent(point, imageSize)); const boxWidth = Math.max(distance(points[0], points[1]), distance(points[3], points[2])); const boxHeight = Math.max(distance(points[0], points[3]), distance(points[1], points[2])); @@ -188,7 +181,7 @@ export const getOcrBoundingBoxes = (ocrData: OcrBoundingBox[], metrics: ContentM }); } - const rowThreshold = metrics.contentHeight * 0.02; + const rowThreshold = imageSize.height * 0.02; boxes.sort((a, b) => { const yDifference = a.points[0].y - b.points[0].y; if (Math.abs(yDifference) < rowThreshold) { diff --git a/web/src/lib/utils/people-utils.spec.ts b/web/src/lib/utils/people-utils.spec.ts index 80371bd9c4..f27a1855b5 100644 --- a/web/src/lib/utils/people-utils.spec.ts +++ b/web/src/lib/utils/people-utils.spec.ts @@ -1,5 +1,5 @@ import type { Faces } from '$lib/stores/people.store'; -import type { ContentMetrics } from '$lib/utils/container-utils'; +import type { Size } from '$lib/utils/container-utils'; import { getBoundingBox } from '$lib/utils/people-utils'; const makeFace = (overrides: Partial = {}): Faces => ({ @@ -16,21 +16,21 @@ const makeFace = (overrides: Partial = {}): Faces => ({ describe('getBoundingBox', () => { it('should scale face coordinates to display dimensions', () => { const face = makeFace(); - const metrics: ContentMetrics = { contentWidth: 800, contentHeight: 600, offsetX: 0, offsetY: 0 }; + const imageSize: Size = { width: 800, height: 600 }; - const boxes = getBoundingBox([face], metrics); + const boxes = getBoundingBox([face], imageSize); expect(boxes).toHaveLength(1); expect(boxes[0]).toEqual({ id: 'face-1', - top: Math.round(600 * (750 / 3000)), - left: Math.round(800 * (1000 / 4000)), - width: Math.round(800 * (2000 / 4000) - 800 * (1000 / 4000)), - height: Math.round(600 * (1500 / 3000) - 600 * (750 / 3000)), + top: 600 * (750 / 3000), + left: 800 * (1000 / 4000), + width: 800 * (2000 / 4000) - 800 * (1000 / 4000), + height: 600 * (1500 / 3000) - 600 * (750 / 3000), }); }); - it('should apply offsets for letterboxed display', () => { + it('should map full-image face to full display area', () => { const face = makeFace({ imageWidth: 1000, imageHeight: 1000, @@ -39,49 +39,21 @@ describe('getBoundingBox', () => { boundingBoxX2: 1000, boundingBoxY2: 1000, }); - const metrics: ContentMetrics = { contentWidth: 600, contentHeight: 600, offsetX: 100, offsetY: 0 }; + const imageSize: Size = { width: 600, height: 600 }; - const boxes = getBoundingBox([face], metrics); + const boxes = getBoundingBox([face], imageSize); expect(boxes[0]).toEqual({ id: 'face-1', top: 0, - left: 100, + left: 0, width: 600, height: 600, }); }); - it('should handle zoom by pre-scaled metrics', () => { - const face = makeFace({ - imageWidth: 1000, - imageHeight: 1000, - boundingBoxX1: 0, - boundingBoxY1: 0, - boundingBoxX2: 500, - boundingBoxY2: 500, - }); - const metrics: ContentMetrics = { - contentWidth: 1600, - contentHeight: 1200, - offsetX: -200, - offsetY: -100, - }; - - const boxes = getBoundingBox([face], metrics); - - expect(boxes[0]).toEqual({ - id: 'face-1', - top: -100, - left: -200, - width: 800, - height: 600, - }); - }); - it('should return empty array for empty faces', () => { - const metrics: ContentMetrics = { contentWidth: 800, contentHeight: 600, offsetX: 0, offsetY: 0 }; - expect(getBoundingBox([], metrics)).toEqual([]); + expect(getBoundingBox([], { width: 800, height: 600 })).toEqual([]); }); it('should handle multiple faces', () => { @@ -89,9 +61,8 @@ describe('getBoundingBox', () => { makeFace({ id: 'face-1', boundingBoxX1: 0, boundingBoxY1: 0, boundingBoxX2: 1000, boundingBoxY2: 1000 }), makeFace({ id: 'face-2', boundingBoxX1: 2000, boundingBoxY1: 1500, boundingBoxX2: 3000, boundingBoxY2: 2500 }), ]; - const metrics: ContentMetrics = { contentWidth: 800, contentHeight: 600, offsetX: 0, offsetY: 0 }; - const boxes = getBoundingBox(faces, metrics); + const boxes = getBoundingBox(faces, { width: 800, height: 600 }); expect(boxes).toHaveLength(2); expect(boxes[0].left).toBeLessThan(boxes[1].left); diff --git a/web/src/lib/utils/people-utils.ts b/web/src/lib/utils/people-utils.ts index b8fb8973e6..f7f9f4ee42 100644 --- a/web/src/lib/utils/people-utils.ts +++ b/web/src/lib/utils/people-utils.ts @@ -1,37 +1,21 @@ import type { Faces } from '$lib/stores/people.store'; import { getAssetMediaUrl } from '$lib/utils'; -import type { ContentMetrics } from '$lib/utils/container-utils'; +import { mapNormalizedRectToContent, type Rect, type Size } from '$lib/utils/container-utils'; import { AssetTypeEnum, type AssetFaceResponseDto } from '@immich/sdk'; -export interface BoundingBox { - id: string; - top: number; - left: number; - width: number; - height: number; -} +export type BoundingBox = Rect & { id: string }; -export const getBoundingBox = (faces: Faces[], metrics: ContentMetrics): BoundingBox[] => { +export const getBoundingBox = (faces: Faces[], imageSize: Size): BoundingBox[] => { const boxes: BoundingBox[] = []; for (const face of faces) { - const scaleX = metrics.contentWidth / face.imageWidth; - const scaleY = metrics.contentHeight / face.imageHeight; + const rect = mapNormalizedRectToContent( + { x: face.boundingBoxX1 / face.imageWidth, y: face.boundingBoxY1 / face.imageHeight }, + { x: face.boundingBoxX2 / face.imageWidth, y: face.boundingBoxY2 / face.imageHeight }, + imageSize, + ); - const coordinates = { - x1: scaleX * face.boundingBoxX1 + metrics.offsetX, - x2: scaleX * face.boundingBoxX2 + metrics.offsetX, - y1: scaleY * face.boundingBoxY1 + metrics.offsetY, - y2: scaleY * face.boundingBoxY2 + metrics.offsetY, - }; - - boxes.push({ - id: face.id, - top: Math.round(coordinates.y1), - left: Math.round(coordinates.x1), - width: Math.round(coordinates.x2 - coordinates.x1), - height: Math.round(coordinates.y2 - coordinates.y1), - }); + boxes.push({ id: face.id, ...rect }); } return boxes; From 7d4286bbc5ff2e56ec98479da8a42ec8cba22fae Mon Sep 17 00:00:00 2001 From: Min Idzelis Date: Mon, 30 Mar 2026 20:22:10 -0400 Subject: [PATCH 067/156] fix(web): add drop shadow to asset viewer nav bar and prevent button shrinking (#27404) - Add subtle drop shadow to the asset viewer nav bar for better visual separation from the image behind it - Add drop shadow to the OCR text recognition button in the lower right - Prevent nav bar action buttons from shrinking to nothing by adding *:shrink-0 to the flex container, with p-1/-m-1 to avoid clipping focus outlines Change-Id: I61cdc0ec66a65cde1c95b40c2c5428006a6a6964 --- .../components/asset-viewer/asset-viewer-nav-bar.svelte | 7 +++++-- web/src/lib/components/asset-viewer/asset-viewer.svelte | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte index 29626ea265..860c38d71c 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte @@ -104,13 +104,16 @@
-
+
{#if assetViewerManager.isImageLoading} {#snippet child({ props })} diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte index 1072104d4d..9d5530df0f 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte @@ -564,7 +564,7 @@ {/if} {#if showOcrButton} -
+
{/if} From 6b1dd6f680ce49bc6a3acafa7287816171ef240f Mon Sep 17 00:00:00 2001 From: Yaros Date: Tue, 31 Mar 2026 04:24:56 +0200 Subject: [PATCH 068/156] fix(mobile): favorite button not updating state (#27271) --- .../action_buttons/favorite_action_button.widget.dart | 8 ++++++++ .../action_buttons/unfavorite_action_button.widget.dart | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/mobile/lib/presentation/widgets/action_buttons/favorite_action_button.widget.dart b/mobile/lib/presentation/widgets/action_buttons/favorite_action_button.widget.dart index ba2491365d..07ace7e631 100644 --- a/mobile/lib/presentation/widgets/action_buttons/favorite_action_button.widget.dart +++ b/mobile/lib/presentation/widgets/action_buttons/favorite_action_button.widget.dart @@ -2,8 +2,10 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/enums.dart'; +import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/extensions/translate_extensions.dart'; import 'package:immich_mobile/presentation/widgets/action_buttons/base_action_button.widget.dart'; +import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart'; import 'package:immich_mobile/providers/infrastructure/action.provider.dart'; import 'package:immich_mobile/providers/timeline/multiselect.provider.dart'; import 'package:immich_mobile/widgets/common/immich_toast.dart'; @@ -23,6 +25,12 @@ class FavoriteActionButton extends ConsumerWidget { final result = await ref.read(actionProvider.notifier).favorite(source); if (source == ActionSource.viewer) { + if (result.success) { + final currentAsset = ref.read(assetViewerProvider).currentAsset; + if (currentAsset is RemoteAsset && !currentAsset.isFavorite) { + ref.read(assetViewerProvider.notifier).setAsset(currentAsset.copyWith(isFavorite: true)); + } + } return; } diff --git a/mobile/lib/presentation/widgets/action_buttons/unfavorite_action_button.widget.dart b/mobile/lib/presentation/widgets/action_buttons/unfavorite_action_button.widget.dart index ec5513e0a8..5e88735d9c 100644 --- a/mobile/lib/presentation/widgets/action_buttons/unfavorite_action_button.widget.dart +++ b/mobile/lib/presentation/widgets/action_buttons/unfavorite_action_button.widget.dart @@ -2,8 +2,10 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/enums.dart'; +import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/extensions/translate_extensions.dart'; import 'package:immich_mobile/presentation/widgets/action_buttons/base_action_button.widget.dart'; +import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart'; import 'package:immich_mobile/providers/infrastructure/action.provider.dart'; import 'package:immich_mobile/providers/timeline/multiselect.provider.dart'; import 'package:immich_mobile/widgets/common/immich_toast.dart'; @@ -23,6 +25,12 @@ class UnFavoriteActionButton extends ConsumerWidget { final result = await ref.read(actionProvider.notifier).unFavorite(source); if (source == ActionSource.viewer) { + if (result.success) { + final currentAsset = ref.read(assetViewerProvider).currentAsset; + if (currentAsset is RemoteAsset && currentAsset.isFavorite) { + ref.read(assetViewerProvider.notifier).setAsset(currentAsset.copyWith(isFavorite: false)); + } + } return; } From 0ff94213e67393dd90eae9e68e57ecb4811d6d80 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 12:39:11 +0200 Subject: [PATCH 069/156] chore(deps): update dependency exiftool-vendored to v35.15.1 (#27415) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b82023305..7b559068c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -245,7 +245,7 @@ importers: version: 63.0.0(eslint@10.1.0(jiti@2.6.1)) exiftool-vendored: specifier: ^35.0.0 - version: 35.13.1 + version: 35.15.1 globals: specifier: ^17.0.0 version: 17.4.0 @@ -453,7 +453,7 @@ importers: version: 4.4.0 exiftool-vendored: specifier: ^35.0.0 - version: 35.13.1 + version: 35.15.1 express: specifier: ^5.1.0 version: 5.2.1 @@ -7329,17 +7329,17 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - exiftool-vendored.exe@13.52.0: - resolution: {integrity: sha512-8KSHKluRebjm2FL4S8rtwMLMELn/64CTI5BV3zmIdLnpS5N+aJEh6t9Y7aB7YBn5CwUao0T9/rxv4BMQqusukg==} + exiftool-vendored.exe@13.53.0: + resolution: {integrity: sha512-CX8w1iVDOdt6iitqoOmUCWLYVmfBVmd59htXGpns/+CItu8LBAT9qVHdBP+Jl0abZyCcDrZf0eaLsfXb9mZOcQ==} os: [win32] - exiftool-vendored.pl@13.52.0: - resolution: {integrity: sha512-DXsMRRNdjordn1Ckcp1h9OQJRQy9VDDOcs60H+3IP+W9zRnpSU3HqQMhAVKyHR4FzioiGDbREN9BI/M1oDNoEw==} + exiftool-vendored.pl@13.53.0: + resolution: {integrity: sha512-D/3yJymCPeMQPtQA9Q8ou/+vvEeQcTjrNt2jT7GS2A9tE0s0NiMNVc62HaKdwm5reQXQRbPrnp56sNxWpNCHKA==} os: ['!win32'] hasBin: true - exiftool-vendored@35.13.1: - resolution: {integrity: sha512-RiXz8RrJSBQ5jiZA1yMicmE/FgEFK/4QkU2KsqmlvTvouOOgANsNWv0f0uZbf098Ee933BE4bec5YAOBT0DuIQ==} + exiftool-vendored@35.15.1: + resolution: {integrity: sha512-ox+pcW9m52MGeXMMuZjbdaKgeha9WmWPE7HhVw6GNZ607a9Hx2HyiAUDQm+XdAzv6Y34sahLReCeJRmS9F70Ww==} engines: {node: '>=20.0.0'} expect-type@1.3.0: @@ -19855,21 +19855,21 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - exiftool-vendored.exe@13.52.0: + exiftool-vendored.exe@13.53.0: optional: true - exiftool-vendored.pl@13.52.0: {} + exiftool-vendored.pl@13.53.0: {} - exiftool-vendored@35.13.1: + exiftool-vendored@35.15.1: dependencies: '@photostructure/tz-lookup': 11.5.0 '@types/luxon': 3.7.1 batch-cluster: 17.3.1 - exiftool-vendored.pl: 13.52.0 + exiftool-vendored.pl: 13.53.0 he: 1.2.0 luxon: 3.7.2 optionalDependencies: - exiftool-vendored.exe: 13.52.0 + exiftool-vendored.exe: 13.53.0 expect-type@1.3.0: {} From a6c7e760088349fa69dca1c619c5f8675e674614 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 12:39:33 +0200 Subject: [PATCH 070/156] chore(deps): update grafana/grafana docker tag to v12.4.2 (#27411) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docker/docker-compose.prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.prod.yml b/docker/docker-compose.prod.yml index 10a78b12ba..2d185a8487 100644 --- a/docker/docker-compose.prod.yml +++ b/docker/docker-compose.prod.yml @@ -97,7 +97,7 @@ services: command: ['./run.sh', '-disable-reporting'] ports: - 3000:3000 - image: grafana/grafana:12.4.1-ubuntu@sha256:1a20dea76a2778773df17dbc365db86b1a4f2d57772b8590b6311038a3acb1db + image: grafana/grafana:12.4.2-ubuntu@sha256:78839fe49e1425c02416fa8072591533a72bd9598e563b54a07d78f9e27fb5d3 volumes: - grafana-data:/var/lib/grafana From 859f58174e07ab50df50361025b4fe3c1e16c933 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 12:46:38 +0200 Subject: [PATCH 071/156] chore(deps): update node.js to v24.14.1 (#27412) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/.nvmrc | 2 +- cli/.nvmrc | 2 +- cli/package.json | 2 +- docs/.nvmrc | 2 +- docs/package.json | 2 +- e2e/.nvmrc | 2 +- e2e/package.json | 2 +- mise.toml | 2 +- open-api/typescript-sdk/.nvmrc | 2 +- open-api/typescript-sdk/package.json | 2 +- server/.nvmrc | 2 +- server/package.json | 2 +- web/.nvmrc | 2 +- web/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/.nvmrc b/.github/.nvmrc index d845d9d88d..8e35034890 100644 --- a/.github/.nvmrc +++ b/.github/.nvmrc @@ -1 +1 @@ -24.14.0 +24.14.1 diff --git a/cli/.nvmrc b/cli/.nvmrc index d845d9d88d..8e35034890 100644 --- a/cli/.nvmrc +++ b/cli/.nvmrc @@ -1 +1 @@ -24.14.0 +24.14.1 diff --git a/cli/package.json b/cli/package.json index 29df0822d9..4b7da12ebc 100644 --- a/cli/package.json +++ b/cli/package.json @@ -68,6 +68,6 @@ "micromatch": "^4.0.8" }, "volta": { - "node": "24.14.0" + "node": "24.14.1" } } diff --git a/docs/.nvmrc b/docs/.nvmrc index d845d9d88d..8e35034890 100644 --- a/docs/.nvmrc +++ b/docs/.nvmrc @@ -1 +1 @@ -24.14.0 +24.14.1 diff --git a/docs/package.json b/docs/package.json index b5c9ca7421..03dae60b33 100644 --- a/docs/package.json +++ b/docs/package.json @@ -58,6 +58,6 @@ "node": ">=20" }, "volta": { - "node": "24.14.0" + "node": "24.14.1" } } diff --git a/e2e/.nvmrc b/e2e/.nvmrc index d845d9d88d..8e35034890 100644 --- a/e2e/.nvmrc +++ b/e2e/.nvmrc @@ -1 +1 @@ -24.14.0 +24.14.1 diff --git a/e2e/package.json b/e2e/package.json index 2be3ce04b6..d545fa1b86 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -58,6 +58,6 @@ "vitest": "^4.0.0" }, "volta": { - "node": "24.14.0" + "node": "24.14.1" } } diff --git a/mise.toml b/mise.toml index 8991680528..90cc03a50f 100644 --- a/mise.toml +++ b/mise.toml @@ -14,7 +14,7 @@ config_roots = [ ] [tools] -node = "24.14.0" +node = "24.14.1" flutter = "3.35.7" pnpm = "10.32.1" terragrunt = "0.99.4" diff --git a/open-api/typescript-sdk/.nvmrc b/open-api/typescript-sdk/.nvmrc index d845d9d88d..8e35034890 100644 --- a/open-api/typescript-sdk/.nvmrc +++ b/open-api/typescript-sdk/.nvmrc @@ -1 +1 @@ -24.14.0 +24.14.1 diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 1a2d6fe79d..d502ac5eb4 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -28,6 +28,6 @@ "directory": "open-api/typescript-sdk" }, "volta": { - "node": "24.14.0" + "node": "24.14.1" } } diff --git a/server/.nvmrc b/server/.nvmrc index d845d9d88d..8e35034890 100644 --- a/server/.nvmrc +++ b/server/.nvmrc @@ -1 +1 @@ -24.14.0 +24.14.1 diff --git a/server/package.json b/server/package.json index 48b4ac6920..1adad9ba8b 100644 --- a/server/package.json +++ b/server/package.json @@ -174,7 +174,7 @@ "vitest": "^3.0.0" }, "volta": { - "node": "24.14.0" + "node": "24.14.1" }, "overrides": { "sharp": "^0.34.5" diff --git a/web/.nvmrc b/web/.nvmrc index d845d9d88d..8e35034890 100644 --- a/web/.nvmrc +++ b/web/.nvmrc @@ -1 +1 @@ -24.14.0 +24.14.1 diff --git a/web/package.json b/web/package.json index 8007bc5d9d..736f005f9b 100644 --- a/web/package.json +++ b/web/package.json @@ -110,6 +110,6 @@ "vitest": "^4.0.0" }, "volta": { - "node": "24.14.0" + "node": "24.14.1" } } From be180fd9dac58b14a277c27ab4911f80e114a4a9 Mon Sep 17 00:00:00 2001 From: Channing Bellamy Date: Tue, 31 Mar 2026 17:44:51 +0200 Subject: [PATCH 072/156] fix: detection of WebM container (#24182) --- server/src/services/media.service.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/server/src/services/media.service.ts b/server/src/services/media.service.ts index ea0b1e9142..2c9325c976 100644 --- a/server/src/services/media.service.ts +++ b/server/src/services/media.service.ts @@ -756,7 +756,13 @@ export class MediaService extends BaseService { return false; } - const name = formatLongName === 'QuickTime / MOV' ? VideoContainer.Mov : (formatName as VideoContainer); + const formatLongNameMapping: Record = { + 'QuickTime / MOV': VideoContainer.Mov, + 'Matroska / WebM': VideoContainer.Webm, + }; + + const name = (formatLongName ? formatLongNameMapping[formatLongName] : undefined) ?? (formatName as VideoContainer); + return name !== VideoContainer.Mp4 && !ffmpegConfig.acceptedContainers.includes(name); } From 0c184940f4d755b3ee38b28a9c0a4c9d4e8b4aef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 15:58:36 +0000 Subject: [PATCH 073/156] chore(deps): update github-actions (#27416) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-mobile.yml | 6 +++--- .github/workflows/check-openapi.yml | 2 +- .github/workflows/codeql-analysis.yml | 6 +++--- .github/workflows/static_analysis.yml | 2 +- .github/workflows/test.yml | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-mobile.yml b/.github/workflows/build-mobile.yml index deda195b84..7c106415d8 100644 --- a/.github/workflows/build-mobile.yml +++ b/.github/workflows/build-mobile.yml @@ -114,7 +114,7 @@ jobs: key: build-mobile-gradle-${{ runner.os }}-main - name: Setup Flutter SDK - uses: subosito/flutter-action@0ca7a949e71ae44c8e688a51c5e7e93b2c87e295 # v2.22.0 + uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0 with: channel: 'stable' flutter-version-file: ./mobile/pubspec.yaml @@ -191,7 +191,7 @@ jobs: persist-credentials: false - name: Setup Flutter SDK - uses: subosito/flutter-action@0ca7a949e71ae44c8e688a51c5e7e93b2c87e295 # v2.22.0 + uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0 with: channel: 'stable' flutter-version-file: ./mobile/pubspec.yaml @@ -210,7 +210,7 @@ jobs: working-directory: ./mobile - name: Setup Ruby - uses: ruby/setup-ruby@319994f95fa847cf3fb3cd3dbe89f6dcde9f178f # v1.295.0 + uses: ruby/setup-ruby@c515ec17f69368147deb311832da000dd229d338 # v1.297.0 with: ruby-version: '3.3' bundler-cache: true diff --git a/.github/workflows/check-openapi.yml b/.github/workflows/check-openapi.yml index dbf0036746..cd05f320c6 100644 --- a/.github/workflows/check-openapi.yml +++ b/.github/workflows/check-openapi.yml @@ -24,7 +24,7 @@ jobs: persist-credentials: false - name: Check for breaking API changes - uses: oasdiff/oasdiff-action/breaking@2a37bc82462349c03a533b8b608bebbaf57b3e60 # v0.0.33 + uses: oasdiff/oasdiff-action/breaking@1f38ea5ea0b4a2e4e49901c3bcdf4386a05e9ea1 # v0.0.37 with: base: https://raw.githubusercontent.com/${{ github.repository }}/main/open-api/immich-openapi-specs.json revision: open-api/immich-openapi-specs.json diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 83c6c65cac..adeacbf271 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -57,7 +57,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 + uses: github/codeql-action/init@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -70,7 +70,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 + uses: github/codeql-action/autobuild@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -83,6 +83,6 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 + uses: github/codeql-action/analyze@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 with: category: '/language:${{matrix.language}}' diff --git a/.github/workflows/static_analysis.yml b/.github/workflows/static_analysis.yml index 4359212d01..21e5e25bc6 100644 --- a/.github/workflows/static_analysis.yml +++ b/.github/workflows/static_analysis.yml @@ -61,7 +61,7 @@ jobs: token: ${{ steps.token.outputs.token }} - name: Setup Flutter SDK - uses: subosito/flutter-action@0ca7a949e71ae44c8e688a51c5e7e93b2c87e295 # v2.22.0 + uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0 with: channel: 'stable' flutter-version-file: ./mobile/pubspec.yaml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bb1e24be5c..a606aba124 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -588,7 +588,7 @@ jobs: persist-credentials: false token: ${{ steps.token.outputs.token }} - name: Setup Flutter SDK - uses: subosito/flutter-action@0ca7a949e71ae44c8e688a51c5e7e93b2c87e295 # v2.22.0 + uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0 with: channel: 'stable' flutter-version-file: ./mobile/pubspec.yaml From 548dbe8ad6c6b523051538f897dc8e1cf2f937eb Mon Sep 17 00:00:00 2001 From: Robin Meese <39960884+robson90@users.noreply.github.com> Date: Wed, 1 Apr 2026 13:39:36 +0200 Subject: [PATCH 074/156] feat(docs): add keycloack example to oauth docs (#27425) --- .../img/keycloak-access-settings.webp | Bin 0 -> 65934 bytes .../img/keycloak-capability-config.webp | Bin 0 -> 50792 bytes .../img/keycloak-general-settings.webp | Bin 0 -> 43384 bytes docs/docs/administration/oauth.md | 37 ++++++++++++++++++ 4 files changed, 37 insertions(+) create mode 100644 docs/docs/administration/img/keycloak-access-settings.webp create mode 100644 docs/docs/administration/img/keycloak-capability-config.webp create mode 100644 docs/docs/administration/img/keycloak-general-settings.webp diff --git a/docs/docs/administration/img/keycloak-access-settings.webp b/docs/docs/administration/img/keycloak-access-settings.webp new file mode 100644 index 0000000000000000000000000000000000000000..1ba55042cc002c72cdfecbacd73e501404583a79 GIT binary patch literal 65934 zcmeFZ2T)W?+wV)x2#SJ$WCT$JBuWM`kP%RVFyssaNQNP!fQg)Q4w7>iqNqsD40%9u z7=}Cy@hse1-@WyGr|RBQr|O8r2%tQZej z{TYM5`+qPXxgsM4z0OL&F{;FDRWtti;Wy*BLL9J7;U3unyH;?~>krwDM#k1mMszq| zwiPqjB=n1d>y_-x)_a5jZN{MhOT_M`k3c~Tzk=*IMbVTxT!~8 z{C0*GjVVK}r+VkEd&@flu}7V6>mPXdUS`s9RfEX?*FnlSbRJXu<6aC-;tF!Ur5Lr?)!#BfRy%Luf}23y{@D)2`bCv zcbPZ!sJ+rO(y{Zte?GxKa{hC;^=|_G2gqp6Yt+~tQ$6~i|`^{&&BKbgQ z%X*J+po)!5wdBl{lrU}s#{?Kym{%~cfg?=dFGi3h2F{OT3=B5lHwFfFL?8w}@cRnz z?`ay=&#O2jY1luHv0hxJwRNHj&7-DWBz#-Vw$&k?vY-8&v;wH}g;|>wv_~JA-Gvkk2oUFx}wUnMR z%Gf!WG756>aPcrp5HT_`iaD5=iKsn%{P*L)|HPRsoSf`MxVc?jUAbKOxa=Ivx$g-J z3v=`Ea`W=u1@5@(=x*y|=yuoEk>#&Mex~!#)X~_%(%#9^&X(~aT|*-~XD4xH=8KGe z{rT%XP2DX2lasCE-^Bt7$bE5z`yLk$_y6oMCrh*c;<1Y>e?9i2Tz_RJc9EFKQ%g5f z8|{adV4zlkSCbIr;T8Ll%^z3(^P+z}`P|XeLBrhW}CHe>LZivp{=F5Q%aB zvJD9$oO;483=Am@xrfrv+%Pw$@#C%v(6(&HhTM3>q4r4XEfK-3!||0zPp^_^f4mhu zc-hh)H|uR<`XGcNECY*($e%!7bG1?ETG&i;gK+r4)#A&I_3yiZhhI@J8jy#)y7sSB zE)oT9NB)-hf8YM2y8o}J8QE|qi zKOP+A0hTux5YOOs}zB)99^AzEVMlZjf>qWKVGlaD>6mVeAxT~Ck;IxGX?z4M{l!k5j60IhIXsiF5`8;K21)NE1L^D362J9{JgE#E5aj; zJeE7i#lr2hYE#$G`qq|J4J^y^wY=I%u^OzD@&?VnyA0z~Ts1bQFA?l2TmlSUpXtr~ zR(XBeNG*YP*o+LK_jsz7t9*C4H~C#D(ap_zg*BLuynGZVlTNiwH100dx5`z%PmB9P zsUhQb!=>qBTP>&M4vV*``CO7V#>!Z9-BDAHHT*v5@lz2fO5v9$uL?m><;S7av~0*8 zAvkBUsB6@x*F@u|LN-&k_{_ao-cg;?6pJCR?XQX743$u8J18Biu}dw~t9TrEiH?h1 zC1tPIELI_glY^9YIC7F`hRt!gH}VZdbA)kw$T*loEh`Mu4u#@e_wOYO7f{fE+RkOX zRx7pBoK}b6oCx*ONF|F5?r`7c1cX5EbXD#{~yhOsHpXdmu+ zc0{t*psb*tTeH%Z{iS6#6P4O0J-MPGbfWUNHS!F)w$92-I@H{E@{dxU+clgeR9b9j zELWiX1z)9pgh@Fm`^r(YEAaAZr`b)^S;tx~2vK^Wl;C~wH^02Swhy{X#ibj?jZYeJ zc8Wg+W@2L6>B_*(kS2ul8?-=oI&xFv)4E8@O?UC&Jt=*}RCjqX1IknSnusSVq=N1Z zdu4S!@p~9FRC?$j}L$C&nkK(55D&cpXq5Z+cshOVM_5 zY1yyzGoiQJQ%%-K!Ga108{^r|>l%VuvnmqPmY=uMQw&;t&QHyeF;LNckxieiG;W)5 z^v+^rtR7M0ohDB-k^AWfp~ay-yv}NHdb@J;?dTpMldah5dxfpU;1+8cpN_$7m%K+y ziM(By6*EGX{hx7(bG*fs>Rk|QnNLE?J|Lqw)W2)j z`z8?}s7nl94$Mz*Wx3~A)tk4GYl=Ly5rP`;tKZCJSe`UR$juGDy>>@@vT9THCMl)O zSgEx4p!;yncUihnr^7zd=*Z8N=1(d(D8IC> zRc}%z{urreH$F$GlwxgFgBWXi#2>f4Uul`)>}>h1-_XTKF8QkJ&>cF_@pL*{$TOsf z$y^sVKBSxzy-(F)9cVG-4Ovm=a*`>j@fbtUyc$TspHVUBXM9hakrsbaR`q%t`?rzK z0Ov|&P%CXokg`plYpc1J(4?SS)k_J}&S!ne+ndvR`v$dNPm4j&HXLI9wj^P=!jM_I zIL1j2DvFS&b`MblmwUalD9(MlvDphNey(7axFfJicmAdMgmb#yIXZ};n9al7Yvkke zgW@yE^OJc(g7$4as%6=%O^ z^lgn{AyLKI;ryYL`n4@AfuSfakccS0|7n<%B%2Zu9q;$I3_`XIAjNpz>=g>`J=GA~ zZ~k~(4FR|bFN;@CXOmCL_Ivwy|FoG>dOVSaG@J3D4eGVzV|^dc)w%Jthi=roS+VnG z{;dyQ6HSOUbL&tV>eURwJr}#89iiXCm;%JQnuxF6(FpTP^)Xzl{jB^p542KM6QB@u zi6MqfDJ53&>~QFS%`LmF%Zw}V{a~q~*YTj|M8#|s3?4>E!B#gdhBWTMc~`GeZKI8N z=r0nVrXaFynEAMGY>se(<$?Oq9uu$altt{#sbk~N5&mU9{;8u^FXp_&_v%OUL0$Cn zsUF+MNLBqiJ$d4HPRf+>j?}sST{x+3+$)?0{l#F~f#SV{N<(VZK?IHB%5Z+>-pY1N z@@swCtZ|mOtv-m4*GFGTwA0M1?_b`HgQmAIkq%Sk)_ZGNffHU$FXta;G-8&UH;>aV zFWHPQK<&)sn@(^av0I&-9W!Ks6Gt;-xSR<5@Wd)5Cgx{b&H{LSTCp@MypTzVj#HROX>Ms%d)5u}I0{(6&Z+dRIB2%Egz9D$P0*Q>^yA)_i_X82EFT`u zlOb|8r}e8M?|Uo{F+P3R!7v$oU`+R0vwbIK{dNQIXhoXtxWw{vuxfZpG;M5&>q?cO zq*?d$vBChS65_l;80tPseW8YH*8}CV+%!=0u*y&AnJzyBQKZ_`cd~U_&1D-GN zjtcm9yOO*9h z;8y}#6bcaEf07-4n2m>u#i^5)zu=B@U3ViYXq~#$V}wZ5 z$8R$)lw-L4(Tq(XXay%Q!RbM}8Fzz4Y@(1)E8g7={N4Gz)uC#pO_Hw(garF#@3}|? z_DA&y6LjsfR8qY&ROI?AtwtOMn64#MrkAKZt36KP-T6veGC4!auACIbTm$EbzM~m2 zkokDb^UK@VJ+UJ-O^Z-6QUi-YcILcz2`n}CASV^)Qd*Y7aM8Y^@1aGP#u=IZJ?p~> zk!nEk^v_^U$igb!woAhCh@GG_@vzO)gtwH9Lo*22ldDZ=GnF9&xOuA4EKTRpVbi4& zr}9>;9;98BvCx|NNBL2&&_MaR+?Dp3ug%;rCizadmH`n6)~knQ~BcUF?X^`=@Myw zPcyYgUa-Ci>^59t{t{)gvFxsba`QetohRV90>7nX;a%F*k%CaO-7N3ZnQC|E*Q1ko z4-~gPWjC?8&3e$RR1K7Kf$C{k98})gqxYwA>8I*(fI;PAT#x?Ln!&B7F+h9H=BgEp&R1VY7y=)ts{NTD(|^y`{XSC>toTZQceMW;N3g;ZX!PZ6C*Zj3 z?6D4{P!lhmTLh`D3{h-y(uj~fQtZ6R{qLa!aETZV>=7l>5k-E9iPDg3E2a2!JF{%z z!;v260b~f{Tag=tYA^ql<*W#0FiM!D*tlzbbJ$0}x|{Ef$x?T`c&k4#6<24Pv3qdtpQ=i|!@~m!9{_}QnDaIHq z91~u*$9iX(`-y`6H<~T!QO3yCaKJzu6Lba5e^JfYzt7Kay(Ylxks&E8$xH z?d#<$#R;VK`AW$2?@1AuVPfI6dO8aW{i{WQQW8elJeIEs*y(@)cZ$0Y7vq11mC;?{UfPvpsoJzY7(hVt<4{{B_&0WBo2Ap zn<7k0?wo$b?@kySm_{y=4Lqw6mhh{fn74rH#o#7-{s05>9G73q{`=>9=dO&)&bPzf z__jKGEDD4FZjsdF;nVTXmV6!Dob9lM_O@f0oM53~YNIZCO!$M$jq zaAYJ4%RfpWrwG{j6{x{8Aw%3szhve|Z*P%hkZy@MTfOdz1f~x8AZW}~9EW->n6NHG z`qV=$)5BTVc`a(02RvCBBY*AAH-I-}KR`RE6>8nfSIaIphZx-*E<^`E^QldM2ko}Q zk)OT=|I>kac}12ww=r|feL18kf_HJ`JGXulXL~3^EH$55XTh}IJEOihaQ$)$bg?WU zRK8@!YZ2gJb1r9_(0H}-hlG~!rU1qGqbhRLdtSb0rFbt0(sw9!7K&p^3)&UY@F^NqOh%)et+8yPSy3kPQBaWDzUbyACk zobC~8KKK-H&y5- z+zs0TNvjvSwadTtjF)%t^@)Kc+coI8s71;BpO3DMGtG5^@f>V#%ZgA)>C<{Xl3Rm230#xgh@fVY9;;R_7=1L2}pXIAP0=jq6duq{{iu~1GCB+#9Uhk8KP-T=(ljm!o z4Y_I=9~;p}8vpA2fI&)~5U^^sNEPIgMt44^KNzl5SXN$A_R(=4b5cDZy>1~RmO+nY zyS!2j^?d1dZn&vy3EMQ)QCu6&H=Ul4TnMDK4g2`K;9Cvcn+o&~PK^LB=%#xl}!g<2_@(14*cEgPZEv$u9TmP)#$TqG_~Ws+Xtfw+FoO z{4bO4u1AL?XTx;FS&hHGKX63Oh$CFj3p&)hL8k(P&H8rn0@fkV3bphG6U$YS?lTcn zoieuth3*Y6HXWa_-_>cj#l*AHw&aMU^Byl!Kc5EkZS)*Pt@@ZDob z4ZtqZdlh}zcBwV2Dk);sXZ4#1OymSFzgy1ocH5M@TG<14xx@oJG_u)vXA{aWR!6Zm z0vRkGswcU=l~UMz<(4PZM}IzASHyMItZRS)FD#R@+uD)}DT!Kb@*`EO%U1)`=1<{C=m-pcQyi z8!{}|WJ?i@(cgAxVe|{EjDy|75Bio$Nam?v$1GEu3B1Wmt=vRzGEUMgkeY;AMAv1b zANko7T9|r%iV7y76MV4Lr*A+EoAoW$uiq1rOBRW?uW&5^px@&_GFqcR(&SQS zc!hZh(0DJL1|KMGihb0`HwrvZtZ1XFY&{>nIPR)QpkLWmbMX4qOdo^RuQ7;wH*}exkI27S zoG~07W}?8Qv$^Qq#e$NYIHbGP>eTABy5mhX%2qF=HOylQuNse(o)iDljY{bn{LN6_qCuBIKm2lf5~gB@LTQ?z-C zmvYnj86;n$=p<Zgh9DP@m(I5qj1b$(`jc^Yy|H8;v^l=qyhaV-e~)(ep;GDxjH0oP%6JN|a>kTK z0N=AB2wfI)|on}LHV zt_d%(@~r8M#z>@jjS`Zx4ysVE93+ z!ObTm7F%7m5^F|(a#6oI)DY4=aRR0-u<#DrXf|%*YhO-y0b*Py^LD?;2^EnVM z(GSDRxt!U4>^{egUd``n!JYn6IA)8js}mvs>o7A8rVI zjnt|RTFuBoKUgQ@ zlhPPzri!_DPJz$5MHP}_1TbcktHG08GKw%)QW}dbsmNl-4yC{qiQSY#EGlk2ux>kS zpf5$(`klPx=AiZ9EUa|SthTKev_yzs6E{b6ccCc7ZUTJy)M9Xf8tPH0IS-vtSDC;I z>lG&-x;k*e1f)^E%kfYn#3X9V9STR1zF*j?KW*^#)+8nRJkl;H*b&gMto4!pY z4?8te#g-OTlp&nxeY=OJF*N;TcO{NQWuUUZhQQ@zojED>QD12w! zjM?~DZ^bV6A3?Jt1FcG8gZ=dqRD*6uX5#z;97F7yW{dJ$Td#4#I7rgkcXHUq|AA5T#;Cs!L&`Y61(1D z+)B;25-t@U`#}g43>VvpmtU#MN}R1`TBC);xOQB9V6^CkY_dpI_d|cww*rvpq#Pa) zRI-Fht#_}@ccYpO1CAVql!Q9OUEz1XD7jjCCHUuDxw#pUE`vAjdRn+>!3aK#-W~!5 zkzL(ddp)z>6Aei`lR?3dP$80!?-~Q@jJ^=9!hC$Ei&a4Vnm`1~=mS;qeTDEz*UZNA>1nDEVL^d|Y%~N7rz>{&l z(;s+^7G(LJZJO&u9edXy>x+kxxf1fu#~}!_rVygR#>s*ui0;Vl!{ofR7QvsKh%uj# zwJTcGZmfBwq?LNb-XDm9bhzb8Ydt0tiq%F|&$utsWrX_gCP%g`zC=!} z41SHLwMLAxFF|&fdNz2lQT#aK)p+=ov8}*Z3x4h-fsNXG1w<@Vy4P?KW#y*tB+@7% zBm02)cybzYwzZVP$g0nue3wAxH02tHn%2?Y=1ru}Ryv}y@B=7Wk*7S0U4>rQFp&C2 zBkyuhS8gcVFugEpM(1(8)27Mth*qtA`1FaxarI8W4B13FNqY&2s{JwU4pf9ru+hg8 z8)sldn<2<`YOl%unC^b5$|d?ShG|=y=3dCXiLVjvPQPRo;e4!rBuW{X)!4(E zrD7L^XW7SukltHRCpA*TasL@w_p`@35^_k(dWbM2AD3J2_s#Ritxr{sx~^I(Rbx4S z9x8eEUQjE|y(VtiOux&(Z?ttC5RmI*t>>v8>kIT_rYuTvN?1B*Cn=@ST#7mIm zV0C``?N)vLdIM?MICs6nIQ{&ZkMepDgq z{_C^C%0eyzc8|!nwSV>u8=Hopzr`1_8gEI4E!6DC1;M}UKi@6J!n5*iC_tnz1o=UyNa-^g`^>J2$CCZ6AE1j~o0| zT@NY$k`BG`RJ>%4qbntK&q+IoamADHD8Y(te$b#5fD>hJpI|l;$BnJ-t@7oVcRvCq zVWuu2A+Nql!m%Bn`bp=e)Rh$du?d@-GG z_npupQ%`?896$_rj|OL69*O3wu)Ck1lC2t&Gt@@?R0p|?Ii~U8e7=F_=Pxbpufy21 z%tK&Xl;!BsZ5ZZMJW^Gd-)k7g(mwL!mR?uAz0I$laT{}qCs;lR{5yAIwC};iG8$~N zE|$XmS;0RY8!5*30F>gn@t;BR*B#dw4O&n?Cyl?(;(Q_mIP8;8L_f3rb%!h=CIF?v zqHs4dcN|z3`O-GuFp=wrK2v;O??CeNZpNn<)UGo+jh=v!{0=6VVDS3;YjmQ&d|Ke_ z1!cbFK6YIZ%W|@tIA>^1_dl5fIQ=@VM-)L^g?!8%*O@L%b=uqh|0GjC%8tp@k`;vc zk~$CPAC&CJ6~7D2SXzu<^#{&lym+tArfFAxuRWX?;C))^>4))t)!AP~_VXnN*dTeV zpZp&PPzykSSnD27X@3^`XC+}h08pKjF5c~*ZT&MhDT9k@EnJrd|Ff_cj}Z_6H1od; z^Z&4AWU0xkezYYJg6K^VXEEQY#HJOpX)q@Q2WU<5>Q zgb)n*W;VcMPst5x6$n>(fln%zs(dKKXbIx8diNvemi^loVBA;O+2cA+cXk@{PjmSB zUN|8a##cu<{0Er!y$l#1PptpjKVIYhh4C%FcuMhy@jV8NuSJ*Wj~*j63ov$qBx`A< zKaB7Ch4DFZ-Q|k)2M->wJ_)%oSkX@FuwLXYK1pGn{xUOguyWPWn}Lht=-A7_V zU{<+vBL~oXsO1~s3cK%QJ-el^3<$W`o_~CHV53s_IzfOTe2q*Kpz&vi$Dr%fKffgx zBLt)Jg=Ax_0up31SU^`i*RR##_bQs{qLUw2VAW843>(G3C z_{>4Y=yapY=Gg6K&KHcYiK)un&rr<}gdm8DAs>*G3^us)0n@9JP(X6m(eypjrZc#) zWk^LRB9L?~=uX_XBY^ zh|khd3p+SH&|vvgF6z8_I~m$QGbgCQ{Bzm@n4pvaah77<+7AvbTE$T^)uKED(RshHIqJo6gYQH5%h-q7#+;m>! zzxOe~&W!Y`g}qeQXrvG1h%MCaY(?Un$F;c98dcsC0|Z30YYxcj0QqK?)yVCgKKS{=8c5}2BjobK zt5@wO_d(c%lhv>BC^GKGk$4jWVJz-cucI>R<5UorUc)Vb;>7N)PU@GN_1wmmJU*0X zy5~+U==rKU<+Rb9 z0hEV&22!7SsUjt{%y;Yg$E-rV#>c%$!p6Il9J*Q_`)h`JUZ#k8=fS?c7(zlh^8-;! zNc#$Msx!J^VW>|cw#jQILd<<<>}b8d2EW0&tA92wr5zBh%6%bPya}G5U1&ZJ>3|}= z4VIPjG?8*p<#k?z7D%~w8y*xsd3sD!vXB!iEp)8yQ)vf#yjizwD;LZ4us2!sj`ipX z6NBerS(2pB%+i}~xVkUQe{?+^9~tR~jqg!pdKvQ^hu6H969jeQ--RqtkX~UBangGH zfu5!L^ZJ)XpGGJT|2tDi8i@y(+ z4)C4PCF%YgAf>L5%a$?`-V;VGr$96`N?tHQUBOgz%sd{$1OtIhIWCBa&R)97g#tMW zlii$s!9Ha3-SEkGSHrUvD7%W2Crys4dooOGoi1jsN#pSGQ>U?(jMux18bgmnn*fBd zYyt?KtF?qUnTp%{rF?VJWrD`(af)mFbV{UgrgJ)qDi{tg+hMt0U%yLWA~_eooYA6(qSj%pwT{nmOc!;M9Z|h%w6i-|9^^T%f)d17exEM(7%Z` z^F+Yo^(H`)!U3wUT*-Q!Fy;QNNbOOMVlo>LiL53)tC{gor{T|IS8q-+^QW!=&*wi0 zg&`!4WUyJe!ZK1Js5K7Lu9zy);+OO7T?}m3)pHar-FG_Johp>V(NM$;@&z}-OZow0 z4i+_^Nm!_)2ON*sJ3&&v>B#CWIwd!zH(4(nisUkV=LkQZsG_g&E0PYt?*eQF+>h`( zM#kRNsqU=Zrs!@a6jdbOpqGoj?W|ZJ?ftXcGp6BQ0BskPKF@hO4~9t7gsAv#_s~+Y znO&XzTn49h{j)vWJi%AyeMcJf#b?2d6dzr^={>hF9cx^o>F~ltUAczh&RY2!&IEiu z7nPCLOEf|{0Am9W&@lF=wdN=#f@KttN8O32#wgC`6Utc2UMF!}%YCsbYZ9vMf@)4z z>X_N=(=7{EuXrccO;X1$U}4Z)wHL?Nb4!oUm7Okb#hT7>->bm8s;j5+nDRSo8a!V` zg0#_C95$tzdf%`R9THvY+5)JB2e_7dAn(x1pi^6J?ebxqx(GQSWce^wD8V-%XVQ-B z)SHAx?BP-`X^-Rxf9>(Xs_CxPJfPZ{Vl(GOFHLHfyKP^A!d>A#)kvUm$c}cD`XphW zPiAz(sQHTVNIu3PKW|P$6*HH7?GAWStJqs;?G7r}mwJvn4r1;*E>$*+&llZU_pV&8 zWcL*e)}`Tf%0q9y?){L~_V%Mjk(ED%jM%ypfeIiSznO{_A9x()ItZ=0&>a&NcEkN9JABMhh0!HsjOgGj+C>XytlmA0{ zBAu#AhSa>{thz2OxZqkSy||T`GxzO@Fnh~SujJHr%O=!d3jtJW-XlL-T z=q#{=+LG~1SCi3+Tva{LDjG8IWh2E~DaAhB7_Ik(J5P%|HWjmE-Wu5UXHeP-3)dy_6_3qUQCKtMLRDOJRIVplcjxrNBzpj!r; zUI?DlQ_*|(S>DrLu8$MxPs1 znRLaBm{uSQy2%-0>2DvWfrif`8zO1378*l-39=aTiCHaLq-bxt+jdYb?MKI#O^g0O z+BZREM%kbuP}IL+IV~4?t`kHVKa90wrVgPAiRUPtx%8XEl;n#`-tOM-w6R zJepS@tR;pd*e)fc4OhKnCG+8J6M_@9vT0tNUW1M#~d#36`rUKDalM0cO0dR-sv<+;BFcooXQt!qjTBh zRk>gLg+$ZB5F0<7u0$@&@ zF}|{Mph#Xrx+$tXIBZ`yTp(4(BqdsRof2Ag)xz#SdV8x5t_?@NJhbzC2&uUAa|S5; z0*jD_XDjFdvU{DuK!n{-;n6$Fs&|s-4gEzs$6l@esbD?CrDQgSd8Mi%|;8a-c3h3i&R^N)~c6k_@Y`(vPY zgYbv}$X#p$LRQx~H|Rq!;WM{iuq5ZUh>D-NDILFD9qjKI*$Ys%7%R|ZaBs47 zVg>>$IG;qy0&6vFP@6?Mg5z?VdzVUbrgQGp6HB=v=VP4l+>>$77GoznsPqFv>_))j z6>!eorQVn08&DTH*!+`NW+IGQDgO(g9YXsN0NN>ASR$TM3~zs*2W8rg$HyO`{y zH$-3FT_YZ1=@pgi`sEg>QOfqy)~|n zLjPRb!L}VBh%K8sdSZwsivEOqeQJB(t2?gjAXG7#K{^1B%QBQOd8+3)JF@*ztnNJA z)xuxda|POqa&$7SnD)U$B4aien+l3w*)^Z`N?dx%{&;Vk=M-Fh6pXH@-@;VY7j)H2AU6Pwj0*Mb(BF9xL0_9?R zA{nQwGy_rnxHTKqtG%}9!RX?d7lE!G*~U~92ICeUvQy?MB-?MrPV5DCv%*0s!Xo@7 zNMSdafa6l)#{6A@Zy6nQecrS9SgHhBjZEM;WQfFrvh{-Lo`Hv4XtJj=*bZZ15TAfHJaYq(qTati$`Mi(9F(VHv@#oyzkCi=)Q**Py z@I0eAFgHyG^Af$71+BuiDyi4Q7zy^(yI zzeskHfVGBbyn)GnKXRQAh_v<;&F!pa67HA1`vtOl{#PK|PXvx3?c_Y#K1V0i$UWta ze`zB!0RP}g4eex!qu++GgZ$isN1r@hZ@jtmZXot7siLmENCRn`o%X$xlMbW@wHxYo zzcZIsS}Qgcr@i|rN37U3cN&G!5gzg0tqG8JO&wklDtx~KTlFU0_gPxb{*%Aib>0tl zeYB$XH@e1Qc9ICl>m7QwYoQ@}p{py4fmur_Cud`C;Km3@7hsRHz=7)(Il(GH=udn1=-B_X_ zUWt?hv?Mli@lkyN_3QvZS=+zHU^((}B!e6AC8s&^$SDF)q4z7U$&m#dZe{;Xd5c~B zfFTl>L|UrHkeuiCGuB(U-yxR*(jLnDvwyjPC%2UW3b?&~0}s$R*5f@{3j0-W-8gY= zjAnWZkAF7*uP*VBk|0lxi~>C+eB*bdOYrbQyLsih#;?HZ-|5+l1B&6=loE;Mke@j1 zZ&oJ73Lr9OKSP1v(}Gn>3mjWOIL?pvH^6KTu@;Ei|+sntUKROurI)U&ObPT9-7|#T7P(dxps62 zddYchIHJa*i9B!MK0?nxx(17+87b)ED6z1AxbE2{AKZ8CPE2fu>kM_yN^Oc`+$SS+EA$euzF7b^ zyB1u&F(?bgsz>4iR!Y+rS3DXDM9454}eHqut-Pl8U>Fmu&lP>#6k2J4XB;BdY80q zPn=jRr$1)*AhoIch-ccja+SAV9s&Yc9YCHT6Tu#Os0JQyX!SUvFL2+b+Bn*t|2n30 zdUQ~ox?f)l>!s6KjD19$Wk2^IWg4|H!{l-Lo$uPMF#QC;chf&T+Aou)qat|QH_y6Q z&gLbcJwv}0^8SXf$bd?w`f~ALU01;y7hQzh#cD^i$AnYgJz%*uGX%AHuf$8Wc-Ka; zA)tNiuHYxX7Q_w_(@Uq&*0uuDjR3dX_wtN(X>{Kmea!X6OJhiGUJQuKbPv+ni74cNV+KJ<)HinP;bELraJ(VmZax;ZXoe2exo1 zU1`1ykcINZe})FipH%i%gya4yDJIU9r&182&p9=|lYL5W<9wehR%TGJ8f^7Kk>kFt zK+V`8-$MiaTvq#{@5BP)Yh^aYxCLRkM#$!lo5m3*iQBSxszBLsUi;wJ?l14C#BmQD zJypy~Ugxc4iIel^%_e7vDmzU!cD+UH0MJ|>>cTxaeK7}IA3bB5u+F>)B_L{4QAfcY z_XMubVqss##hr5Tf=PV>b{lAY6?cP$X-DGh&{(Z{Bf#MuHCZvt9@*rzvkx0uSWcxH zZxgW5(zlX03O?Bz@+1Tg=Y+Qfk#%L2H-KhQtzQmtfnGW)eVQL&Yl zc46mdqHM^fW4{X_&=2jp=*#c5Kh*2+($-Cs%Xw1{1mZB%m6n)m`$N7y9RbMK(O%;J z0sqas^qilQhRjpFIfWfeYMK@Pj*`GPeJ;@YtaNJE+K6?QU2~1N>DnhprIfPNCvN*$ z7Xb~&l=e0pMNgP%Z<2Ps%j&I~nS?&w*sBgJ{f5*69`8?<1VSG;0c$!@cyUMiVVcm! zrF`{M4;4AYL}+5m65r0z`gFEiS%%AGn^|z+C9?5SLtwS{cvtbewIp%e$7N5uql(1A z4vXEEj&#Bf&+tfTnD1y5^Ph7qMLjm-dUFvAptb8}HSbLdmwdl!zT^QR8w$>FQ_b|l zmJCnqSxE6nuG~Dbi^9VaKttYN?CugOevr4~JnX}c+8Ad+HXJwI5OcdVH8)vl%Rwf- z7e+$QJA9`6s;lLfG=hYT5P&QZNk0p&W6w!Bf8(1Pub?rP$LTOSz^5ZDQB!yoYzI1;tN0(6IRdct1LvyZ);yQ@=KD$OQdEqJzX>jv=Ug=6G$ zXLme&!uQ>!)VlMte%pT_Xo6&2VHs z+t$6w!Xcz?D1FJK*IrOc8cDA&1QR;hW5VRbmUAq0w+z&62Q4(Ikh`OxxoCHFg zk>^0LH4y>eQFVm*>E#h&2=AkE`*uW)La2~_Y$34rh)l9OdUeP=VLm5HIay@PhkaNv z0GC$KHma}rx(Rz)15Eb+NoCgU6r?hFI%0EXe#1UCdK}2xFt?GXRJf(I0x39bPo`rhjpmukaKQ*ndAH01H}2z;zQgNCBu^N2t6pq zg*#dL3TM?YO$%7X6CG0G6h@_I!Dih4+C{*HqF|M7Aady?)dWv}U|U3X^SI>KD!=0S z{fiw38pM$_2K_0R36(EJ(FJk`%JYC4PcidW@|24XrivaM7fiAW>d5V8fZx$5jOx*; zmaWL?>q@k1u!V@8oa{bu6xyeEL?Lm7jW@qGo*syL)3rgBJ%qGERRR20UG@^#Ku1TP zl-#0Uik8s>wp9#$+tuI>SLjg7E@~}#N0l)C-L9IijX~UF_!7m%E=g*2^3R7DPxXK` zPF6IO`6inU?k+xX$9JpCKvT(0v#*WSuhKmOn^@4SkI+p;3mY9i<*=YJ6d4tR=4T4_ zHU!Xdr6Qrk7#2@k_HXnf{S^MS*ntaP<>qr95c=tc3lJ;Vv4U|4N~L{Zj|KKn8RQdN z0+u~p2sbxetvVvIx!(O1`8gf%PO+ld@;ct*ZM<@OJTPwtGlXjugc6$Bu&n4wL`4#o ze&B=q4egkP))W^W4-^ljV9-q21KXyge-)@K&R6U&wi@}!+buTUQZ!_E8`#Gq%5w=? zYTSOQCeaJVI6&t*#k8x`<~h5pc|O-=L{oo$vKz{d{A)!9{zM-QMiLOPBBY5bO$}v` zjH(wEw}_HxDyD$HMj?YdvFNuZo%Cl1P$))njpa~xVzK1%iElj+ zRo%^Ad&ypNjxpv~{bA<%wT)DsWysoJ_&o!6;;`^J%qdX$uYK-M2R_czlQ$Wd`mC*F z`H$zxx{pN1p5$>P!{Ta78G{5KhO{Vd!B@DtUb{CsjsL0L)+S}*gU#NLi2n5na28>) zS;5V=$20X;A{fk-UN#`ObW{C6aP#G;ZCmHAECRjtF4uWl+hD>fctaeh2eDlDSnDd! zF~}c&o8(kH#dG#Pm&5%$9-UllmZ6>TVY1EHv$lD+sac41IbIzQ4qJk!%sWWydPfBY z_c=@r2d0?z-Hy1$S{??74!94^b&5XF&Tl$DJwgGp&3W*{@`F?J+nMt*J2&Uc?j()= zFO&3#gs{vhMqqucx7E|A%d5zLb6J+>?#l_2Wk=v-tARFWf5+wU6k#xT21i7|D!Euc z+X(;m?h@hq*|z;Re=0i8@%Jr&D!wJSr3}vjiGz__ZI6wZJ;k{<-=7TyNr$7?IH_IUe zgDg-<=W`GLQM#d>w*4+h$h2eSV73^gt-GD65)#U@B+I%ZQ#in`t{~=Hj|=WgDm65> z@ZyoW$tE*B(Sa~Jv#7B4C;m@RPG7)1GAW<*tb7q>b{j?N%AUC{)$V7mYiq*l@)qys z-O*jfqP+LD`ynq+mrbX;DIjm&?u*leZCMo13gLz}JzmL*Wixrf_RFx9S}pTsE%Ft- zmwsQn{i|Ml3rx$=@oF>Ojf}A^_zOeJC4(r^H{kEq?3n`Cst@edood($1%$7r};d4EaYlmsCwDy#to`> z4jJW>&6gY32NO{TuIBRbn0dG|rM)Cq#oV_osxgK!{6oS>T<%m342=TIC&4fF@F$n% z&&vSzFDt?ld|@@qv$N7HSDtS@PK@v+8&U4&2=mL6xea;tAwG*t2ETurbB871GRp5i zrqdY`JY{w)JpvScG@6x@dlnW7Ob=fuo-)$E&0yAPaU14wK8oE=Z9^-=L!mMo_gNAx zhlsZB0T!H8+Fb1rc>nFqS$R7}{>v|p1B~@9AlkN@hli5s8PDZxp1>DpqYjVvlPiiM zy<@C#l+so~vgjo{L*X%p7+YnD^yJyjhv=D-&2-IJv+FpEPRmzN#wF!>uqXu5 zN4)iJI`tbv*3-ScuNNp>+;FGw@R}9?zpfDqSJV`yA54JoVlrHJWQE^tX_4eC9a|OW z@qS&t`PW={mNSa~S7XImR^w02R7AZ;X-lFaD~mDeHCz^kfGvPH7AB&Gq}A z9ZEHVoSd&pquxSjkBb#Va!fa`EWJZ{1F@P$?A?<0(BNQZS`GuY^sQ>KS!J%H`7{)C}V+@HjcR?s?CbK2QT&cNq)H$Dv z?YT65&z?)+<2I%v=bnW9rP_H-rT$xIKnODldcJ-!6XeX>!Z zPksO$%ROc&6ANyPr&pbVrc-or>l1Mfzu4zUhUgY$n-;rZ2~uVT3x-|h-2l}|8)M?c zm2sSbeS>g+a!OKoXa_Z+Pk}gHPVItJVK=(nuQ^knYa;EjcC_6epq`St+g*;dh?`k= zQ=AN#4BW^}6*}*t#tUAY<(mC8BhLcp=gm8=YQqy|0qKeDj4<;goB4C5=DbP+v5?3~ z5_Y?WG@r`YU5pZ1{>Ut#hA)15AW7cq!7(PK)XS$tqfw?Ug=^7C`)a8TD93fO>r$pq z8W^W+pOIXwAqLcsV;q3@TCB(U>YdZ;3Dz#Vsft`(Zg!4xwG(7y%PB}ZJY5E| z*sUwWoV2^|8Hl&(sl&qnsY8787(~L`ynpRxx$>f&RYZbAq(*MqV&vsRWIJ1C`%WBM z4OvM$(wu?5-^;|Dz6^_e`FOMmq#WI49mRf`@dA0M(R}}FszWZD`j>A%6zFx*Y>S;N zG8c_}>kY4NpO{0+HXaf`#C&^Bi^+}Z|ENR6VxPX?FcD$g=6iSem6F@p7xsfetb?LV znv3E{X$ZnWt>r}j`A2T^K=RKo+E2IfmQxX4UPxk@mk!_Zje3*ZoqG)^VL#N@tAg9M z5QykESIsAL5^mDt{-BG#dYGg72>%9Q0MWo`+*sd|7Cy_0c0G-*7uQUrRSWlft~3t&Su*R;vL80N@p`HRrTW+Og>l8e{&aZ~^&Y=bhE!Hm&j5h*#XV*37##Jh7HlAlex4sI z8C`|JA03q>XE$Am<$+5hRP0r%XSWwKWrjw<0qmZ7jKahMn?#|lm<#&+{4=ww9?pCs?{MKNt{jcOqd@9v>X&eUg z2{$qho+A4W4}iW;bQ^zcm2KpUtJGYrr2)Y-xme^mbk}{O)3>23ZExK-$rp1LiwAM! zj}7DR#G}^7%Z(%99+s{+o|tx>mvak-XE#F*w40CiDPr7upSUo0K225y+$=2^W@Khf zZ?#_WSF~bsx7=6B;0a8l zn3{T@s|nQX;_|Hs+49dj{jF2;ahv^V90$5-AzI{z80Bo4;%|1-1(e5{QpoL z(>1O74Dg40zsnwNo_6=Xc98JpPakad-RPfoUMxeAKWsWkJ(nvPzR1KBbCZwVN@Z>` zxZb+Ds^;HQgd)6?h3Z<)8A+WEOmWBeJIe2bJT$7XoOjX;mkZoUPaoy`;);IHXZ7Lc zjoP~PxJ9mflZ|%&qL-VFo9abh{@%RK%em@~t1p0!Bf7nKUDC^`O1a2u$JZ@)TcsJCVP1#Hd-^u?U2*j1xXU{W_e-pDMr&_I`J43>PKG=uf4+S^#qb9ef&M@kJ?gN{xEKO zhfO5Pp-~1qIgv3iNar(6eA#-wRujaq=!*!GmP@ov1}@tXeRhTyp+(581f`u2p1W1< zjh=4+gD~8kIzef-UhbwGXV-7$4owf_h&VfS!T8};8G^1+mZT$Tn(JafVIXZ|I38EO zy;PGN3F@)`vdDOIPn0+f1oD&rv!N67jv+k~X3B@3k zp}f5}SbFqTl|eP}zxWYz5I#KTo9q-6yqqE39u-}GIIC-+3RuJi$EGbvC{^?&e`!H? zbW_p}7+5VEL3g}{8x#livj$?gPRfqi0w0|#BI9v+B9%-@YNlT|$bglNm4JBN|G{xV zf`U*`oy3H}!Caz&;VEunHNKAUUCJFW&^3gAvDzkn&#d;r->h~6aS!;Rmfl4xjvrA8 zELW~s&p)2+@YXBM^09t7vD>vlCI?OuMBuO^SQKA4Xc!&G_YU4+;Sqri+2C}e(CGy# zUqtW}rSHVI(0>z7kTjW5JnecqfU57A!tWX}Q$PfbA$1wP@ZXUp{|EgA{YB7YL?6v` zJ89-Z@;IM@;u67@_s=5y7l9qz3~*Ns1d9LVLoP%OFlReVwA7#fOr<~M^ujYiwiu1^ zXA}7|1n}HIEryV@Bp2ELy~-LB@V|}%z4`-!O(f054D5IulcfNOWt*m+vt`)Nv2V! zAA1=8DT?<~%2dtp>U8}$y;BkkJYKF&*}2~aiITpD0X!uV3wqb}Ldb1aI{3L<^t{&y z!@p6e|D^$mBy5cR^iat8J3+dpwz=PsGp^hMKJPXU+V;c$ux|ry+Se55;Qt>kq9~T?kNoec_4hli zUXa;oLY+xQ;YVq%W`jm;{%X$@6D~C~pk`)2VYB7mgYwrqKsxLTLcsuxIB~WT*;D{= zBP@_jqSyHPW4&ZG-g`+cNdIg)W=>F!7B zT()bU@9)6vbsB&OD6YwI|0jSaJ{Nb47aG9LwiyHw@;EWPFJ5eT{|=xGYf3a~=gQZ6 zdY-yM*6qf>@*wyYK#%8-klr?_&}J`BT$f2NwbcJy5z_sc&gXtOuzY&49GYr9O!b^? z&D_7Zwf~y@sJSAavhjCi5a}yl`|Xhdn6uER9ACddM>pwy0(()7uU1I3%F=+V2Tr^Y z6i~N#K3=`*hBcZg9EwGo&3i$}W%pck{(TcDHAn+6YiX;&c-n=!&st-dUVMe`TbrKE zlkJo1EH$Ka0q_{8{ZP#E;G$J2Nd|n8W~=!sam=SYM2ZBohQL2=*1^vDh9aas(64U! zBBU=~-Cl`J=SswkKX$HJ&jujk#6OGb>Plu0m=G>_@Fu*G?n?!J`@&1mKpu)_^1iH;&ekX)sE-|K_na=R;LSKesBZ#fsvazUqD^qF_DA*MvPUMG@jE$tq_ z-F^bnph1g_(kR$Br&~kx&+7UNYJlXc`?R=srTxf4jopiy#_gOCPkUoR6&Zd&3=L{) z&$s2vy$0IoP7SzV3ALrav>R(%TI2;waD>qUt+bGA}my^Y$Ro8pL zdHE^FC=8d9f}+*(fQ0|P9+~9z_}lZRktJ6j)%Oni*EunA2%niiiXWQb{R-Zg(b2tv zr}+qnCGvscUZq0+ht7^4Vle6W`)DfBU3hp2aBI%h{h4gC5qPMz4}~JfbKBL*$;sHM zzxnDYj>~;G1+Y@;`xeE^0AvmcKsAUafRxrsn@sBDODZT-P*8LY^hBg?tgmKBt-0#5Ip3GUenJS}&oh?Y7+`L%*<_Uj zrK7_mA;sb9y2zEaR8>`dK8acHmH+9yPW@AN+aNg^{1Bc}4VW8iUVzUUx8eE#Q+UIb z4#;s}ogpA2$5)$-^f4KAD*^h0-KB3PO~Z%n6TtkEM8%$8-}}Oz3mj~4>)a&CXV9k5 zF0ih0zK*(XbkuUgsxLgp28+_helB~Fih#juEf#e2IhHOzfRS+eyF%h*u{{qwdOz?LT@hmYFtCq)v#8K_v);sQy z%3mIq?%&}GyOM@MJ9kCQiCa5j5tS)R&jWfHL8DtUw>6mQnc(vi9$dg3<7OIZ9S z&av5kP#TZ4Uc%dcW&p1!1(Gl|4F-h$@97bNc2UBi5-Iv35cDOFkyEm=N<|R~O_a4i zx(Q{n2B(OpYFZ~`>2tpAAjt0L~Arj&saXDX&$T({;Qbusu;8^~m(FXgNu^ zH&6f>N$Q2)eh`T_7DGH5*2$7PSf~=m`Chj1A=p-5=pC7F2?h;5K3#^_X^aZaeWhs( zz)X+qx$B6)@;#MkIcq~Le!W>*_MA@BsJu7~Mz=fPd0pzzTxq5R@PbMA$Lk^&GBd^T zdMMo^hsO{+*P02|JQj72(rD!+ZWa z-ouCs@Lt4iPRR1UcijoBhp$_8pmz&;1fdx@{p9=`Yinje8<{}bs!dBss;aB4MAA<5 zTG8u?uk`Ul?TXi3DOnQ}781awDLA$mZk2EWvIi+`@5_UlYbZ|NHAoT@*Xt~uxhvpE z31%8(E6YWx7lbqAIPBtS#XMhsV603|FO9k);oN7HQm(Ci+yva!c{A!2wmUH(kY16K zi$}x)Wuv=F0@$gUvZ-&SxL%Lgsy@1QZ22?crp3{FuM%CH53a*P345gXtG! zI3lZbn+a^m#U@*xtFv+!OJ=>31fPp+`el2QVmzHOjTQ1w%a1biVsfD z^5lrey6>>wxuPdb8wb!p(~KZ{48LLaria;;W^U6-PKE00zc z3_YGMYGQAhrb1EVTg@tm6g{$4xe83E1q2*sb@LnIdaE@4bl>Lvlf()5Eti99TZ9i* zuwpAC9;X|UmSlRTHsK*5wQ{Q}kO4v-9)1b+gw{9--yt+>xag5JY8phR39c5Qi}^8} zj39^Y{RHN6qkYl@54md-L}fqcG6<@Bc(iz}qvDb^m((-XST{AMFxkEB<6siJ+}C=L zd%sj;hG_=aV0R3e4J0zo$Aak5$XZ&COiWTg0L-y$oiZr`1+}i4mdP~q`uduqlFJV`*KB9q!zZL^AG(C{ z4@Zce=LDV8%XrxXX;0_eV0Yf7y6ZqmHXOlVzG!7z>|+KlE>TA41vueqdLkKbDpV`SDAh?h|nPjPz^zGZhUDSqMc%o;t zAU`R@vYv_1S5Wf;;2?ABFj>@I`U(0CA?pUC>vc@8a*O{Y;A35@lEUYEnM(JxYdK#h z-F3qe!a~HPUKRhs%D6l=X8kG1^x!0t=&I0lKaTA`_llElb$7*y6qp z?G2U+^AS$D4V+K%az*0|0QXZ|j7@^EU;v?wvaO8VzF_7zAqf4LUDFb)f{&+irfJXw~GPRcfj! zQRJcPctfH|J=YEN@uqkbQCz>O4(-qv_JsB)oo^u2w=r{j&U(0?gwzTZDP1+XMFk15 z8<^wiHRXoWn$fP`eA|v_W!!$_WLA*rm;T6Y5NQ9t$zDxRuk4v;28u)#fkMYur5bh7 zKs9z@M<6|L?hrtNnyOMjv!{LYV+;&Pr~u{VS;W8mv+m^KXBIJdiCD{MO@#x5gqpv7 z9ihau@v2UaT{G3>u}GXllwrI@$3r4WN*ol+ljhe{YtOc%=O z#Nre3Fjs4_xp=iSJ#8=ze*Jok^}N*C!S%v?vgXOQ)?C#rK&Y4JX!NNI z44CRB{g7{RyD)c4g59qC=2yMz5Nd~OlOE?LS} zyp`icq2o?mU3`Wog8M4onKMXFiB;Mc4NG&XxgDgEn|=}>4_2G2 z29x#sWwtJO&0BJh(#6BfAWp*jCEwB{eIu9z-!@vn7PTqX*kwh|+4clKsIP?5@6Gm_ zm95A8*=WKbN?it%8tVla}h(@{E>WlXzN1271N`zQBM-MID)%D*jMd z0(DNrbkRx}02M z%zcf3a3P8~(Lg-P#f@tpTM=aRi{KW2(t_K=85yymdnIn{(l4*=sk~ z6;}c^xJF-kv?{+zij6S80l`qE>&{$cdAEC=E>&DPdZ##bApV)?ve2)TR~8$RlRufu zHjb#Y=~O6ZH*>-&V02VvlF}hT#NfcrUMhcl7ZA|_;0fAtFR5CND5|~dR@YXf28FjC zi5KI+wk5d?$M3y{Tr}H_22?gdwq&eL#cxkFbi}^0;unX^N53aZjPaod9kuby5J8g2 z!-TeL)Rw(JLKfzBlM?zHwS`-m;5| zQV=sdzi(QqqYgbtyNT4M+A1lkaBxRk-oes8B#+kOD8?0YQjRpLGM0Nko4i zx(J6T1!BA_f4?Fc7Slo&777;%UtT$g&e;|B`+@V_DG4xOmvC}&qKxEoqC$)bbPAU= zgsl{JjWshM=@~=h?c(!!`FJHD^GgUT%{!lq2Y*DTzWNIZ(QzR0t*6V>&87_@wi4mLHgQ3a>lX+tC>U+7l|9(&&p3>ifyJP$7(pR& zy+L>8?Us)Q>ox7iy56OUGcz;Nd-#uc*CrnQ@r6?YtJl3AcacQqssZdtznr|#CJGsa^|qo2%u5QWgK?VRo1j3Y|aWeg(zyLF4@(b?2-~ z@DLD>L}d&ma&s=pgBk?XU%SsQ)zSUu`4xZISdr^lx$1<)r)F+<$)tiSbhz)Ydr1 z^Vbi3r76%bFz6I7F$h*SVbXmb)3L7A?fiZ(m*aKx$uAXiy#Fnx5nDXkHN1} z;YYudrV3WQ1SawV85%Y=?X`jgDLKeSGE-An?6cZ`Txb_TK|eYj!5-+_Q*=lgq(~yZ z*eJ2VtSv-H>}@|pe=V{Rx!+L*@Qv4yN3qdS*2F<_|7_}CVJ4R-&^cdU4LJSl`~My= zQW8vHv`ChDU!?uB(SHr5T_`YGT%w7GvHu*4zw$PIDqytu+gu5`|JP_?J&#r>!#w5x z7%dMOpLx2i_0-<1|DFXKypT`*)BAFvwFmSk?$bLCK$NJ$y)7Qi!v}N-&%!MIe_c(G zm>NP9G9Fq?-)HrU!x)Zd&G(gs>~f@%wGQeU(@KuhYreH(2~tgXXgD~Nx#5}DMid z3yXK8?_a%3x(!c3K_wM?YZxT>9&O63;2MV+T*nm;!_gq!($a#MGw$;md11*72TKg3 zKzDt8ZOG|(|82f-0x*DthJoo@bY7+e%8sQ~6XRYk9_`Z+&DAF*C*u{TK0c(!sxWFw zI5^bQn0kdh%Z#mBYipIg8ZiLBh*ZEiW@`P2cNJ`FP$B_x4fZKsHY3K@sY9luAL&`} z08}l8v+#dsnN=g%}rjtdv*LQF~KZCt%`iWf|l8RDa2|RL2Zm%{0 zo2ABP5}STJUQ)IEr6|ZX;`zRH2-Y`=<$((^U1`md{C(4pi%rR*meKVITrxBPd9Nh(w)_hWBcN~Msw0V zt)h`#&m3trY6|#CxX)2q8=lPiNA^k|#ayq_vH&9=F)#3h{ z{|A4(cfIArbnDg8d}vZVvfHYWXQTjB`Vln>fey8hP-kp38Z!ZhRcus{H(kiK=g`7Q zJ$?lxOIhj{_88{&`|-p93IrE1QU(SY9gkJ6#?$`(evBURND=|E<%kSY@3biWk8M|M z#>267mR6JPBirdD6n9r7(SW*0!vFSyf`vr^@Qnb!0M_Z+rXe z#!lKqbdc9?1+W0QhDvg^?ZRN$o$j$1Hpxm}wIP5T2 zXkS005yIp5X`s4@mhI7%2aYSd8i`XM*UH7&IgMy|E4-SrA&G2}&-bPSCs)LTzvNSVMgHx4 z29=nXVp`X`Rqs9M^_i*te(CAiFWs7ED4cuiwwo`2jes&U-4-1#Ji{NTR8Z*Se?g`3 zvQjVoGlQ>|+)+bo8`iD+55>cgrf{(^e$x47XJwu4Qj?e&b&`bP^vMf6l(cP&8jhZg z^gB+oj}E1P9~PY#3$ZnqBk{<9=zKz|o*?yY0&w7MAF6=dhmp^%QV3HDjOSrF1c7H@ zEKflMpYBR+5D1h5z}(!$-tE+za~9=*$7$XG9En$se+6J^ApyrC8j#KhR<-?bq!Joh z%__;KWCM7#N1iH_!Ifwbeb(T;Q?Vbgfg_8h!U+v zsaEu}SimY3VSH<7by9Wum+~ODh+5)aUt;JQsM2PaX%fMmHiWO8#Ms!?U z`tsJtt(%qrZq!5wHMEy6xy<7M8Hq&3ZQ%^G9NpDU+q;;62CDt`R@3uESQG+2fLf&1^TIa8Qm)=8etG*5sxZRSBe7U$0exfp*>qCYBa>Pg?0V?LUa{>Dlx2bs5 zL_x?YE{qv%Kmok2Q3*VlaZ>Ve)}jH{cbEKeg)4CR&003zKtYCgI@Pi~UcQs*E-h5L ztDFGp$=CDqS+#5tgksOQ4z)p-ldrzQa3kXDv6IbL>$hC@zm()PRp5dHj@MDmq*Q94 zU~-#Xlf7L2Bu9hrTA|&7##8Vq7irV|00wK}{CU045p=l-dpvRrJX9Ik7Q=`LA8+ah z;xqF5>7NJ~A_#QL6QEgsc&?rF=A>$LWwujFCn3m$FCsX7^x^4Tqm-`Ah1je84Z>!b zviNZk^LS~25>kE98)$)(Eyvv~Oim3xjt^$pzNkl}L0((Ol&O4M82BB+cxV{WABWLu z?4rk$qq8UqS|;@{7W4k_kWCgus-T%tDJ~|a)(_g~?(N;@n72W%8gScOGuX&WP2J6@ zc5SzXWWBI)xZtTxYL*6wn!t1Lv^+h1*8QElIx8s^LON!J+VSP(7}9zazuU4oDDho| zR>$|H`%5SAoMi&}$yg9c4wA6j#!vm-r*pyF_-kn(@6U^eSVmwdKE6w5Gb!_Gdt>4B z%_=|LF2CX`WLpGKbrRh+#K-02hy)Ehsi>%@#k0qkE6RO0La_R1Q(x6ggQrSmuP=7S z;`kpu{#En5Hr~snrflmsfcuG|QCluR$Z8q#GGqG>fUEZxfO{>DcPavIyFDb;f-3sZ zrr1b-9`j71mAAhZN#c0|stNOl@vSvIoDc2Fbs#$PIg0(f@6#xsQCykv?Nm3XTz`Aw zc(h?q7&QEvu%W1(pSQ}b$)cZRhd5)?36V37NBN1^eDWGkQtEPvf}MxeA1{EjE6xWF zovumnubS=keS_HDNWjY6^UmAOdRtC0*BtwSq2ujmc~m@8#_QF$HQrB;4%6Rj`_gz% zch;o}S7yr9ZBU;!*n~=88@Qjn>Y6zg@;}C%dmQVZ@Ocm6)I!M=9jaFzE?d&&34d)q zV&W2@9Xpu~bC2CvyV3VvGJF#yO^o(Cm!zqIuF6IWp092aw9WpWDYz&nN5zaLSi$t) zuh>^Th6_QKPQr8>*zi#!zLabPJaHdA_77pK(6N+;#1Q!LEiJPTNn znz=is@vWU`DQvh9J}E;AR=PtDo)1|OUt5xy(v;{NgelxLtk`{4BfduY(fTu3{X?p~ zYP(WA*%rbE)y33On|nyLA1Dz<*W;$P42c7j{IvWH=j`VXCK`p)&RkmhkM&Eoj*Co2 zF~`r?Shi;T_tV|ShZ>~BN-FM>I;%8x_sC*tzJB|QPv<+|&l2Rma?&~`7{RCKi;eld zGI2WEg4~Bj{GGwL2t!!GTpNnM_i-9>Oh1p&-2*Zl-6O2t6chLk20W_H!})r^!UeU6 z!jEzptgo6JfByeF!Qk#i7aReL8=HuhHKUF$`WF#UR(?d5X&7>YTni-DX# zUTt2dL({q%%S6`?2Jgf5yyBEQ-a)_k%t{YrL*0-z4yl#({@O~B^tkCqi%o@#a8mm| zpB>Gor~2XC`JTJ}84~R!Hk+#ni6p83PGqqR@i7UFiQ*>=RIWf2;g*Xe=E>7eK-)G< zb(<1gDf`vrXyGb)n8V_ETR!KwV&qy_skD+CF&=#P1cpO1iMUi_+t2wCqV;MK0-de!>o z$>5;LN8ZH9YeAh+jr0$2+~ihk&g};LQQeg|Bmy_QV^*s;_UZT!*mz;qfm^f@iE~7< zwMs-8PEwgiDEZSw;G$z^j_gaOx4ZFYc}u20m`3=o{31U_c4OS(F5Cwc?&}k9LNc{^n z#spB~TtFjBK-Xb{MAU*c?|(F3FAr|WWd7g{!L%A2?}M#@gz-OmG(#D&n~nU!I~eUyKgV{cIn_XLRSKuY#$kC2M)}-bbYF_ zYO5Md?cQnJ!-m5N$z?J4AbVW85|vzB&hz{vqT6}30Vt#}z9qlx>#rW;iY_kRR+K9G zHURJU{Z)bfmDSa5GP8@gwujf3{RYzqvk1+)>6k03MUq!Tu1&yDMmCcL?@4Kd~w0 z?U?6+#&n?O=5CsUJuI2~KE`xS{j#lZM&mF*Xrx%1uq_%e#NDMELEb5^leeHk6*z6E zGH)&oEB{m0CR-28~kP*IxxX6RXVz zEFFxn8R7R&vf6j(dB^`7JEn>t64sm5!@{ImCiM6BXB?n7^W-qvf=>$l87wit*SDd2 zfIdRg@S-F1dxGAus*Y=J6%O~t3XWd6X0FuMh?w(PWqsWHIbJxM<(0BZ85pzs^J?Z2 zX&^OGj`=&Z^aY8ND$+Ku|9aY)rL>XmPzgC&z|5rZF%lB`fa62Ph+MUw+U0~u41kcwG*Po<84gytKa0Kr7>PZrPs2Q)Ij4Wjd!7X@Hx7PHy++!) zSBy&G`&Kc!ykBEfWS@b1_Q}EO$D(T(&XCbWp7(hqdcg#sN7yS*nme^k|3L|a%2}*` zlqsZ8AO&bblDh&GJm?Q*ITpgMdJCwCMcEysS>HRNS7M+~IU!plOET;5?u>37EOM?E z?CY1LEP)ec{$IdkLDKJF@8kl18tx}Kd#5)6`Hs*$2NQP)L)(!)Z7Reuvp9fAi7NKM-}oM!%o4hk+&MK8WaKE3>8 z@8z(|5k7LmKMVEyfBx2c{Kk5TsR8tmxLt^l_piTk%kS?0JLCSHcN07VzbJbLasLAd1t!8W zFF*f_DCnw)jt*a_s#3DaFlz1$_llD{^X~|IvA~(m=N#Z1zq48$A9S@CW{8 z3Zi8Kq1=L)oZmmM_t!V7l7Lpt4#btl{A-^4>y4lxEM?5D5bdmZ9@5qQCXek@$LHcQT0ot@WqJE`kUu9f^;`>jpt1Ni0%W_0A61y;)wcmzR zCN!*LOL9-kGag0d7Go;p#xO|;cMRr-VDcIS*>|1nrDQlus-=;@ckZWPfY@EuJZ>fv{gr8PD&l@y}kT<9w|Ru zf1)g2%&+{~5J9lCYZpg^3W7cDK)}ftZ{Nwm=@38bFdau-wTmi0|M6{e@W6S24tYF^ za*XQ z!qv|z+UN_d(#}(4hHB^+B&Z?_u^`>g9*W{aVW11N{&kfyFFBYA+)TsY(@j zx`_*d1YM7KD>m)ivzJ*zZjxihsC}#QR?cc0DGPDd&=ZhWm;pu(h1>PE~dgOj2%x*o6chozPIZ^|eNmJXX9XB)xN zA@e$lWp}i8*Zxy<{C@RV?H6VUMH50E!ap2&1MQLcr>!STojxGL43#Yrt!ZXwQxGoE zA@tU1c1z6kI@5ZtdL@`XwX7_;!Uai=_wm`uHRg8Rv&o0nyQ}ymfZ!Fge}pN@MDQ5@ zkg2WkmftqIBk6{Z{qp6Y$}A%~7Q<;|9z!9wl1ZMoQS%j!H~ni(FK6|Plz%+%^nfRw zp2V>PNS)Lt8D<8iQ~kizMwI0>3agzoyydA6tL8GLWd7yu7RC!p^ah$4Y*;m#q?Rkb zkoig(IavY*{{E-dnNldirYofKA}F-A(zDsdA2p|B=XpV01NFi0`0O#7H#u54#cg^D z+Ntu448}aqzG1X)Tl>0y)=j}Tp9GVe`~vZ_a|wmAdkafBk}w4YvQPV7%V=)xDAk0! zz+q44t9?jv{nSFr{Bf5?lG{^|`8rJNy*%SJN3t|w8e~#gH zeZpFHn#kkDH;RJHXwd}WZ|CF&8$0!jlqaTN6iE+;rE^Stw`@;>{N@pD?_8pDS&3j zd*6b%xNf+Lb?%pH74t?Y_6e=4ls*ps9J6jx$ANnNG#G>Eud3mA5Ry|ZULy)!f*k(6 zLk&aZo=Z+OLhZEl0Yj4CUhN72=fquwC!Q+kZ=1S=yM z*-mISDkVFxpS-K)R4eeqba(gcWNZUZL4NfYCdTdgcRyUm`&u~*h+fo5FC4WyaPvG0 z`YN4FA}vI)(tMmXEv2xXg!5AnD}Pd^f31-IUQkMPn(dFG@_C=lJjVEW-G2FfAb^e9 z*8y6OFB7-92s#l;%ooDQr;@>k(zlPJ*8ydgRT$rK(!}MRr516^J;*`lCko%j`T6wu zM?C9&@`P8NOobt~mr5t9OqgRf78RDcNngHhDD>V?e7xaAXn#UFY0qwZ3l^vFQsbr| zoGU5*jsj_X<;$K*&k_6%qu#!8_=;9zuCdTz+a^rngC+>y$hR>13mUx+WY*TN%`qAz z1v~}zp?LmG4L0`Pnm4Dfy`TC~Vm>%pjrQ(Duw9JZOTPCsqEbJSZZzw7)kT9ObEhC@ zC_3nQia@t|$_mb8Nz3>WYnoud5ilWT3+hZv%Wd*}RXLyZvk@jk-SI2tj1c6!_D3Wc zHJvWHO|g=y5AQXZIaN3Rxr=iGAxH-#oV-MbJ*W%|^wT~esuX)7Vpq?Onv#19^N(o4p7>PB;IU*Px2uRhSG?+X-B{_MsT!&#XV> zdDtho{m5L4Z7}OK;UL&rz^+6|$t0XwHLo$u5>mfh*th$z_u8r)x!i${*E#|%e}Up4 zOsj=9=oE5obH6;QknVb!GK3m>8)kCxg=kp`uLbaFLc2j>YaP5Sk!CMv`C(@Xjb0y<{vvn4ml7& zaZ?PELQX^LN%}<52l(vMkJ}A74m*M@7IK{4!N7iM1I)ED|r zD>u~X0Q#i`Q}C1}x78IL?UHfkX$CWWUtK9qTJK?W+5V5dMeLK4wDQWVeP%vnD$D^Sm-pjBgQhv3h zK+2hn?LR|PM0UttZ1F6y&b~OoE$Hxl-&QItcpK4*X7ZT+mcEn?&f^ z=+8H2iC$!SZ_#^qGfyfMUuV{yzb+%4*7G~MMMC31lu#Rm{oPy z)deG%*=<@|OCFDjW?+X(4-a0!;7%rUf;j$=%`qH{Rjc%Fb_uig)i;S74JqH_@FmyI ziMI;O?+*nbq~Vj7;W%2vM_yO-FmiX0-=8_At@AjR_{3@pC?M^?K_glHVq7{B9)#0= z9Vd`}4ikWQB%8vId0~a4aO5K$&`JO62pPMCn8lff#YX<%Mg=B;lkJSrQ)4TH_O*$!RuC=5hpV?lTH}qN1x-Cl5H9`!)2dR**B1pLZa{}} zs&4<+f(r13dXXM2*aKbB(EEMiz)R1ZCnMG4mt!tk2Z+$?3SC+(xo9`?eX;krb!6pC zmr8(6zar^*Pddi<4u5Mwln#e%;~NJh<6E;bgc;YBoY2p@Ee}XiDbbg2Uv?hVfJmXd z9T{YRWO|a;b`P%r}+>%}o&hZRDDZeoFZqYp#uI$Tm1x7knRrY?naRA?(Xh}ckxT~dCq&joH5S(j`8=?cCh!FYt4DDIq$gc z>k?B9ZLG*&bArWI1SONcuJ7#ORiV#{^la*T;QoR5n!0UfOTPllF&n>g_4p*vjj_V( z>p;Hg&o!FCWa**OF!apZheTZt6&xBiFmv~q7ep2YnhLGqjiV4mmgF+E)#xC5BDA-! z*^jGlj^Yp-8rqdr!Hg%M(nDVvOj(W2Xy&rBQ<0RWYQA|I?#WmIz#|!}19~He=Wu)< zbR5|DrmKloKc+3dmhjj7C58tg3oig#1c?a!ckTLVJk1C33Cx%91v=M%!484Js{p}v zu?*AGk^lMeKhD`NF591f)_Df(@&YaYEm#coBH{D%CTSu4WqbVVj{je76bt4PRLFlB zjt>GG$VAX#{_6ez9lhcLxdz<-dBA@b?w=3;vx5Kko9Ja6@J7fC!hiJl$2q08@%ZKK zkogY(UPxG6Lqa0eFf=hd+mGL2SYQ2@ul#8YGJKCYB|b~C?Em(vPd!EiyBS@TPY>?D zKBss+=9Iir8O5ngozz<&YE#cSH!Jk`!J|*x*mxfc!ynLEf z{5yLj0NfCS4JkYFlfdQg?{!K+G)_(7{?{M+2&I@$mAZ%ljF!>q!XewI0P?56jz7LA z7WMyWZ_y$B8@2c{yii-ayjAD!8W~#2dQq`aAX5Pkl|nS7`4Pv?SZuq}_S*!#f0>?6 z&Okw-F2g4)L!<_ds{i8?GDJH+KSuIkTKjxwV0f;=76Kp&*0_9dzzAptf8!tErRI~YrEnj}OqXd;+>@ zWH|$w2>Ec9jaL*Q@%--9H17oko!ulozQ>UAqdFc;llY_ThXedxnR*8x!C!CwGVGZ zC>?s8WlW9EJ}&!`34?i?{jtt(DgKYr9#Q3% z2r_N-cLd5Zysi4CJYd__ssnWR+T6Cm?}-hjyRw<>51_h8WqUrjdp9S$9cK_3YyUC2+dKx>jlI;` zLifgTK|ea{F-65p05^FJsf;_Tmr!LkA@qo;eU2;@{mTY|zy=P*3=mOkeIgotB{w*W zZu9;FmF9X%`wZMgBvXh3DnkYj_wKdGbf>eTLurDM$F0IZmq9k9Yyyw1P+`OQ3)SjH zM*@Xs6ZGn}?+fb+y=izU0E)wK01MdVxbjn^%#clNghDa{v@jp`U4!(o18bt@dOOY( zMfSDXxw*Fwl+F3BYAmm3BW^TO;?}bCKoV-_3o(KOnPksYou!%5Tvq{IM3@s<;mP^wJ1%5(xy zGt7U6NvkAL^Y(s2bXj6t#-H)7H!D9lUM9y%t}8{fqs% zxDk6~ydAx+Fmh;Xgi6b))k7t1oZ8Egq6K-ErNH(Z+X2*J)_KhWO8xoz ztJ>}~UhGXBPoONW2~hr$FD+$0Hp_|yMitnz(}5L#_cUxCIsOrXVXu{IQ*a5|@H{?a zTj&HD$?WE<7J?(>x38sn2>{*5J5uS>{k#+AYv0A7P*;wHyhscl9-dN@6^e;o-yP7PyQ{m@p&yS6M7y#H=6jJEws{T~9b-2_DvLnzCXn%bJ&$~%_ zKe^#=Lxo&CM-~AcdUu0LMf=ruo8IZO7yWNFCLnFKI1JB65<1i|{{uJ%_p+~e67>)u zL$40gLs(N7H1{KcCjT5ko6;bThstvRth>XuEkjdoIj5B5c@HfrDR~CB30R(8!_B@p zb5}<|-5&NH^7Yk~YPL$uJEg+w9vc$l>GB*!%Sw^i3bSaf!G*b;veEC(1ppw4M772y z@}r+$*8@zG{+Mtph5_t00k4O~gx`+$H?<1WEwXuI&|KX5@?gV_dzOk11Yosh7iR=5 ze~}id7;uII6dNkA*(1n?ha3I}9X-cbv>8CJLam2{L=XVekw?eCID5N<&3;@&L%LO-RRo3<-1=ti)HR+gmFZ;Ev1qJiSRmk{Ez;`}Z znB9jpJ!sLhEx3iRvsp~DXrfw^5Gr_F!nJ)?L8^vb=ZX1*g3t9m{4VlL*u7$4^KdCy zZU1GK)CZo%>uEec=WBq-=4tGRsRrRt1tm?g80SM#sLgJ)LYFOd*KTSNgWzDi8V?!` zhNdy(GpKO#_w)d8->2%fdIpPbEE7wgsUjd@kjk;IuxPbN02zic#jtSs)1k5CaGFl- z9&CEMNK#N)Nd zg?nl8K1R!Pput10Z=l>+yNd95Be|ynJ*5F*9ZuXg*(2^HBdUj>a*GtEj0PXPuM;fX zvhggA1m1!Nr+_*cvBwYY#Qmrs2;n%hzoCSGdzr-EK7bRcw}N{R{E~n;WVBVR}YAI#PcdQv^Oa&Dn0U@?4f`OdegSF*2PSJ zSOgr5tuIS9G7T>FnVXl=9e`#y7%f;3Ecmn3kB9GzLwOx`V`i>D3xfsv1n_zk6+ky$ z9_QKdBbRWm0-SuB4jX{?2o4U;(dgZSK!Z{EZ0OaH%_3i1yLX+-6*n&z7gv+C_sVY# zS)E>d8Pi`GrBuU=qKO^AE5+<^Ceg$oRIoAM8-U}k*R~SZS?UYz0W}pktr#NxZt3vy zFuejfE2unrjHP`raX&M&v9TGtb$|BNidS+ULMQg&I^O+Kke(7JuET;cw3ERlcH)LI zS@DpO!GboNXMgdd*)D9R!#LBRRhN^5hos7X+4|ub&ChqCa+u|&Qvx9boG+UrNrrvr zh`IJZV*PS%{ZXlYO%B%1$FGc1?IS})hom9N)wJ4@38v1}O7CrB0%iQc%H-CG^%p~4 zwTECg0Pb-kQGSIM6B~vd`oN}qhhe;RZ8P5esm1^K8B+^_y-{3XNw6pOKU<$d`R>Vq zz~#Qd5&zdr+@HT)#eD=tAkpJd{9`KreDJ<~tj^!M9=x^r)iM3!8=bEnK@qrWZzO)1 z#y|b%tHTmw^<9|c-9zhYW%FSbbaiRV^x{eva7j8N2f)k)hg>(R1yK0?R z#cy+ZjO9%NY6vg-89xEL^BC8R)^l|}o&ahSTBM+Qc7nb*B3OPT@bnU@+L={hfZYq3M{u&})6u-_c2$K z&TN>qlMZkIm2QSW+uUASn^6TVlg5Xf`{Xp}Trwu+jr1sv|HBvE!3NCBSHZ;#QP z6)ex4UA6g*V_>7llF!w2TC)Pc<#o^T0Kn#U^6BH*y3Z}t4FFFSV#3c_Pk85czJVwj zXssD^Pr3a%q0K6}sduq|vDNqrCdgvEcMBaGn}XR$B6{fu@36gP&6?rd1S}DfZS}dF zG@2{Pt5>o$s!pPS$muXEETK-N=Yl2oeI)IDc?8%N4W|LFLCbg9^a`I=6}%WXs%J7V zubibM48`7<~@* zhR8FM`CDw&TDw>}?Giac_tg*1dt=IE0Dh|ui^Y6WhS2l&Re-!j#y z2e2Nb=^?QI`U(K=0X0BxhRwV7LMB_vg5ZaapDAdnl$Y@;4`L1SCm|+2-GzOF^2M{~ z&&hAFFzT9@7f%LwzKxD5#J)8t9nDi$HXYAT-I>{`5yOK9i-7oPvslu>prV(8-whFw ziqfAd!(^{n(e%S2A{XRmR(FmgEc#jIhj!cOl=QT}$m` zz>z+%4pxCcS33tynTmN)*L$w%KPA^jbL1cM6P%SG#Xjd)iV=d6YRmbwNc^`}GSN$W zTmXs|rU&o@$@1UF+#ddLs%a8-EMRh~_4L%d?@SNrIcQ=WT&cak{&ak?kY|5Sow?{0 z2?>G0GgMd9Z+ixd4bcy=_KDVccSsn&G(9aX(=qwff|Li6ri1T#Ko2TJ;ztm(;bk#b4EK&Q z>@ch8XlU)W1qb#L;FpYaLnwGt9sP~ErgqCOGKP7LI9e!y5AoU zOqY^R6^wtH3eir8!jp*yZu&k684tKS@%C4d%1UyG zM=a5h^%esns*9#hk1bSFbF~Ygijc;_?-7+|VBH_!z4lPQ60iG|RU?YPDf^FPOYc}W z+ztnh8|+P2M23dyaQmkmN%d4#d)i@D2$_r-PK;)9%$lO{9@|3gLB}_EECw z9h=RcLG|}>Cf$3_5Wtkhz{=Ep0?c$?@HJ91JO8&rf)|O^6edhD3m+F4UE4&#ojQ+f z3-m@`V!?cU(PM1ArHP3)0rm=hyzolgBk8rO!`^J+PJD}t4Zv_1QFwm$@xYF$?cnFv zA%1LiYDd`5@Yifd9YlaK6y*+BU{4f-9Oxl=aE;S(Z@dFYY;_sYBzf7&2w{2v_+QOz zDlWCO6IOqHI-YhT;HI|cr6Bvu_E z*q6g}D#aD%p-_e!Iv_a?m-^V|=rn6*^Li@tG$9wWz-qE>aUPR9a!nrGkEnV;CrP9R zH)71-oHxteHA!@(fXnCQIY19n4nX^jND2AA*l2nMDR@7~-0Ls!xX1=`K@lZz8WDz- ze)s{?a{iUoR3W_#%_0#5yw(DQ?ktkAAGT{bbdN%a{jDU6X(2*k zGr?yug5K6K#<&r3Q-WoJVL~~qd5Pj!3<)n^6n?V}Y#bLJP&bhL-L>iD{GUJvp6uu46I0NMEh zuLcS!fWZp0vq`@11FDLVDbsuS+nKrSWQ0=;@WOzcgm4v*q}Q!twEsSU@$YO>bwb&+ zwKikusC=%&sAgQW&Czv`vYO}zg7;Z0b|^VJK$)-Eg@lrflxP2%SqVl4j@W`Hizfp1 zXKk~kpH8=PZvt38oCY;w3a;1N=p`=8fo%zTWH)hz(69@X5eu@!>0}dkh0}9HOwa?G zyQGk(n|KZ`0T26$`~^IG)z3u?4Y@D#$1#_YjWqB4ytOAI#a^K&423d^$7(w%9-*N0 zgjRr5$e}rmCJiRYxMPJK&J3nYJhKHXHz``qIK)QdlF7HqSCmS!JRAtz1;oU@iJg%< z>zilnF%4347Tfqv@ddO44y~Ly^B_CzSB*+mxs+DBa_Ou^xCnG;kz{i`C z50lD-uBD&8g+Dq*&1!9?cgFtb&BJ^T;e5lpYg-y0%?dhV7J@MYz1Yufcnp(;T<1>3*`R4Qs>k8T6}-YJ6pEo&J^y$8TwUE?q51 zm@p1+lCq?O{B;j*u`9(?(PZ|7sK?gasprf-;@?jWK>!E?)h7TV1PCBzKxox0?`u)P z!Zq+_my^};wfiQj+zloj_j-cAWKnLkkbnf4Q+#wfCoB#(dw!U=aDEzAT+FS!XWN;b z`KWEbo{KA(9u^J&m5MDNC9)6NFtFz2BQHD9g?}I86*VsNZ{z%4oza%im)TOR{;yGW zYCZ-X3=jA_bJh4UdcpPzpI@K=JdhtMg}`-!smikx>5=gnDifi!=HxmUKC5vH#tKpz z`|(@(){)zcp;oG;-L(NgM$F3~%0%w`-rQ`?h?TY?b4e`WMN#AhwDojI>ptAbZ)9=^zvo_HzwHUE@=$vj6+DU$z!u3Z4@?78 zUJrZI=l;0h0${6Ogz4K?LcfeKN%zy=3Xri1R>4SpNc{9!`%*EEc9|yO=1%^IT1~B$ zqe-tuP64-GBMfUGUE7|W7vTbyJNev~tk}@joqJv^U3vo-{cx*lA@6$=rT9>k`|4$k zFxkz(r3Yr`nM*>C-tn_9N_vGg_>l5 z2T=WObYAh`Jd?;RaKjV}ZLEB;v;f(oq;WVb*-;zA9&MuA{%18e%SXf|`FAN;>Z!AL z6-)txfepaqhz_kc>?w}6R_8`I-?|dW9PZA3usN?>10$mQ0l$>f6h7eWP6)_?OO_R@>( z__^cfzIuG{2%BpcZ-=C^5#&~m-sS>5$Pn~C3;byt*c3Iw?Eg9B3$vF6ZJ$z zfT+Q1l!xPRjO3xf4?%VM(dBQ^v}g<=ucbI_MS?@N$+Ic4_q2R=&{6J5vnjaqBsVca z_6AL2#*8Rjc)l=3Kvxf_*pYsMx^79E{+#EkC_xP)gCmCVS$oU$T8rdU>(*9L7dsXc znpo^>>09D?@YGtAU;vc9Q-0;UGZb8<8z1S+cjWVmOgK@lg<_0>kfso3pZ@1QfsBHb zq^Baa#=5B^E`~UyyUTH+4=d6%n@x#3|0~7Z8%mC-<{WLUp)a^p`Cn+Ekt4LLjb5p* z?>IqZPE3fsD~v=o;8V#?mCKkN3$xOX??;sn z#HerKa`spX?7eI-%alkK9k*9O%lcl`Cfu}TsEPzYeuW#pYMP9dP=@sr4uSSQ7@(a^ zyw}vHgMS$z%|WKyRdsEAPnOJ{e*=X`$H5$?Q}Omfv5the(A!$^v#b~b-90lRnbT=c zzY-cp{Tai}>HvToMx=q8gRB*YDtvdJlf$@kGHDS=w$(&TV@d4B4K}W2TkwJCq}5#3OWF znkuQh+QHWqm(N>l3fm~vrozS!B1~>|uW76&c1-=huGuW#WJg4bOs{jpNm0=h3Y*%5 zHA)N8unyL9H5eIk#S;7=x)pk!l>t4?itvUiJ*C&0+`}MuYqt|?bch`=zgT@& zn70!n{BQE->g!|9XD`^gzD5WP6nUnr{1vQ@2p1Y60{mw;SQHe{L&p5VN+i9o7MJ4Y z=UPh-Bj1MK>>$vF=%(1_SU(r6@CB-lc-~v{HnQhE%j^qk*0 zs-t+QwODHQ-97ef$U@WH4ZR3xD&bHuI?NJIsJ0PTKl2PgJx1&@^#=u3LFqh^fLT)*k(! zz`$&F>h5dvWB0pGQO^^|=Bm--xwui+QL;e;u8aV_TGQPz{$=Yuy_Ud>h3vU!Ixj#t zbe+CCb0kcWY=*nb<(JZtu$4E54MlFX5*7xi_8K;_j;w^TTlt5wY>a@Gi_! z%Y>^L+{Uf<2L}vfK1E6pyveMjPQ!<)b*lxvYxL9jxQw4mbkqUeW39qNw%w!5IS7v^PWH8+!~vg2W6+8xNiDX9o9ii&K;z;ACU z-(6XIU4;-G6CMszJJ&yC@UHjYX0U&I!0PMY0rq-XEeEI1B4(Rto7nt4M0u%S=T4Sa8b&{?jj zFJy{EUD@ByOIn1QJxc?>cSgCILE|WEMYl(D#=1_KI?v0SgMz=*B2RF`x~`tkmXoL+ z?FhZt%eMkz9Xb&DuvueeY`Gr}6H_TZg|60Z`na|a0U7`JaB$pM5J5r`C)@H*%`Cz`E#}5Y2F6Vw`kr3_#k{XpqO}z2u^WkWJXBgeMXxg zjagCvP0|lY8k9~-pX!%|Pz(G}gsd&XJzPiWN?%x>ln zZ(bwS(Lmkh7VrjBhN|QAX_y^jr9zcOM6aLo7idw{5lF_jmY`P~_904AKaD)LI3Oe6 z$IbVBfF7?GjGfVjtNgt4O#d0h5zuvzD{?6bUGi+vQm3~!@rG%G>B66QP`CW`NrwQO zZUj`Z&mjs!s_%1b&_zDO$*T0}Pt|GRM)QLJ7um0VjI#)6oea#>C!22zV!+j*T4~eL z){_;z!M`S`U&dDA^0^x0cswj!c;={5eAk3SQz*VII~j{#pRq^dZ}V+#C2S%8N|xhC zjGM~fb7KIU)!QB<#bmQAR`d{jFP&2E2=&ZSE^2aE@9};JYO-xA<-@~T~$WvUHxwTYU-XiAPr%bk9 z)aY+GlFJ+kt1qFtQ1@i3hPL6JAX(Z z&P8O~)=u90FYw9RO_cb~Q~k>31wISB1|fvXtlkIUq;s(5VKex?BSzu{{nl-dbTq9m zQHRK>p8SknmLH_}xvD3X?K~n>=weII{j}D^WypNKaoOUgi|8ir`!S>Of_ph)lW74M z6KF@%4ki=Y=UJ;G9{+66BK>u2>^pljE;=ugb&K3B`G#XjS(ZQSY-? z2vT{Q*T#5(o0Ey2Vxm}F=t{7m8R4#{!3fvy?^@Dc%TP0R^JLD_D;zcfQ8%+-aL36m z8vVm&l}Vrs)hl9`=ubq~oU?jCeLXV+OIm^jSE5ZNZ;(mRRss%OXe$|2Pb6frPAPw0 zC~-bdkT6q+CT?>RvvZSdC3=yw0k;FG!ahk3kY!B>P}^&q;bi#`38;d%sNa{F?ue2m zxn&oxec-U}KFMHgfc{<@;e{n))eu}O>ZYBh^J(uQNgdN7Ef~=&EAGUZ>aUFa}Z<0{4{P%r}8!M z*0hdr0Dt%wYRh*|@rWZM7Z%>U`!0EVyYBu=n3TT55@VZm{LcI?7Ft-wiqC-q#Wc%E5!H7F?1#0}F0%B54Uht_ z6KNr4Ng91J+pM<1kBAp-lhSy$-q&zm<|fjFjh(xFU&+~2f&M%c+Qs@aWd5Q1lic;U zS19`gS&a3mLR>ICu06e(#Dq39Oxop6o)Q=@U)vfwp1L@N$aZ;7|0yw7>#ZUvhdb8H z5V2+T^9s(iom39n&&fpMyfhsD=X7XGx@c9lf^lI2)I5vh;IuH+;%@^fIl=Y6)A9KN zH_r?(02xtCoh2S;6!q?#DDA6e0fb&oLTh5)QIRG3qnJJaV)uv{AGtCAptWB>^U@`z zjD);`X?vKdL%pQ>QsuoOO%p1BO8?nQP617p&)g18VfSUqBo)mU6{_x=DjB*-S4ik* zXf0ZN?GRKcX}XXt0wB2zpk4X6pZP;b&zb;3%`Ca&Mf?C|&D<35??9`~-N7*GQ!UhT zE?a1>p(O-z82)T+YpH0k2L{C=%sC_wi|JZ|ML?WceK{J(n=Kouh%I63Z~yxLKY#uh3fwPRtqKd)@7L0Ke8ec0jz1NA z{t>g{BmM~7@5jORw4C3s1tktVVsQpL%J0)iLI&LLM+R(3!GACF$0uSHV6lAuXG#89 z^T&1h|9weHS~$=;_){{V<>chVYT@yTo|*;(Rk7=VmgqtiqnGgK{M@Y%XsQ$OWxp?M zGbLbeJg;Qop8gbg@4P!7E%g7uUwrY@+i|?+lHj)J)VV9x=3{iXyDU+yv_#=M~t#|e{m#yP*qItm6GWW2DhHsa3~VODZIKg| z7I<~HJ4H=3$6_{1i!Hv#fC7z(hDLoxW+v8TL~9gdaVrFZaSER=B!G@BBL^T0CcLcD z;T|4G?a}8QhKD_j-l^{_qk)oeSM^cRwIV9#9}-r7ZL@rvaK_T!X{Xp$=e87rNQun- zO_|{ExB#b)#B=sztsM0WW7k!&NE(1YP_ZswdTpk{g4TAuKhlu$O@(u^$GK`Dwve!} zxRR1mA(y9;TaNThCb(A#DzDo2cLX{0j2&lZI{OW9_0Z4>d)GPMAF*g{eBc|$rP+U7 zCh%`@thV!?7gaDZ!KlQnT5{^jJz?}ke0=s7nzR9!oyElce1nUcKR^^Y4UqrZjss|2 zdf-rf?RgIo?|FB2w|24M5mjNP)O~CqzSih^(7%#x3v+w6K~(B8#{2rFOqz_fLMiFB z)F%|*L6`DI@}`HEKR%&YznNM>&QmT3Rqj0u;EiUiIBRcfo3!beYSQol|1=+XS}eqW7yqI z^ab1?i^nZ(C9Lgp7h2bS1kjNZ0*m8H=P5%SBi0`&=oWOoN6fH8(f zK@(Hx$+6%)h&|YaWYl-P`k7blr|8lfIuc@V$aVlUS;4w9*qE5$>ET$%bvZt>xAEL4 zfk81>;oIe<(^Rc}{GR0CMXlLdQr&}*FVZx!hWx|*-D*Fl|CGT-^nMjkDw5U2-iHFN(%@3D3y_Azy|K`}piNFN@2QS<+%{h*EO5Kob1XIN zQv*zgh3%Mes&qPQC74r+=koB~&>NGwkV5&x1SBaiK3@o_0dJ4H>*;1M%MoWJ7O#|< z@*ot|L3_C+XbwALMrG}>j{CNsKSk4pkoS%Ou1WeX|3c>_GXvD8Mg)fi?&*SrIf_T3 zfRy0yXgo^ycWHvd#UCI|^wz13XRE*I>+5&!P9@KP@jrrxlm~h&@S+$rO?hFFHbK1p z3+w`bY8gc&tzs0lJVh5)gKHN+L~UNRRn&L~(@B}^W;)SyeQfI*w7-!^3u?Fv&I>|; z-W<(I-&-3@GoZCiZxY@fWf#NleVCrT)g(vdc{{Fn9uHdYS>txC8=u3mtaVO7Mv-vW zi$fxaJ6ZqePgt*geOfczppvxqNN5_G%I=M_2cL>Tr3As zzuI@n^Yc7^fi#%W0(S8M_65seGVn6F5LFj#$YV`i!3E)6eAx`i>MD{31UlUkI-eL5 zu?F<%8Bi0jugKo$nL)jUXNqw6;dRDzxmz}MK09#WkyNu49GUE)WwUhf|9%QDmzM1HX;SpkE{ zvNhsCfc`BZfsEs{S(H{O-wON0&6GQiqKT)y!XkRhKt_hcN~bCB^T_<=<=c_Er3Z7b z#p52=$yBt5+Xf9nmIg=!u@_)g($nF5Ak(wkgd`}b0Z97nE3&5x4LErZ&@9AO8AKPP zfEZPmJL_sRBsP=PC#(p@h(-rwoH5W7K1)IW{6*&_>7j@>_)|D;eokqHh4;s@KX zfbXw|>F0?%Ft8Ue{t4FFMhdqvXUdvgh8$-V?!`5a1&fk5GHh6^qqv4sZ z>4=sskwkWaLl^2|zcUTLb-p)4N#u5zS~lfj%BPd+T#(f9gfZ3s=?Y7j#k8emj6c-{A|^snHeC}WRKS)Pz-XbeOt`CS0>W1 ztbg)SR<+Y&>!Yb*9I=e0N4Pp^#>FE64gb7;HLH_Xl zbP&OJGYA;GH|C-JnzhaiOXJS)b{-G}!zmberqaG!>q2*h&mPLo-kz~1zZqGX0H8?U z@L=c7A&EFz(oo`6Doi7VbAIGWY4&d{(X)$t-rZFx6sRe}#4h2oA=eMVAi~65BZ~F+ zHEj$+87;rNxa01r2I)Qj)oDx70pFuvyg&E#IUg()+=`TuX&`Ul&Q&r^OyE2UvkaIy zI-|Z1Cg9vtho3Fg47}FY+7LWk>#E<+DAF2bBe@JejhVJx`kE7-DH&h3I<=8B!0N2~ zVSD_D@%l^SS3I`sdUc>_WseDxz@xae_d|-PFXW3L>v4M?NaUBsFRZDUbd@g+9(~c! zzrvh9ZqJ(ud$Pf?C?j5Lvpw>3UQ#>qd-8l341Bo}|63TuQ#Wyg=H?kcs+{`gBiUW> zl=zIiaiVw_eR^1SfHF2fJSf(mMEdL00Dmxr))lwtF~)^xr?Z-|@C~dH%6&SX_b?fgX)k1E z4m-(0)OWQU`_gy!bZ>vPRUJw0nhP|K z)7mvErmbM;51@js?1Ez2Xyh6tc?0qsg7ow6hqB$No=9`^WgtLpFuatrXFn*$7@UVr z>U!>xa`i&y5I-yB#yn|o!nR6d2jFW8+r7IX<2>;qt7>e`_Tn!@cxkt`faCh*eaEHS zd8}(?ca{-jm@g;WRXr;7lZf-P0b(7rF(#f|X#PtV4 zK;q}#b|+BvO1&wXR5*(b{7^Hge4eg36w)OM@nSmPlncFW zq#XoUf3~Ha_W7abHnof_d0co| zKEAVs08js5`NGCxBC`6$*9-xFZ@KfB5pqtwkOF4u)OXLGe0yvFWf672CK=Hg_s76LE;*cJPz(%`l&f3abIt?cUgD?Z(`FjKv_{ zkttXwrI4aYbd4rs*`ts(WZxTbE?p_340&thRavK-t)3y#pp+He?jfqpBVFlvT&%x0 zXSpM3>`mgPR%{W3c_91k4>`$Iq2xQxT9QIN4&)c^Gay9!8@= zM00f$_M=O)EaFhiHA(8$>&b4SdMkHs1^(Ub05=oJh&?KIL(rtyVsEOWafQ1kp$J;7 zv%DQH{-0e;O(Ai>Jw?3Nl7 zqG&no+>2y$P_JX}3o~ETE+Z{c*^;B0Zg$$|I{+gY^8(-0b+*`aX%ShW%e#OAHEHx7 zWk*C@yNF&*Ljgfs-@=)^i+HjdHu`9bgE{&m){wFvly=AM79;)~V`6RvD}r_RpodM5 zfLHcg3E*R}<)M-TnlDvv9ICt75v|99EB1JbuRvD^4XzUL-Qv*97w^u%jT@75dZZ&(yq^27J?0*3CkNkHY<+9b`ZzV#fDMvr3>34jR-}_OXcU`$AKzQ; zk%-Da(zswKw*A?!@bx~T%Sj>s7aQb(QgGjo6q>s(=8@@rk`M6fTes+S78k8u4s3g> zp$0DWx19S3GwC`Dj6^*x594w3P^9`snUrgb=Vz6(-hG~3dD)b$g=}*&MD?2mnzZJYl4xn z%^!3k_PA5xhod}5R82Tfpp<7F$^vJyP`{lv*(RLFS1A~~_ONn|5QF3(iA{(%o zK4uRa%*gATkWLgPS^CI8Q4|Qzb8F;EoI#&#Ru#>P!Lj`+PvbZ=k1+ef2Zj7?^_^yX za^g3Pd@F>l!+=x8z+R?+aVM^Lp7bnODL>li#-FZA(buOZ-WVm#c+P3cKh z#Gl_Ee<%cub;PE?RlN%kEYt*AN6RI+NndH^ve87tLMU6N1Ha zS>BhCJ33x|k8!$*^5g30>gF{Ltuznb(<aSF4H2v1 zLgy7p>949`gZXt4uZq6rPv4l#VCb!kY;X!*K5^2B=^i(lHG{Pb2$B?T_|pz`zD1D^ z+w&8;bj^AD+uQLFn2k6(*`D?Zo}r)}&p9dl@8Njc$d0-vh-7+wy2`Aw6pM>Vr$SmA z9FwdUnX}x8D03op(e_cy`B5#$HF?C<*dm;F#! zraehShLa@lg~&;WgdHPS5Z&V-`Z^p!Lbb(4@lRXsDcmm{`rU^VK@z$Kwzl&c4jxze zu0x~@M)(NbWcU+95+awedFBcvT6LS#U3&cf>YMdgadvQ`6+0A@>;znp+=O){Pl_Xa zB8aPvD{x!#sYh^7TFuX07Cp$2i8p1SE|%c-XBzg>XTp2+{W%)7AQ6&8lP8V#uO}pE zCVMQ0OCC64wKGqICUpdAge=H1rT0Z~&ORx*!e?l3OLY^v#x;~k)+|rCQF51K#aH2N zszaUbflZHTg~K4*4YyWD= zZbt)1E2`c_5{AT7iE5ZE;HDa0JNTth5D?0(tUK-%M|1T?VtUeb-wW)VHmKd)b4RXgnLh^R0^V;G_Y(v5qHIwtkT=i zqs^S2027L(yy(il_?8hBJwpiV>gm#fWU^^;y|{rS*{O0;X3oldrM%10J3G3;g*?%9 zy=w(l#c-a~G4cVPL)k0w>|s!7&mhG<`_AC!Hj&tiwn?rnmz>!2 zO6U;FqgZO1K%!koK}uea`xk&_O(BW>5ec=1wNTWx>gFYqoU+Y=Ki`>oexqMkc~MH&HfeHObmYo}o19QOV4Jn#Fc(yXX#}5n^krZyk zdT7L3i`+&BCR&S$XL$iM;l>nHENtaju>8bwc2oMCRRUSD_)JZhSn5J#9JMlR=frGq0S{aUvo1fkHfzw z?VrImF&DH`fv%I5azDaTANGi~#82IT@A^!a&5v!U8tgVvlr6 zO-4Zu_kavn{`%~%5S-5%4xn<%e49%h#S!x(MFlqp>bDor`|z=rsx=W__IrswMFn^@ zF%d~4e@`=@X+6F+J1#bFp3dH5E&?;~G0X8G1N}eD?Xjruq$%AG^ZW3+&wwlkU68^r z5hrk6KBq_IK+#Uu)bGQ~&^=~3{Jx3({tEu%)#Lp>{1-uB_!1^L(P}seC;Nn14ksCr zL@8hu0FD~7OnzTI&Ame9qQX9L35kdotfrmr7xVPOM4BBH+$xC5r~Bj+nvP!w{1F8` zlcj@wo;>u&7`_}t+=TJk3a-<|JGnB$zL&Bnf0k4aU+(ot!EGWtNJ#WPBRPe+O$%h` zl&1iCU>WKUA#woq_9P4M-c4s`)UEM~yxp0q0s9z!wgoaE@fY6UdLdRt4n@;?63%DdlJM?O?s6vi9+fkZH2I?@FlasRP`{6w9 zg%Q&g@`!Xhs>DE7xMjl`cFk3mw_KqH`#_(t257R_+hS!o8GDVIP4AkeZV%|_EuC3+ zJM-H~NU*)RDKY>g7@6NEpPO==jVe|4vS|;L?A+hyYBwdF9xP1Ua~(G0ZcUc>-W^qG zoio-qM=GC3X>l_SleW7TEME$#K`*kB@kK$Iv_ z)6@1E$=P`K$7}2548Au%%;w&GLWxfOv42|oRpRLyQq4h>cw5dZDxX;s=uQrj*r&WF;kr9zM#sTnG%+y|%+>NmN$TpNRjFeiF&UFOyF} zAwu8CXoI~9gsFR?CdO@+10*xm#J=1DtW>`QQPRDOOw=|0E#lJLpg ze$V~Y{;t6fP15@T`}Fy0S<@VV`SuN=_K?z}&hje@NDIgBk^vgBsoqeJF7>#-I! zK-{JIzuG(VaH!Y*k7r3FQ|CAlvUEC;LPFUYQjY97st?X|s$ajG?S8 zmWYWViOM#1ChL&S491wuFoQAX_w`(luIKsv`TP4f|IRhn_rC7=-rM{0y5Da_<4qG3 z!W8`(QgdtN40A@P$d}S%510|ur~52U*ZQaQa5v?UYa_{(H)!O~k97~EwzvO*s@)0C zMn-(JKoyZICdLMLDyEsvDjly~3L4o1_Y|_-uP;u}_lrUgW>bjv=>@Ud7YB!iU}Kjg zpZb&>(qx_1!Qf0P^_>`mgQ3>wA{V+8$oN{@nIV z0%56fTQ<6z7}lk#Vr_2ze2H9etYwS&%4oaYX(zZ4qHG%Lyf;{Uyi&Uls@`YJ!9p}1 zimod=G=%xem@I*`TP)pKaHmH>(@hsW@>Uz8Ia8c^K`M$5+*h~C?#*8!Q{^utb^$qT z7g2rZOkd>CiS;+W*a4_TtOcJ)8{vkePU5dQ{M_%HY!(!dPY1}n;Mi{EC$UZ)Bwee5Z6}&ht&2SQ$PJQ)MPRRodBEdwPp$J=0!lOXsZp6I#`gC?WT~7-LtX%QB2w z&Iq0J%)I*QTHa`b5-M06qw}mykUg z7=J{SxxG)Zu?DzruIlJGp!`mAAX7T3TtZCw&q7sweXA=@ffL}??zzw1jcc?LAgYDA zczVtTh|8&`18HH|QtGbv?Oe+{^;3HD4LX5~*r&Dqi8Z=g$1SIi0}(!{crua%T=^Z# zD?>4O1yh!>0e9NPiUHDA`}_Rs+TI#nH>Xm&Oix?QOG&5PZ!dgm94p=0%BL?EjBD`n zjvsUQJC51e$sER{jCr+Yd!kPam9_Z3r>p<(seetj98zpVcnis$!j@EUsda)Al?&Z$lbZEP)A(&byA#(uj$+)?IlbX)$>;8 zlPU#6w%Gu34-U1xH}HA)aU#YA{jni@LGih6yFn-xvznZ;eH68HmMt;|fE4xi+GRF5 zKJebPM4N&h9KbaoBw0_IUyND}VdX^84_FNB-RAsB+RH<*c zI}ck^8L#%6>rA$1Oj=n%C-Qm)IWGWibKWe$k8Q}=pn87wJfUmn%?o~usHeM!zd2{>xy06>a4WP2{ff6Sg& zLPqdbY)Br6I(h{Q;Piz=@_RU5^zn0)Qa_CUiW_ZQa%LH|T#E!|mlC>q8V;w-nKWcN zOiQ1)M+weLqyhGgitzVveZ=whoR*c|e8aq%c0Fets4sy0zIhmcN2V?GxeH|?dr}OS z^(6n^=-SeqxkxJAF+>4;8r*0b8-)GUcfe;w-C{O;l|N)EjXT-!VFSgjc;}v$gR&h8 z>qE2n5~!vFUw)|AI8s&zss!ZBs!A$1`LU+a9P|X@QiAu-+Pe}~Sa7th(6fcMMBE&& zqZQZ4JgNRLX%XO62pH0_Kb!rsZ~9hI-O>>-0=*Y8F9)kMWhEJp?-&DJz5TD}y8(D?d%;b6lc^bjn6KV%DqxV?6hEw+GdKmdUsm+kvP)D6XRf)NTq*-S z5c3~>`>;71=fSPPIH4ps6q_eWzqyDDYs|@$d-LEhEE~pwjcc0?rJt~#s)gAn3kU^Q z&$UFf0i*L20zg8pmX@E!>GH=BUf6}-tIUKX6rh7fD*BjX2DE6Y07tI2L4g2=z>40Z) zw6trNqW9xAdK*#wt=jephj3P?KcIuiWBW0Jvz|}qoX#8Vz5e`0Pt;ik$D@TLtH+iy zx+X@2kFro$j+`Pc_~!}RA`1)_6fwA~bgnLoF7adjM#@7LYy8=pv3%lp$J|wlJD>Ur z@H^3nppSa~8US!nkztp31?`08qsuoxj#1>9R#wT8&`(<%;%*y_g_1YWMu@CcT{EF( zGXvi0kXy4#*kQGg4@CAf?G?b{Pw25^^{xiKuO)WQ)%plGt^K*ORDd^=Kt=>DFRG}uIyfN`6`mZJJ_`BB&$Uw zb}yubESyN9p6-v-ulikG0#+=McD#DnW{>Ne>wCHIOvLCWz66uF*kU^!@8N2fbTlAr zJCXiiHu>sRU{JS~4Nn`iul}~K3ZC^@2d8Dm^ zNznbCr`x4!o8DbZ48=dP+mu-Ly{n|L|* ziAvQ_ z(|Q&+qkg32w9R1bO);Cw>qEog*`s(>=*`h33z=}1Ek#|VZ!DRl(Ks(C2Su&*uLr0X zvEl%q4Y0}j%yD=1Oe-?BI)-P^@Z+O+P&VV9pGRV;tzD{yyTL<{++fR__;ip2^4p3f z%w8cMoPPICm0;+bQ06!BzJ~XP28_qO7g*If5UQ>A>?~*qWt-q)W!1?hmu@Zc=y)=5 z;%x42`eEyoE(g&-MUE?nX+d15mKbW8}Ioc7br_c$HGitpDfqU z?HFJhQ(_FIFmP(2sfZ5p+*gkHdoqe)94Q(%y547cI_Srr z2?941Z#(oF`{!}a#Xk#@_MSW&3hH_Db`32J=1bBYUIQPJ}7L2-Q~etv_1Ppuj9a{{`3$n$L&|`gUg$*QN%XPl8$ycXz_rD;E(Z zlUnnBtWEL*E$?p@Ioc}zPq8ds7=N0^aq=u_3>&$u-Rf^B6H3abpeDznQ=AoN=YxI< zSmsVjJE+ej-_p~Z`ph0QGzhXUzh+Jhk*`nBDR(4Xme!eQ3QXFgwsWooX@^WF7AE!2 z++l0|4S2g6KkxOQX)^Y1zu#6>D-K4OzwgS(Xp&snKwJUNmvxe>JT8OcHu9IYz5JSl zysR*ExcnKA*?##g=Ru@zrEA^Gd>c&?DEM?;ASuh(?`bQDwcnCcT%|lr(pdbF?|mWZ zDPGSg5LE}wf$Te&4p=(3fqcKBq4(pt?@JvsB z)X?Yn$Q!7;;(t{+I?0}gX3z+8sq?Y4HB0{I{g`l3NDVTg93(N=fOLJUcTuDHwZHev z!k-{bswJ4O*zmUa&Z_3guFlL-uef?oltG41HF#piC?bM!wGaucbqV|Isz0c{;-eA~=RDPq(6MJ>K~JSzJp!tgnWAp~4AOywLv) zAhEeMhQ7PfN?htMq8&#?jv?43P0wVH^n>q+h+q|AHEhig3ZO-El+0C4PvlaQ?%4g2 zo9hahMl+0^)ulb7pS8EQ=LQdB+>mO3l;gEG9G4#KPUw29JLx5K%Yb1P8JT5+V_xz) zXhYwXQ^2WvucvoAzdO_M<$K7zLm`5KjSn?whlKO7*0Iy)F_8h)UR*ZT*;Wd$7f^d? zFOZNwI5NcFU_=Oia zZG~^|^gsD=_~f$wfsf9o-u6DyKVVL~o%vT_1SkQ}i!z62^)+^9teM(9h$HJZ7tMCJ zAU{j|C&l8fXfJqMVU520M>+1_Uo!wvtBH{MU$D)N3}zvINb~-DcVFj!LNzvHlRto{dS+SG@!tVO2icx`=rS}8@T4`5+=w-T?tE~ zcKrM&{@hU+JG(CxJ^cM&m{g4%_rFCrGsz=ozr~svUNhVG;AN((3Zc+E$a42FKi{2> zU%fyH9gWji_1(VN<&{i!B>d!L^W7)zF1r>x_n!X$7rWi`ukQK3^wpN>>4$a$JVK=K Q9^hkj(axgM+$;Wn0JFu8Q~&?~ literal 0 HcmV?d00001 diff --git a/docs/docs/administration/img/keycloak-capability-config.webp b/docs/docs/administration/img/keycloak-capability-config.webp new file mode 100644 index 0000000000000000000000000000000000000000..5c96a94ed339b1dc5a2610c7f2e96b09ab9c24a9 GIT binary patch literal 50792 zcmeFZby!qe`#(%dDJ>Xusx+t|F$jos2+}FtLyf@Dp@<+O4I&}k-HkLuNQ(ml(lF%E z{o9=9oaZ@up5OPquJ_OP{c>G%&1SE?)?Rzxruib2&GY+-F@j)8G6!uz9$0=5L@n?W0fBbES$ zcXI(BjIWbRJ*~gRf`5NpiOHsVvi(`NX?y{Wyzmo4<7|4i}vc1#bHA8ueu4%oh-_MEHeVe{|z6-+<;(B_I6r1&G=@DKwqX zUrcsA)sIOONuJKEDw*8yo=`uClqHyN@cmkY@6z|310KJQI<>Wo`AqVbW7>3E*M{2{ zBipwf_gQFGy)tbddRK0|aZKzQ_itj(q#O717i_wzw&o$58;9M(<3FG2wk2S2Y+VP9 z0G3$OTwBgUNeSZtaEy zuP&5Omy(kMzST{g&CMNLtiZ0syhicBP!rZKwOzH96opN}_S~<`z$WJ0?)HvXT`)x5 zg@HqRbJtf4?)G*LF2e3&On+P<3>;sb=3!#^;}Ta}F(z##RR$@rvpK_KZeDI)CJ-S5 z1B0lunT4?0v*&+y2mTXdvT}8G6z1V^b93W%6W|6rTk`NddGdsZm!F59p9{Ex%f-XN z^_4r9gA4P&2Kj58XXY-Z&eo2u)?f#Qt8rhMfFZ78OiWid`uE?z=4tM3{hvEIxcvE8 zzytDJweaw9^YZ+AY@n;?)mdRxYj<-yooCke!14h106i3VB>Kno|7iKo9skx-`#(MT zc=;axz3bnae($Q`V(u&jwg>L%3i{8h`Lpxi8~^Mm%5(MTe_M)wt@9sefrSPUit_yX zrGW^)6MX%Gf$EQPI^+9zlyiuf#EHYd6{CWJn zr zj?V7>ZTLSAgD^3#9le@mL6iP<-~U{5efwDOzsw68>-u(Ei`>G0x&N)%UGT3@aWxw0 zHJn?s!TwR*QvVtIulez|EYJMsng42MxQ_pf5WA~I$`KorgoLCgmMcF)CB;xV1;os* zlI$9&TT1xX0DmsRSC}6h%L~W-cy~E!t|L@#O2}zpP~5G1iA!%0IOmW%xtUm{mg6Xq z0P@bVd$E6=^O4P{s`FAeW8gKCh||L@g@g6U45#_$zZy zBA8|HH1*?kFBjvCx+{#bWJhyeaCOBnncumuo$B|{X7p)icw&p+3{xBXZ_|=|&LD}V z%$>o>w!*23VpoYSGnZEg!Y4bUgv@u|$kl3&K;XJ-aT|Txmu>-hpkIpbR~dd3hCG-o z_slk|SUAi?Z&W9lt$!a*l=o)?D_scVH#oib$Q-V#SW*;t<6i_9NZ6u4F+5Fo|w864+tofIX9^cF9k6Ois zt2US3XW;s=%hN62J+vSg*?sJ?%;iz%hI&BJ2^%XskA3rMg@D^9e%9w}yIdrnI+cVY z%=P@F`D6$VR}e>2|6APueDy(}{YDJ-n4gE;Yd#k?GU<4qYwNcD-RbsYuOK@_l>zBO z*N3}WKPnvV(+XEiwEF5m$c)>&Uog6{FlzI^z3mmrTF)XMt;%iGWa6fRr~=1Ld7yjY zaXgEg)Ag@+gF4<=4`-CpjECJW=N#P0(B9!;QO^oux^4*BC8M8gfqwUPS+}m~3sds2}XatWpWSWcB?F(9|s=$Vn6ZqeVdLJkb zB#C8nlZHhjs=<2b8*~p<)1*V$1T6a_X`Yn9safS^8{Buy<~x+?y8+(x7m?MBwJ!}R~^I_Rp#{KYjc_B;aV<=-*QvGwc|P> z`hkZ0ah0h|V~y4pD1hir$9t-nLGepPo;E%b`h#*GpREhA5Ng3>pC;>F3!UsRJ9Ri! zKdZ}9pY!HfEk-bDd)RIDJk4X>2bu*8@p!Mckj-X2ku!^PnF>|X@*#5_na~e5k!%o~ zN8(?pbZQ(+&rXX~IO==s4(e?uxF4moc;_0_XJx1r?sbjv@n|m6iMq>L7V6hVf|?e3 zq7sxcjb@POg&uW}vxQQx%X5rUZWPQM&UL(v(W76%BqVli2EJSHEQDOzVY-ehWvQ29+pu8#agLFS&(W)Q zsd#?&l5k(RradQS@ojdP=1zA6Gr}S+LBLWWrRkg#&aOnmgD<+l8g_%{WlhdhgNH)# zWAk*BSO6GdrdQPi?p#NNxAN$q6%qtIv$)wj!}a;4`xR7cO3s~@c?=s=qez-QelIoc zNfL2mkr|k3dJQ9D?}E{ei_up(AhNjMK0K&IHux>V#EC1f!+7C*ipD2l3Bui-{C#%K zug>o%XhEY$VE7q&_g$h6&MRfqGGvQ_S-!g*uV%lp8E)7qv-(+lK}X;FmBllQ6GilN zW#Dr8fGbke!?|2R9Hv+05cT%P27P%-pZ-4-vu+DGdILl8YY+j%5mw-NuZU_l zV!{tnR1O~Z#z|vW{!EFJiGR|S+k>*B2sjNUq3;<;s&^&g$1=;vQo5^fxpk^rwuNXm z5^sLJ@yVFK!DE+tg#cMX8r9ez59*Jc5S1WB$xgC0r^E6!i^*{Ea)`*oNs4y@>%PR$ z5{MB4YA7=$(MSyHT8^`EeoFE%)LU%4SWC<2WEC%og!+Cs%@d}2x2>UF`j+aDPd~+- z=AH@H%v3lf5pTW-F3-!x8Nh^UGicm1QqEFNTFU{+unX~Uu9>knW;5RWUZ0e!aTc?x>-}x_Uw1T86Y~cuX~-!IYrga zf&-P115}r~L22mGZ8!)zil3`f{+77i3A42>|DwtJRAU0I8_Pf{FtUZ*&rT)sfyZ(! z1k?MDSIl+d{*dfpnu7QG_fqq@47bAW+_76us0yF9YYL9A z#rVC={NY7Tor3zsbi1%%o?-{3V7^nU5W}h|%QLspoFPs`JiEkwgx&mmnTk|;UlC^C zh_7$s2}cwkCr5@yc+s<(6Ti^>~5K{ydn7`j~LD zwB-4RA17b2lP3zb@JM1^PxfvDcYlMZzRcCz+c_&2Z3?C|PGHUjw3hH)ZhdXMLv43J zosZ?u`ZIU%lKgI7zLPoT;nKGz%UPXED-@*@w4#P*s8Ky*1=SM9ccOzzQ6zMtABCLe zRuFq!h7HdKzc+1H;|A#M>SSvbud5VUCUu?EHkK7m)UO?HlQHktcx9Bv3S`Epdi#d6UiGJLmz`7RuEt78km{}SvLN95I zF!2UdylYjXjoNdz-~BwtLO*q`qnbgny0^@W@Hj0Pvs;C3DD}Aw!RAn8z0H`-^v&ru z=9P&%iVBBg)$>!n2D~bGhxjXeMV{v;H=F_gVoaEBudRX$F*Hvk4+;azFu+C|bkuty zSwlCy{U+iIXPRAq&Pg{Cnr;k@0mtyQaGYHA%(6r-L(!BC@H9HX>ze}`HJ8_R%W@H3 zu3DDsixAGYzgx+$r{9=os`ZGq4jW{?DxQd3Oxe_$BN1bW*z|;jtt5gnsPSc`6H{ zEU>K5*Mlq!p{RT1d*kZmk9q~A&yVGKi|ATKJ0p2c=iP4eyMIicbvUmZgKjMu?(Nv= zCUa=zEmXe-$GM_@bU2@i=&QD@A5*Z0jo6a4&o%AEHw!HLM8Z65+bCpV=#{N* zE>h2q{VeXLJ6Hn4jW@-(Z#&KzKt~*}Lr<_vQJ~W(se%qBB5cl2IF}Oc|0E`}g|)mr zxS^M6(m{A~W_+&|+&oaNk3+Z$E%EwI-d??6SUI07q_i0=D74T_NeAz~#VCKiZ*$W1 zAk^pm?a9PytIU*nO`94^FSW=*XS$r`2|~ z?}hJT8HOcwb>L3*7HZ^EL7yK+=ZOem$zMh?o1az}GQ%wgKC@2O`DA0S7V14-MSTDH z*jJ}~aWpZp=RgtI;pceQ2`g66Hy@z%27bDWB)A*A)*heWmC z;uF70zY(sZdpNE4>%RI8jKqduoB4Hd3yBQvaByo+6NVs9;n zhfMH>UL=cw%A1&B)rTCS+T;#5gHvy{a`-sHpG^5S+SL+5&zgF)=R(z-cZONd`F+lg zpprrhUDr22J=vL43tjWM>e;Ry{xSAdJ5>oKgD3GybW?FimMJG=WW#YRl?P4vh8H%o z%!kL5`}RA$f)d6A2h#6jNvD=bT$mVs-r~J%@yEtv)!H27DxaMw(2$|x(k&RIMl;p~ ziyx@hD~nB5+6q#g%4cQ2*_Q-^Q#{9-q5H#SM`LieE*l-I-S)Zyo$@8w(*s(_7Rh{& z@YalP3%^2h|B{#7?>2!L|CwwuQ{_y~g#V3mcqEseX2?yBSYrM{Y!T06rMP`J%$hCz ztN29%mD(z0hF-|6^L&Ekc8N|bYdwsnS1s!40xDn)`Bg^VMqImSFH8dBu@s4?1Kz z71?Yr>FfbmB-brW{UagIr3}!FkdF}Wi{IbsJXY&k8W=2idFJvJX;KdlxT84J-~s2i z{ydE}!~G1t{j)6?yLZl#)&kL`BAW$-W+(UQ{5=F8y`>|Ny8fA9vveaMLly z@;hGL7b1Z(Ue^*%{fcKZs~B!%Eg632&0G0_p6eEe4$WeO`ZbPFsl#h>#)p{rJvMGEJDRg*Px%KgfN}&jq@RF4_Jc ze`Je9ht?Cudyt#7zhev`XRW|FG&D3^b0E;*av`jd^47uoZTo+bZdo+lHt?9uRm&Wm zuDU!w6c_7B=73*(GiOzZRqTyEmJg@D)FY-7-TRWii#&wYa~n6k-CG^W?YXtp^F=C{ z=8n$}lB1XQw+)8Rise8%8%!>x8TGs6xVPPkD=AHVPEyqV+hney=qY_a%%;Q?22I#M z`pv!r@DG{j_~3uGECJxe^chYm^tV79KsRIn6hb7eUG$$Vg4D)-TTATk#?t=*MF=sq zV9b!QE`9k&OHC~>2|;m*0=nM~h-wQN0IG!F zL?U1kyA{w9$B`>Osfg$~@LJ^iSzwHGa{SP>MNF)KO>a-*&u ztj@z>b7TTv6ngi4yz~q&+%%ItH{!C{ANRoZsP)yjiGGtW(wF}DJ?a@g6r&&FQ?R~B zWB7Z2CNE@t9**A1>{SUbj=)1?@qY8=`7uTCi}V?D0g|E{IM^2bv|un#;jH%@)Xg_- zz^6(_dv+eUo+y&}iyVK=_JeoMvIF}&?ODj20-w!j&T!MT;BXy8p;1)oEzG=g&uAg4 zFTs0}$eu?nTbWhN^L1P#YqM9e29HrufnxGQi8L7)9nHpz_0<26m9zjuTp|Fc%x00l*1c7oczuS$FxhgkUA!wpde@@v0)S@5{T%~O_V-Z9 zVs#1${F#|5GltwEP491V$Rer=4K$POB>?Rd4Q}3GNZ>cGD99@g$D`(!e`D+i1~*Fu z6GzC$Jdm%<)8K?S9moMjBI8B+TeVteRs}LfCm+r?&0Xw#8gTEaNLu7P-NqInq(Q=P=3?-dK=acBar2J%F?9_eg~VHntVoGk;!klHN4YM?8g0>5mrNc| zXnjN7YOXESeJ5y0a&1j}ubu)^hr(udl~s?g&yMlCu%5xhLznw6OHwlw;xq?5p}jz8 zzp(w2*=MZ<_ZOA-^oSI2aAk}?%wFuwcd3=AzNqy+t)h~$g>D&&neTsk|4@6QSOEok-ferbZh2!EDBB(CEUVN)0$n91!@$k(q zXiAY!IKjRolbCSL%gv%&vjFaSLb6ltlC>6l*=SQ*yu?nj=ISY@A`VY7AQkuVx-DRl zks+7#oO%bnNCcoN)uTCv1_MbV>`B6I5qKnYLVBXrziMU4Tt9V#y`e{!<%8%IsUq!F zTOc6BwUQf5T6UQ%GtZ}w45t-Y**u%BdtF+P_|U20vxuiWw-H*c5QgUkxqZ33mF|2p zN^phm7{Ww>cq)tMn(NlMbljT&065N00VC=r)wq+doNcO$sur~i++r7W*Dx!3NQQpZ z%lmY19P!1FZDXpmUv0C8qH8g~SbkMQD){;^ys&H9^5yhF1m3=+m;xn_!}|!YV|1^P zryD#oG&$fr4Y|_jXGXI$kYw-Xd3jK8wj*f}Y&Ti9=FCe)-xY{{fp;Bd^}WR3P^;R( zezF-1>)4p}Z|0P`ty!eamj3+1w_{)<O<2Jw9$Kzd#dJ`?qz`yG>N_=xHW!$4o`IymQkNG8~`sr~nvcWu# zF?p?t{(fX|dpLz&aY{B8Ss148*-^;)k4ioAb`=I7`iTm_C0yC(Gig_yzA)`&Pw`?x zywpNZ6wk9OO3md#v@poyd3eDZ$89ja z|M_vhWjqEOnSO)Smkikm{eukz&*izB)P!fhP0GnD-|t=2tnU%i$ma7-7`+OZ`bpWK z+1q-z^IX_6;2h57)>)alKTAP2?wJKgFiFP-5m5A&ns&L;0x?gXr>61xdEQw5Vv4Ww z%6!ZAHKEP#rRsKrgMGJ0GBgW63D0a!d*Uo(?~)k@NMr~(d7bed&vYs!E)J!4Me>^y zw!Wrk`UyHLQeKG#7cT-+VBo1LRVvEU%T}Jr+a*=Mk+02|{v1}SuV0^w3>80rsQB1n zDrZ1JAKpQOfNuX9vy#5X{k)cT89_)Du{l$}RdHRHX=v`lY=cvj#RK=lSZ8ziil&+C z?o7E`G56i+gWW}*oD@?#akgy^{hW_B{&dWG)%H>OTHJXp=r0vE)8h^XXs=im9+{HU zwK0zAUi)c6uv>aHQT^+UqCkzX))WD^Akd2>H*Z`2ANs)dDaKw z_MyxxtRE_db+JBKzG{e@b^Wr6#IE^!llzVdkVYV{h3z#`LU~tKaoBPt< zC3fQlx6zB#tQk(}&-s16KCAUcRjnf&&?7g7rbcbB37=#pTQ zuEcYK*r1a{{LHK;bT^pjVaie;5Dyo;q}Jfq8E+h9e=)KMIo{-50_6}O+E3Sfn;wrq zP6dvrLA|l})48>$gvzSF#D3|0?07!eaQxNE?&TZ&_Z{z0n@X0sn|cq@?+sY9_70_ z!piu~q0|g%W5^6|-;EI!W|?q1D%_)Y+&id=!lCI=7_AtK%qS@aivXXo-(8Usa?=zg zeiu>z;nu;c(+ClzM@y45duMg;)d>qL-fgB6oVRv9M;o;T{^&S>)+l>+$YRr$}c}Of-GUn&s zU|XkJ3mIFRuCsaGrjm`RY@UdkGzUP+#~THdKMUP9j`@aQf$rThL9)L{e;!57DxYI` z_p)0S@(N>_}Erl!LUGqx?}SNpO;?)acZ=5SLl5BHWoy7PvuH|}x#_BiSoYT&>!Z$m@JX@N2^ZRt9OkWUp zabyCQ_&r<%qVpz1A?|TuQK!zM2*anV00aYt^hR$X15ZiT;~1rUqZil03Hm=(t1fTF zENJXL`z`!@CDY<#w%)QcR%D>%R@`;u&NEnE27$AQ<=$oUZmT&QNb+)fQN=}$$<*o1 z+#>4gm=dNL)l{fguNzMHgrx>IC7ob;laI=4En054wtUMQ=_?ZD9?22{;Z-lUxG`

r0*sB!7ql1Y>4z0a%V%i_@8Yfen=~--rC^qGBH=L&&CwVb8 zk|K{@Oiv21bD2(HBj`}r2p%l2uoRX20FYu9UVU3I@roYxb0Dc=m={XD!WbbSLwsMa zs>186bPJjyvgMK}sCez29GVw^wZ9%umRlCnz4jwG$x=yt5bsB7&TX*f#`FYbe=KT- zqns?9Ni>keq2(viUBsi^IMm3a*x6;{gA?_QqZ5t_Xjd&fQ~Xt408m!AMI3TcvB0A$ ztDG#FtG6wXdwUUx$+=aMMTZV+y9(?2?6+P@H5Qx2P83c&g{608yuxpCS?DfeyHTH6 zzj6A5!H+tW`m#uGk>lk(9tdjmAjSm%Bb*P`pU~o59<`D7BnSi#geGIl-W7C+RI+gv z!YRB34kseIW$TcXrI?V%4wFK;1FoZMs$G>JZ2WkK=5ZxzbR_EZ=Ye^A4)JuR(ns?u z0az7czOwQBlUIB(##`x7Z$_&^>Bd*Vsa~56$8~ToAj33@nm9?52|n216r=8|6>?s9 zm&`!6pJ!N@x9EWRJ@|>Z(6uQ&TDSZ6@|R><-ULdAQYj1?db?^Uo-6sNH+cs{Sh-%5i}=> zJgu-ZWdrxEY${%1>^BPxM-2`F>%=yR!f&I<`ow)NrUsX8354_YSa{Xhzs-4(E?;3a zw0Go;fGj<-==24$b^1-~BWd7Ryn}ajU(S3l&jm{gUQdXW8R2-=K)y738=Eu$p7AN_ z{TE7n!oegFFv0qU22NA_x4|U!xlVN!T|jJjYx0s0ABT@0){w}1l!iXs7wAC>3^qEu zyhf!`nhJugA&5@onlb^9jET8+ZajU*uq)-R|ENH#X2^EmldklWrX#TqU z@ElLK_cP#Q*Ud}F=c<;Lncq(NH4^=z*OIHVw?WI#=1!z6>9=YpX>0zJE7mHe+CHHg zNzG08y`I-N39k@6km0wsDC-fvP8~HhNwoO_#P*Wt-V?`)&}H?0HLAORxx008%yCZ|ze@CzDIS8d)yTnEH04oyz)d{K(2dXtpjohDi= zWw#*`+TbqTx9t8vs8@UD$lRg8y~E+VH|Fs5FB!gXUO2i z^-kZ!#^R)I^#($~Y8QCd|McSlXx-Z3cn4vB4h?{k3`mw(zSc5QuESf<2szGp# zs4&jxp&;yZwkuqix8`y-+yCaD2*z#?&<{M>5~j%(|TKNDir4eoCDJh;yH1sQ0sF0_QCBaZtO z@nC$=f+7CQL#L)5pWz!Uxib2hQk)hOd;dK;K8m^w8zc-2hhGj5Zo0tqeme1s#g&wi z{(`2o5CD&_oa#jJ%h@ZK(yyMtF;dJ;gt_3q;6wjYuOKVG6p*)YE6H!M^&ij=BL`{E zSO;_JRqk3YZotiWYjKe^IoYtxW0y*6D{}GIr@KthGbshObJ)~8j30A5*Z9w3o@fWQ5x@i@zocOTzlNoy`UX--@Z5SNOQ9IhqDuYJ7$a$0pVrDL|FP;AxD2zA z+$Z?R{tW0nN(oV)Z}Kx~(k`6nn2!@UXHA;hxW57xe@sW20JsOqJ!2UTP$UH2xPgnA zZ8PxUp8y?Y34TpRXw&_E*D=9jrCBiTR3hXcHUaWqRz{V<3X7Xy`#e#IWO~;=&_}t5 zx`Lv8>KBXn$8yTxh?;bTAZ8-MFc$%xpG>^aUjr4OqlX=}LRkdTLEQN9p;(wPaL7Nq z5(=@+Mq<#{*ST#a12l}TVG~%aC#TeVfW`tamkf$!S^$=ZTI1*D|MDb`AD#v++*fOM zQhEW(jMs#EnwKpilL>#@9ar}Z;F(2Z&}&Gd8dr;8%UL2I_Hm*M0#ky2&c_prk$e_` zAp0+a+#_|y;!cnjU&!l<{AI`fOC0_e-u$=Z|1T2#r-u0dEE4T68*T<*@#SwmtZVOa%17Vhcls)n3sAz~aAJA?)sbw9v!FvtfJ=2qH>H<2{}pSkJBXQG1Q=oW-dU*wAT#_mko7QSQngJ?vH96iX`bhSK~FNXRw|;N9~MCoZAlPYfbE>I;WXO4o{(XJrf(*a}HEe_~X4hSC9Y#eE{i-yp zZ{okEJ_mAmy2M3#6WnU$nzV3RndIv<-;CtrF61|-YHbO&X(tB~M7>WAqIzQ<^bU*1 zJ}Iv)w$D;bz6Y>N%W;nKCkkTtIkbA}_V0Qv60K6>ukQo~`Oy(bhz0oIoUyHt@JN6< zr%orh=>0bW@kkbSqS#~k&`@;aEj|_?Ob=j~7$bmq9IPjp`xbGEgOP)os;vQQG}$q` z$;o9d%iK@Aj^0fh0G2=xda%wdN6sDrP$Crq-+q9AE@Kf~K}5f5-fAj*&1b;+65r%y z(QG}YeH5YNbzhaCnK*L2lJuGkBal)=pX}S#OXE}w*ct1xYZdBp9TCVoXLv;)&UFx7 zv1g~#Xz#a0h*rHxoTc*@!*a(tV6#VZ3U>>7l!%Jr9LK8;8h&+mugF5M^+A2NF1*hJ zjcE!miF(Bwqgns$aoKg=Cj;Wx_DIdfSa;Chs&6$gCFWe*tay}6E}tpZrE z?OIaTvXoM|sT;VpHIJ*OBK=itnceI@;sAcLZIp_pIg?7Ed+}dsH=D1t~Y{jea3+RC-2IFq|tF z^*rDeX3ix*voIT2Pxyh)p+sA4hh(UK?GUFxEv7LGQI6XxhqN>+ReLR*EXJ)0*905D zWBVbYpk(IRE@6F)7E}r7F@51q{OrKvW9liy5>f8vUJk|D()*yp@BdF2@ad$+j|yv7 z)WuZou6eM{s$fs^qJ`LR_}4dPfFBD`ECGB34s08v|MEu z=7$roj?5AJbeN((B~zk;n2px8UFed}K!k({Lb4p_ZrblAOmw5x=sr0RW?+yNPSygY1;IJphh3He;-Bji{ZCc{2@gTm@(|4AuNyu*S^Y50e|~?s@|(TZm&=sz}LbrL7xnh3WN+&$YW| zMJJ`o9}*u%0SrVG)&3(}P5I8SguS&Yd)<6*naEWE3;AZB^Zl|JpCleD?_%}(Si8$z zmB#g^HE7audBfbsMxl}34V+2)DrU9BQexB^AU1JfajCV45cYg(k5hR%YQ*;RQgm zUzejC6KH$<>I%lSn_t72F`N$2<>@2wL-5fFFYF2~&K#`V2t34x2F)^Q5<-Rw72*c2 z@G+exuQ&Ql&eGLW2)#|C1byXyyIEJNw5Itg+a_RkqJV9K_5*2j` zS|7y;uXXrAz*EP=t#Ab5^i)y-q8cTDz^Nkfgb>-?MeMH*XN`ppi=;0ia+`59j+8H@N$!V&_T)A4GDvaf>gm#yoBY5X1)>qw(&2 z7|Ak~FFW6n8B}Yhb@=}L+R?-|Up_gCCXZUY$vLY|kK; z@=?h(oIA0S2cE{A!MPZ3ZM^?oI7O$k>l?Epdi1`*}hDl?XTOCz-<1T1er3fIIqRj1etD^yL2Oh(rwXc0(qmloPK=s=vEAjw{ zVp<%KTa-wKi7OZD-7Q7#VeoqNGqa7`j^^Yx-Mm$|kS@Z{*2$q>)iBlQIZ>80=FpdQ zva@dsK0ezWpqPn0|o}Q?4y|-m#CCm(N5P1NP&pV{> zg?Hk3-^%kV?H^1LKXf|;xV2H27pH^dqo;{{?>HP4L|q$YO27cHGL<+E#W_4G9iV8R z4*Iknf5-r>SZP}GTppnHhItwhVSA9NoGaBruV0KZVrJK^ z;O%$wCVCqaOiv}rg-35F)_%Wcu!=3e!sVCJGQ5wPz=qF_LUA^%N~;~d2vTe@e(Q1; zI6&%SINHd3F-y-@NjWCi<_nuk#`g6c54LiEST%Ci489Q5%D8b?a23fW{hl)7COmHK zn3*_F546;OT1%+`@edNC-=RUwyB;^TT7EzVzwVffNmTbZFg_t5y28q%SSwKwRJ6RA8$G{i^gv`IOV zS>#MYZVJSv6w-mbZdrYV&C*q;xj>+MM-gi`oJYnw*3f{@k;h&p>bB|SCuJ;Yw#*s* z@2LC=l62&_Vp>6jwG(CujcK3{Af7^=1a2Vr?OFd%sGlKC9n5G3-@aRXd$eSdX^V8H zElEt0bK{=(5`TlW`~ZR#nC0k}1h|pYZv--}D_YqbCb*-Bzvtm5uJ96wh2ul4=cxa0cW*f* zcRY9fxs|^(MS_b(_7rtoZaK)}bLRe<9Z6*7lC24td7ya1sjpETI`!_C1;7u-=$gfo zfg#@B!4yj{?29KCgFXx)fAZel-MuDb6R2Q9&n*(QdT%;$h$?3-lWS7_T6!kL2(Xq2 z9yi_Qx z*aB2ab-eotig~4UwG<7Om_FBS%osd{^BM>x&-4tFJg}HI5Q;00*jscmW_hmDwH|0z53`lHQ-4 z|AurJc>kmUYO@t(0|T#smY~O}{`53)uOe>l9GM8mlhQ8 zjzuAMy)iifz1Z8kAV&ct{Z|;vW84Ixc>P9!10m=s?y}!-)-T) zC8lMHd7u#u_#`-G00MpO_)ScdW)tOA{(mO^`VF|pk$T{ zNF}o+3fh14aIsXVb6s`yeoxJ_R0b_!APkcBA1~DFy&S!KwyU0Raii5TtTAXXDV+8P zLa)R8uNN1j?r$tu3{)6@lbk5DrOwsK4_~ZgR=GyJ!jq}s%j&i{6$6Bn!et=}=)QQ6 z62Pmt2UxGl=!tBwcy0mK8Blpp&gpUx(m3yIetfVtR%Y(f=)O_6Kb$7bao*rv4_-H4 zEUU%>wVu0%$`lRva}Lsas5L?#?c>%b0Y!VyH)oo8_{ut>d797EfHljlyc`lV4k685yV%zWXb`LY)%rJfliuBHAXs>P?kY9-tTicuK>OzH}0nl{l% zed;3-HwC1GYbo&x*NcsstMn|MqWZ3dFGwIY@-2byb|Kdv2KCW~i;_wHcO`=anScW?_lc4N^;rGrA-8FEqGeit*S zWXiV$ZLGT0Hmm@H)sqLaX>uzV`Yd$5H89w0bLzN`@QJh8rK-lzsZt6kDVp;*( zlPFj!CffAZZvlXZ2K(pn3TfPwG4J{}U;JR7t~(r6;Cor9)N{7Z~0*?~T=({$je~?eik7#%`)c4s^UgA(tc^qnP+un(!t! z8}J|#ZCFe);hc8`?ISG*lUKd}~Z5=6)81$ajX{=E)wz703vo=v>|00DgZUa;nw^ z)qKpMRn#rGA-u+jDI9e&RwCh@t6BKoSdCZz<#&L*q?1WcM8(NaX*(9(mmnY)c8hOp zX3u^ybzq)lA1U4Y`F<1>Way*ri!jP35-K(6h_&d~TbX4nDT82weU&~58E!F42EDst zD~@_r=eR?mJ@KXU1?8*DK%q?}V<4XV+w1iC&H1u*?CtF#QH#LuP~`j+2r(P_ipy`a zr>#@#95W#P>Z`U~41dhai@H3Y8viqk7$BU?&SjJS1p`QLr;F9cx{?oda{?Q4nQk*GpB~%)EPk@YOxXQJI@F@KF7|}J zMD?)m-JM6DMBN>YnzqDMiD`v7+k($CE_qUwHS%6+x?pR31k?>GRP-RcSgzdd2FG~U zE6{vNSc?BRztlC3#nDJF)4!u;Kpo ziOaHF{s+q0pgLvu%d3I4Ra+j95oov7sXw)A!xtXq?J#E1Jo!+#}?}5^ANxw zDA7*5#2}13>vAf9Qcre1NY8}^FoB8FTHj0mfpOi9a_`e{3ko>%MF>+(*PBq9CoT#@ zCPoeC_rEl~Z1@I&f8xrnIL~T~=G1uZR^OTNnm(6@*q@gAbpR4)CBjh?_a`nPRcvwo z%Mqh2-UGDn%t;ZPtqGC&*718QdXeHDwmb4~I?rXPh_gj>mz2RE?!v0v^l=H3o0rHJ6_C zsY-=r7=X;A1*$e=cjXK|^dv|zs@V=FYF~l)9ePwd7`%jGrwq0MKOzA?^C)Kp>UU3= z9wU8^Qidz!C>l8}!)f?!7997R1xsgl9a{rt_M|aJv8geKTu3n8Dy&{WRDp6*r=HW} zWi*^83If^owMqSyK~24Ycb&%UcsmwnhS@6u^hwQx4ovy`K5a%io2=)NU6 z)j1q!d9r;>a})5eDNc^ppSbKlJ_sMILyiyjFW(WzF4Q>sd}SEFQ*U1)oEW;01=i|G z*j)1fRt|s)wKT)V2PKVHA+Ppz8 z;`*u_eYH?)d#=={ett`DA1a|jpr0ejahqIsO1F9^fs>57aw(@pNNH{KL}3**0e*?{ z#va>U40vcWrMTQxoMaQWNwQW%%EqPFB)M%$-Z|tjRib$#(3*4FbB{lC|IND;Upfbm z4cW=qzBK~fl{G~5j!eK?@c{=V7VMf2sWmN#- z#id4nYa^j%g&wRG>WxNF7cPg4>4R#%J+VBvKJA(66WDpeL_cntHUPwpYoR1FukDKI z^Cxl&=}VhNE}ONfyk=rT*(;&m?(<(J&p)VZq_V~_ zKf*K0aAbsMSvhsZ(Vj&W8q~)+5VTT%aLu{jV6B)!bY^cs|31rh7NB!**A9ctJ(%Pnbp17{EawU$NEHZ%1E6(orBo7U~)5W%6WHTlMAf9j}03Ke7rR;b=qUx>9!_2r>!^c7ur21-n;sj8vTuP21em+#nb7X#CGte4D* zY}DiFmBk$#yfVM47f&R%bn{cSNbxlPuo&Iy*|&j0vI1c!>BXE}v)^r{yOXP%|4{h0 zo$2ssr}jXRz%YYtlcL_qgx0a2%lqvbTN%sHlOeLH^_$D)zuY$yD(>a21lZ`RYy_X! zI9=aK3v(`Ak3F6{#97gG>g!6*Q24&y{bBiAyhZsv#L&>eC%>$ea-tsH{W9&v2Va}d z^M!DG`CI#_CKK?o8`HM9cSuqFpJ6NYxQ;Gg14P&;0lb|8FayyesxvB|Y`~s#fB5m< zP~hVMqVJ>h32rD!qnd=|FO`USeqh{J^9o4?1vSB}AQ)u!+MUVM-TQz8BZeA~^;|Vp9OJ&zl2&^C zHz{vcKMqe(4pQOd>Js?91wE{)+jZ!X1crOZh3wTlYF6YryT86g#5X)Q)SOthOSn4>OgnC$ zxsKbT@{yXQm^L_9yN7e+jDc*X*>1gyPnmSj29|9jCJ!nurq0ph#&mp>`>ij*QwNvc z_ljAsOl;7bQTN%4y3A1mV3Pc0jt!1c>{_>b zs9nlAbV>A%<}cC{qnmAx)m5l^0$5hd-Ji!BmJOU+;3b-FhrsCmavV0N5o8Z{=H7i9UB61dS5$6vM=EB^F>6`rQ-8}Cz_f_TpGW{B1h+nvl0}<${Zi2;B+Y%p zdJNKD<6DnG#G!;=V4_w1{&U(bx&H2^clnzsA>sS# zb@L1_j=xMN57GIP1>`sc9|fZx$DijdM=7TpmizC;HAR2eA;jAmxAE8VTn=v;v)1x# zgH_RoO!t|E`TEdE=R2x1BHS(8a~+UsQ$syf?XZU)MD%9`aq0O>uDDqe$$I2$E7)gM3sNd2s@Fgo}3tJg5X@*b6C# zO=fkc)WBo$J<#U6vkh+iCBnt%z|+*OBVR@O1thpyRV1@2skZA&P*(ihNPjQy$z9mE z7U|4+B422FU|1x|cPDg~{8e?Ktw=WNJ0R}M;|mqK1JLNWTXCq(@Xs$G8rz_petV@p z@GfG}g?bF35=F3?Nqf3zB%;>tqJek_cs|rGcPB4hr+Q-OPO~oi#ch2+(Y{UA7_;dI zSs~?P)QtH=+hyP=@g3@+lJJZSx8xA|lrGigpOY9xabL=Qvq{H=`Y!MciV`47Wqb{^ z`pxzAu^X-ni?K2vh^Wu!#0Z3@BD+I}?TKC2ZpHGN_C-5VV7Hm5=^I7Vx^3$ma@^(r zK6QpH6Z13dlz7(QF@d&Rh525P-;nuLLmCb}meBP{)_KE_(JT&POo>9;3uVRZ>BE^p z#|TB+cgG>=KHQXl0gNa~QU8J#?cZ}OZY;Ru8_Q-)-c;U^N7n6oDE*wnDo!7U9_*=_%>8IIlIP~O;F~eem%j*V_byu*3Q-BJ!FhZ-WZXSHnp`!k7^~* zmtv`(vZ2tLs=g%i2-~X}{`PWGLV|SeCqG5~hKSoyhijDQyh@eIH^jbr0bw}LbQq}Y zdTXLPXM-mwP`Qb1MO@U)kXc5mFm6Xmpv*`ZD4IIfQ;DzqY$T07e+}Do&n`wfF|++4 zaHu9il^5=!eJ+3Qt=43RH>swX|;d8df{c>gIDagmuM!&U2_3FTS`<8|f@MF`$UCfRjG7;NR;#sft4e~>>xU8;z+|8_2dF}@J zIe5Aa4a>3z^V1m+uw3xdO>}h)iMoB%d-Wif-8^Dz!D?O??k95*g@te;lZ?SYlRWHF z7SJxvS10(LrL6Ehi|~9sZYZa8ZBrA5+Ve!U&<@(ywLjhE53k-A)N|z}v9`#Ceo1>| zGA<~*7kxpr!D8-v`rrduAb&7rK-@^5TY)Mxe>&LEN~r}KI2XMBEJSFie5d_NIS;Lf zp!T5_Fef*|ku_VFu8~P+>FlL%Ey~p%qXeMKrL(u&n(^qh4THh$`+V= zAxe9KeW{k2>zsOr81pf00<0!IXX?iRh=^C7*b#|jF`N_b3zDWoYi zgOgQqr@W1jFH!a;hb|1l-|OD^g!?yOeDU_0Q}t6pI#y{(69pN{vFt>|F{VA#onl94 zB9_O1kRUYx8Ki_7zcBlx<(=+>smf0Mu={qv2qB{P)r_15v8@EAc{X6qzKQ3|3;qAMcznfx2&@{p_cR|iHE{7|{oAdoC*ve?5HdfAg~e51i)Am>!A$wp92WFoGSsNpmCT``0%fwn_D{ z&5gH5N`L;;!>|5l_@qhw+foQNXDsav>q*F;B=~>ov{0HK=+gUj>ro(2{;wSrCB!xI zrU+1=#rpd={@C3A4~LYgO{o(~m|1sKB=9g2lo(ou=9OHgwJaVk&mFiC&l3U||2XFV zd7CLksj^Y<-0HQDHzF>r93@Cg#UdOoBY$O&tO9A~DE)@>-rX4|xSpPIAZcjfFPOj9 z5^fOW{`;bf{(c-3Dfn`W$N2b{v)ZD3#>bqaBdFJX4~RYd95w)KCpw$Lg9czNF*W#R zdEdcp&|dBI#AH~5f;AK|SkGL4N|q2u5?If(`hfzYmk;|?E9tF&qTkjnJ}X8EXg{r( zdml(^MX_fMVD=UkxA-MPyCcvvQz`_{!LEF9OQ)E4@KyXZ4x8a_e(p{B%hE5DiGF^x znqxMwg}IKU@bgLEeI&%gZTl%m!qc{U-YJ6|*N#$Du}*a)NV^NfPI8Ze$ocJY?&(93 zJz&TrfTW^k_4|3Fl(14Tc@Utw-%XhVa`k=BhB9@wZVih{fy&F^$D6mI`Dk0_At9Ja zoxD_RKxDk!t+`Zq-}9I6Ly3|Jps=v|%oDosm*C`yd18@Hw?AKamicLwzmcKA!fImO z;RFbTXm%5%z%zYNm|vi>Y9%`l66~*=TpegUDUY835|09yOsGKlbVMi_kAa|26OBbQ z&C=qbr!R)==SzRMMMq9%V?e+zJq55weNL&SbJOY|+h2*TiLzxb8>HDi z;1v1vHEFiG!ZXhi@EP{q(ZK8d-F}(jHRa`ub(h(Bmf0679KL8_`+XcNJd*b7ff%})lig8SV4iqBnmbU& zgcVFDcKaSRnBPB_W9ElV0j(1=)A9N}aq@SvmHMMfp6<7^4|jD7GM@8!*u9^+k3cS{ zBYb{vuqeT2caYJZ0<57ui;WXR)Kab3-aHh7wLFF_IAhc&@l+DgbytsNZTku%;?_RPunG$bUl&Eebi>Qr zBiM0HSLQhI`k@}?ZGWtCG>yVHxaB;+(iY?c_F!}(K_!P^MM{viiJ7ur)6sGNwOef# zwpC#^z(3AhQzRLJFMkKh5|a3=s*7}M=51DIsx6A^XEozFOg(gdM->2QvPy%7yi6in zrZXtk0{0>ySb2Wjopwm#aPi&J*r#IFsg5%BVv2G;T-yBD6-Jgt4&Cq=NWHdUG6(!% z(~*u3t|UvW|;8w9;j8wqbd&Rl5QlQG=*ze5eu@?Hw zTr}Oh`|^D_(l7NDRYk*d$_5v zYg(D|6RKnwvAomdY{NNg(hHZ02a=6W)%yZSV|X;#7TP>;E;IEVbYe0n?EKzBbN$4i zSrW?hApL(9d=2Jw$8-Nr69*BuDwqq*{v zh8*%C(c0mxXFM}m_XtUIQlXU4* zl=P7tnSJ%-llc&7O@3)*F;UlqaFsY(l^mzXN@@tO4hu=JTU~gn|mAfA=Hy&-Uv6Y8U1>E z_Mk8(J(1?Sr%&^cZ#~7B04mn&MEcC#)VJhcrJLwXv?qQndw`6&MdyWosOr-T;H8*8 zmjQ15v5{Qet5j#esg9eQJPU99uv~w#e_vojjl_nGLH<<0X)pSG{3s-rK{Z)wDtz#2 z6F70iAez>QS_-~b@(60IvN(=;YaYE$rDXU9kua!{qS5gVA4w?O#ENIdyvDSgm+W)NAGgtEW;y*?;%fPi(mSF#hTA_}*=R8Co4WSEpw%N;YqC}UKZ@xFv zJkyR`sU>t0@M>cnM3HrIZ(!%EYdrItZ>Q|mDY?JrU`y*-4lEZYhS6zoD%ldeoH8xD77=XP5dVJQ9tp_@d z<~N27r%Gz}e>1H1#f?_3m+kpt=Y~%r~2sHDH!(WOSE+~q$66zBunOA$N3@`*%>|s%4)_~R#v;aU?)YT z{mP6ziiv_@FdXFE;Hs8>1loOe>M<^%f+P;z->?W}28snYQ9{}6v zBE*rLGlcCn@K+g0$D?na%0y>RHxg_vQZ*(Y;bXq?K@4(2 z2y#kXT%PXGzQ=w^Y#(Nigd1duz}7A#uYF}yR`Mq2yGoS~MiRSyu8u~Gnr&F{SuCUO zE1p8oo`K^$Mf-}={-@fr4nyhsAHaf!j%RP>O(X(mHjfi(?x{tO5r)vJM{Wae}g_$72Vd7`6B!+E+PQ0zEQ?eGvQCjBf?ZX5i7v z;}}?c4X;{M0&aykk1>_sP~1%8%NAcswumB|)mu)MeRR_el`6^%#BQM&v3nipEz&3pmaR3mP)wCt3BmRPgE{^x)7vWw>mLhB zsBfm9!@TD)Op}bjpJRWnHEBn_QD_FWdQNAcYcN=m6FZ&~9=pd3ccfU6%TPYY@jk8tlVkS+ zRr~vWI90EHm}MyOjmbk72+N6lDgqXR*wsGGWEvKV_5P&7ub!Bi3RkZz?! ze(h1|?CCt4OC7<*$a_k3jb1;!FalG>ka<_ylTVQ_Qs}+lJ>mVv$Bt3~XKcG)tO?BS z`&$B=i+;$_463wEa@}LpulmcbV^C&=@8A5eQJt;*u$qUlon3IGZnOkPy=qBPWLkTb zVyD4s#kcl#-$24w3YQWVH^>zME}b~kb=NpdhO!q|tL{yKT7jO-^THwD%j4KOOOD;S z`8cFv<-y7d(>_|e3jgA2VjdfMtI3;;$$No5ugfD5{(9pqq-h#%`Q#Ua(ZKzxc)t(1 zE;)cNM% zd$Ej{n>8`z7DI4|PJ{gfwMF*!dcV2!Zr76)^v%I@E@dt3Kg^R$%kN)=#sk!vz(e3vq(*hn!*3c%mhzGybWjp=1h=wr-QRC^8B(NrVuU+BnvNyKZg@qdFeg`;{;r?f1w~QWjm11Mj$BUA}rP zHRe-_wJTcQR=7_m$UAIaUpSHdsvvoP56srWyS&(g@a!pGcWsENLt}jT=h{l=`Yv>> z1hCZz?(3=d40Qg68{A~V?vju2new;aK>7tH^#maM3CxC>)hI>J=S22$V}9)al4-61 zE^{V4$eDfh7jB!G>VZL=bcUfHQ|0M;7Vz_h6YgTSvZ%pRU-?0f6dd( za0V8mrtYT+u4CT?tYqOF5p=5GJx}4bt_VTfeA)TsiRt{!OR53#B6lG-cP3C&-ELdVNl@p@mQ?Ln(=1ur7eu_sJ;EZuJ=ZJC$J zmjZK-#OdJ6hIyd+&cn9wm%$on>3q1msl#r2r^G<|-sU!KXslyHn?!~ZE zgy&nvS$`Na6LIQ2AJ}WzhAq2&kZ7_DX&BACS|0sEK7_dw;b5hsIW*AUl++_7+(C5g z9^^s2C$FQ~XU2~kRD^J_k8;lqk9VFgFp?_lF}><_oN2KSO#bjs_6gtGy`0U$)H=sx zOv{)j0Mnjc9mQ`>rHEe;`(g5vIQ3a-%*MeqA(FQwQQT$Nv*(sd&8V8&rt^93=SUL* zjZzN_mZ%6A`4eix^s-mr4}3W6qYDW<@p*SU5-;8qu5Y|GUp!?U)1twW6$aJc8wT10 zEI>@)lQh_)tvr*O`^u;jZVTT8#jc%?s*XJ=VIt#gqb zq9hY?>|Yh!OJob+i1RobDXccR4)vB295jxOV6HuA^_;{$=XoN9go`2zr+k`<8;`CP ze~q`$FnN2O$V>x^d%y&z=eMtYyE{=VpC*{}kx*08Egefgo?YS48Zfli4J^hPpJPa>i_(LGXm@*_lONM?&ybo`q!&v4pnKP!40d@ z=2H@KP%Z0)c9T5RWV zzmV3fWF!06SOh9E9Q2u-oFv>J>R7R^RK3U8OLq^CRUjo!?idNUOy?H7{B@rp1py=EsBwpJ{`_IojSrp|GGSs zKfr*Okd3?)iWddt13zk;zfIiMSd1#{LA^4xvlUWb2Vjsr1$OGPa+m$4wvkK^H;|Hc z_D6A_@uR-THpydgRMcy>37f5VP)&YeZA?Is#M&EQh@DhOP_Pvb)D<8X6_uz0*Zx-oLrPrq@35P%ldW3ePC*-eGp3<~<&YK01t`+ZmHP z`Jjr-0v9e@8~Hc#MUcC_de z0B~-v0nVknzOcmBFLS&noRtNP4@reZ zHo8FLK##9(ugQ|l>i08em4nb~Ypd~jtS8GkBN<{I!NB+p%1Cqr&~KU4%+BDEPhvPg z+s^wtzm=9&zbkF}W{GP@4zqr(se{p1WIT38UJN?fK}(6Ep!*aJ7>dJp*lB_;-}dR` z5|zN(n0|94XIvI8ob>YL)yb_IGz5^PYj0URHJV3(`Yzq<32%L>7(*KtN_v>|cJQmV z$o^dB8EYu(;>Xp=BXL|}M6t5Fz_&@Fv(GKhkg4>|Q{=8Z$AHdiMI@h*k z(D{-7ey&0pka?drxt?P8??{E5S?*p>;?ed*ka&(DXcS)={ESGa6mZ;${vXvVtK*t0 ziPxf{$e>B%<7$6F$0QxM4saMp%O!DGW%4@CI`i2rWPmy|vEaF$>KDa2Rgu-!Gu`md zcG&I8cGq`x{HJmA@ro?EDBI#ex7EV(<=B>H1`LuHO1}5ZsZ1I>TCM|b%daq27c$%V z2SA>qGp?d|=)-EGkq_Ka=Q?$qp|3NCSF5;ogJTnJLekqkp2}w~M=N(Q8ymaG9b8o`?G(l!faP( z7kROeJxd+HF{ZD}JcY_V(WxH`>I6FnokUTK!~nYXrmNG|Z?O<9>ODI78=dE|tfig1 z{o0iXOHF`NJ_4#5bY~vXBhe{*jr;%@r{Mg)Hdfz%fKy*DUN+>b)J5;D^L|*~FgIR6 zo#iy^rvz13BkAayqkTN~X46|+&Tl$ycc$!5(3_G5cn+~|YXgmzNc$H4(kA|AjQ|=k zETDT{*qIiPi)W}8R;yH5J}EFP4aZ#~dZt&>b-flT2Xy_;lMV77=ajH7!?Gm>5FPoSA$| zFR0wjb_toNt^m}kEVEie7mIu2Q{vVx|MW3AFt?LrR}qt5tc>2#>R?HRlHbPdPRCVP z2kQ%N&Nrnj9cvABkTfH1Pn0H1Rhmf)a2?-uCYZc`CRXNkxk`U|zNKz4RZ%7AdZKlA z-Yf`&cE^VrCvrluC17;y{h2-?n^2OvB5L29G6vP$F?hb* z1&Khco^EBsjlQbwiJtfYk{qQ)@wIBnv3#KapbSE|!O2EQ~}m6n3!?D#yIi`HRg1qj-V-Q|e!kyjg=3bS@XhS-^G2j;K4) zs(R}ro1h!h4Fr&#l4YPxm{k_ax;(4JKHC+^@ZY5N;#>n@q>5FEIX#A%_}0#cOkl5= z>AX#cP(`YW_4(o9Fzxxon^zHcdKd;@6XGo?5oHOnL66?72t>3ezc{b2#65((?!-q5 zDvDc!+&YZ$Dd6tIcvN&_E(BQB>%TVhT6F;Oo@wux#Yhzz>7%RHfTDIsJWG-!#Hvc4BhVrw!fqO&zz$4t<^VPLyf19r+-y;byb^Rr(W>u z%@~R|Qj0d~4jfQz93GyXrOeeB%p|lh{_~8Y^f{mu^`RhF)6VU}^+o~GrUVjJG;U`I zGW`M7R-Sz7Q*ezEZeQDVX;}5h7PR_gz{%Ch2W1^mCRWYS8dz{Qu$dmw2oW9>PWzGj z*5xO6hLiB5=@WOMY4$nx6O3^&VTF3ZSxuW;G741|rv(STQ_P7cX!!&UTG{Azp=vA7 z>iWUUZ4p6nug|P{Fw@i0p&bEOh~)+WTY{=T>a$0;PE8c8h za`IV4MG?DY`Noir>CF9G+i$t54!P9^BQYs3k;m++);zU1@WTAh<#Z4)coySyB`bd9 zgahH~IPGfFwflF;D~yJTRu|$nP=jqrKp~V2g&YLEhn5syodMW&%EswM5NM(DT_Xxz{tw+Y7`hus-CB|^BY~J%{sCM;Li!WRsnjWh0VFT}XB$2PT zEN?n~c&#pQTeh~$fqw#)I4Q)Xl z-6mDx*Fe>FHKP!(u}+z&Fj{=NTUKn^x7KQg(5eeM{rT9}#PtRn0zSZ}q+H6xHW81j z2Vo*(vNT=5$pA=d`KcYovdt~xN~Xy1JQ;4F=dv>9AyN+j-Z?bj0fPisn2vDv0D-=& zFJKh|2y5fycLe?SuXL(x@)CqvV2vhOQsa(W#wye?^i~FMt6x~mY6V0PZrUn!mWUFt z82#L50)5u>N(`G>+C@m7^VnW>w}|=0+1H11*zS?;E>b+bzp!maZT!V!GbTMRovKp} z5)_x}6qDc8CBWjkkPMEWafUdMJFs&f4gwDV4R5aXL3fgy)r^tCJZ2TlN1%};&GGtx z`XGwA#g|IiBsS z;>%O{)6=C++1%b8s5ba6V)ec~KATCpu!O6%3rwEtI|3wGki&US;jsHW-F-xg4}p}r zc$~7sA9Xoftw2Sknn`Zj15x*Ri7FZ9sFOnTGgP>XK~i)4%UBH#C%!T`40<# zFZp=J=D`1tpqX+O#W_blVfe0e-_GqZ8m-U4vtJc2Rj0D6uO5YX6CHx)%7}&epsA_F z(AleO{=QJ5E4iz$O@J_7d5g^zv>_MOcuhXvW&<_J&f)olpoJ?2l&XH*ouEyBG2acQmHAh!mo} zk%t_XK%4Jd*m8T9{)rj95#XL;GiQ*50@)RX92VuIr9X}l$l2}umVZvZ)>`-7s@4C47;n5e`Ld{Z*r}LK_h?>vQsjwC? zsceP216yG$g(=oGhWB6B$w~a7reM2*a2iWUA|6`?WvoaWH0dGQ3h8ZdeJ37(PDE4n zF|yihw~%WzlOe)IX2AicrQ(YYmleIaH_=LHO^y5gt>r`XAv=!REeTB~f}?+@ps(cIb%ydXjVp=9X5tXk%C=PNu2vrm5SDGYk1K+{St6CVl7X6 z_VF=HssFhWEn(o>4a(*f3=hAEtpOs__AfMjRR1eR_ykdl(z!i6p`QNl|Ni%lj~z95 zNZY*AW_t)NB=zA2tGh$$i;V~VSr4^vf(^L65~+;)XP5sYHrXhEKz%?Uae(@NfAK$W z4$#4jlr}u{{@EWv%irpQcM4txXfuducKpv_{6}vR^aC=J`3a}4%pVuw@69c&fn%F% z^qUg=W0mngn;QaajeVlqevLmLM1MbyYWaYI#;g!LiNK*tG1eA`@bhm@hNtD3~^s|J&zA~FaYf2%V*jn*_oF45fKp}$z*6V zdw{CW*Dv?qR{}={D5Fm;jKX{dfxXT0O{=$aGZz_r!^4YckiiggPeYpBmZ2 zr4W_G%?S3C99gSuixUN@_!ZD_Ez=XJ7p3@#Xg*^r+UcuoXw!rBd*(SwI)N1V?M#zE0VM2fF}lF4|rglXgY-*D21ozs;%N zc7><1m=AsBi&6Woru=cuU3M^CfR)5^ng--{&^hkiKBLJNV_Eigq7j%*9X+wMXb%%T z9{a8>!O0P91FZvCjQgj}>AX~+N{wyU*zsWv2Po50vHd7^J=!7ZBP7U&RyixB;t>mH9bG)9hybMs0V ztbTxhgzj`}A`Te$WFyj=R>N`2!!yJhOY0!W`kf`@%C zfXO&qfpm%N-zphn_l-0*b8>?Fk&I!1UO}{=*PY(pTm#*u`mJ(JQYA2Wbwc@>K`i{c z;?1QB@V7;QU{C1_0poMt zVtph-5fRV}G*uXtZ$}kLtQBpiv&&byqa+?uD>sK->D3npyse^riNl7{z6huehhSYB zb#r+vyZkC_<>u0UWOq631a+l6Lkw zb_>%Yz}wImG+rFFV-=dVw!L&k5-{zJeQ1YSpp)~3$>4>d<(PkD4Hm#nsC>H%$M43z zrb;sQ{72!dm0y?%xdLOK%w?0Lu-9+N8<@zN*@u&9YXbUf6(%n zg3o;==mC)^Ou;2iiGRK`N0NWq2AUvR%dttr;$wTK3OGaqLP=kOVK{325=-v8(ds79 znDDNYAN@phHp?0iUE=iWKK7=2-L1Z1Hhi}IJ2UkNR#{MVuT&*qPFstUSnyp2F!Vqb z7S7e0V`^esuxvl1vzxq1;&!MY7Clmjmsec@0d9W1U}WuwN`bZG*9g0_oJ0PZQ2nhAE~zPfl(093mra=W zCX2MGmz&d!I2D_LD-yo|SV{3wHWXfKX-VAOT%PPK?My-QlR8pBnVIjYqkozSZRN+f zEsjqc<~p;>i`eE+uV$Sg;`UEa_QvDEdm6<(LEysFVcz>dQJI~7MnVY!xo9!?YXLLV z1L7f_@;7lWET+YEu>g8WJJ|hx2))dk(gvVU#0I|}Vm?*hur;Ye6klhdD6loGy7?9c z34dgW(~5%soDk*F{sGXS#;F_M9z+`VCcn+WKX+aOynEA~+R_}SbckuuIn*pIeL<69mUnpAf2}e!REWAQ6ng}P-ML{+LN{Lv+VH6z61C;*VJ1@&JBoE|0;67sIeFvP9 z(d0_qDLkbeK{yiVGZ|N(hL@fl?MA<>FTu{AskRx3u$uZ_yjxzD|L#`?q$8Y6>V7XE zUo6Sc^K#sg;&x;=t0WpQ-FAmSiANDSv7lOsUfs7*BP5UMA3aBNBc@k8sCZ`+*3++n z9q)Z8VDr+~eO&tyXQ7}$FMLdJJ=f%X`5NeCIY90Kh`F~q-T-~3RyxcBAw#`#@+zTs3(!{H?P>nK@4k<-3hx*rf_HT6f;)w>bd8i22SX{A)7Y z@KpyjIp=A3<>{JmILKB!Ibr-m9psvTCY_YW%!=oB0Qb@Xim#cx!9BOrjR)IdE|x3?*-Wv?7d z^mNb#?Bmb6(!IW)-VY9oB z+;_7(&F3ZMJ7#^0su_*A;)F1wbBolJhkZWSv3wRwlPa0+F3hnDCJWtBhOsj4?9ALB zye9fL;W9&g;y%Cr)fxT-X!qpwcC>^_56KZOLTt_BSIPSj(2&p`c=O+D`)-Yb329Rp z^kfL_T`n9N&I3|ZO&n|#ugThbF18;UtXUV9{qI&KTKBoaVG;Tbx{D$2N%eE<~uvuUbOMi=}RAX{)neKiM&HeJ00# zJyB$V7dIKsZ03&mz{N;~MLz4~C_7MQFmb3|@m8ZUjo@o8Dibc} zA%JX+$N+9%CNfvO=a@VO_f5$%_g@0<3o(0tsPBErE!~snv7>MBP=RAC(`?YBm&bm6 z^JIb*U9T~ViG=(8Z%RY0iOY6#xOjDMeUL*uEkXK8*LHJ>X1c7nog+J`@G;|3%<4n+ z@!CMLC7lll7l%J24hIkx>E>1AUiZD=DR{_L zV!Z;gwj$`glv{*DF1t)S@ZM|_NavdPIGiUo7!zl2jNYAWl#+%_PUbf(WQl{E#i>ek zRqx2#gy|=6i^$`z+~vHfn+8(2^I^Z^ANAzjf+n*QjQ4oOpM+AYT37tq8^9bUGvinq zUkaEjlGD`|Swhg1B*%+_jbG)JgVmn55fz||-s&%oEd1#M0%Hs?W=0aa3@~3My7?ht z{Hi=$BbL%4A1hIX;&VB7D{*xnY(bHVsEa^?(7w0ABpb}9+NIlFO)XoFdKlr0qYX~1 z!A|=*Q8}Y!E zZ5Ozc{YEzINq|NOAiU@w0X)U5fejLF%M4_SGPM?VBN9=6hTgGRV#+<7h4`UaziJgHh zUJ}fQqSA$1f!cPwv7E4NBVAomtUPQVcy&G(am~A?fgJhfcxA)g+?!k|!cH2@A{Ha6 zzlWtj3jj?{6(Pvgw}c;jj7Y^GtqJs(=mNbMw)Ig$TbzF2ww}c#5u1N&+Pv6UI)!Epw-Wf>tL9$idv&kkvz5-ATL9nL|NVI|JB-IrObehir0bD1&*J% z(mlwjkVqIoNO*qUv+{ZZ09M`z{^!bguj2xL$1KFWPeKO9YZltzq-lGLsOlkA?z3d9 zlKxEAEG5vbAG>|*d?Y8tRiAx?Qm-L^>!-_j{YJ7QoQP}ah9_#<0*O@!JlebVZ=a8U z5IOW|Sf7MCif%@biLij#f7I;A%uP6k+i9<6y#6?kYC52(Vp^piSUx!{gfl}za^c+f55hE0&JVMPcpj}lUC|&peP4%?yFyoM*=Mu5_S?%CpfXSwDW z{=#}fT!5Q%s%(vXt%Hq#Lcp;x{0z?zGE%OpX$@yPvc&s-!w3Y5Ke%z4Gbf%=FGP4z z>wNOZjUE&~dDn_(7j9})O=K3dpw`ENkFdIX4I5Rkw7+ zFti^AaqZm-?-nAzhNQ76Lj&OJk}azVeQ(pfZb&=%*8H%c5R*La)&Ou5nHhaXY9rH&wvtHK^H+ zqyBlv@uq{m;RdvCj>KsfQH5t8I;nSUNQn?Y$gV5g znZ02(yptmEo9gVc#5gAl(T12@`sfdRWtVrOFf6mnq>+zT3;C3|DRI%hL)5mpeQ4r< zgI$3gGn&U}d)_mKO4SVa;*XbuK2rDNf8Ue83oW;=T8)aqkz! zA{OkZegR|9SFYN6<6<9YUzb$R0@4RcjUh5A)nxB?U+OO$lER%&8hVYBPYqNSNfiYL z5O@~ddr~`C3b92RuKGv-^x>Lio~zy9Bq)rLDem8{c}|5E;!hh!(szJEy(>78rHB5y zBZL5IBVT{&a^M51N^~IoO_jP((GCb#ARh*N{g)JN8Nzp35KsujQ_(vpOY3A}o zMl^hu5rtj0420Zc_}@aU+I(7jFgRWtzo>e?GGtYY`UrML$Ab1w+d1UGHS_E4kzJVS zGp$^^(=D&+C7U@&&SX#fA@rDF$htw|_k-PF4&;x%0E`s9cHRxfit+?A28nyV$MYRc zvwJEGLT4@DPj<{sq*Jt+s&Q&Qi&2&yC%RWKVPFg&Hu*X2DKMA@pZ)~pAi<~V9MXG( zD4^m`W5folKw`hz%V0iaXs6@PIgGg&5#ew)|CW30X6QHXx{BpaRdXKLQdu zDHFhTsDCSq`S?at*-L2*q1jX$!f`RR}QW zLyF~-u?|G`d4mCcu6S4wD|Px@{dv#9P(Xn$#1*YlIo+#(tVnxwI+d~9-+G?kY3qbz zTC!O;s1JUC)0^+mh9u{ZTBh?xZ zL|Qq*JS4N%1rFD25ohBHn3D|1HYlKQaY8qv72eb1|F!qs;Z*SFBSmFqCS)ah zR5DVs5;CHYP4-@iQbzVp$cPY*vW`_UBC>b($jCm&dhS!-Z(oh;dj5F+d4AXR>yNJE zs^jx{f98F^)?GA5jfa0W+pNz%6=OR1JQK6#{+7b$p}YNk!R<({SR!Qb=C`^-XI9zq z6|!#Re%A*RnGPj?ZuBV7yZ!9~q49mH21y(|vAP<6Jmj&j>(gu^Btc^m^Mj2>q56?z zLOUeck9nMY0J%T8-AXlM)-qV$hT4@{jiY1njrd$rAGVdvnfIRl#WYzJt6S-qC|a#U zKYK=ypdaLBr;`_MTnocj+~o;Ca6~YgHeT40C@(KxrF44X!5wb@Kv)p%c3t}x?!FWB z=k9Wfmw09$P@ief+~#|mi&?kVDbf##FU+o6=NPKELacpjz+<4KL4Kq-(0)g+NNeG`TsLUgShA8>V4b5!2hdLlTeG+WW)r%7EkH`C#n z5P6_rCR?*$IsvCTi~A7u4a||C&0#g}XK92lIE`gDoTUs&oI8vC~&a8qU1y3?USpqTXp&MA}`0I?BwZy zC2C9tmZ(96F)%?`0)fKPM1fVYZlgN%`?!ezdz=nG1|*;V^y9#%2u9z^;HSeHCZNzK zIO%1v6i?{((y5NK!k(4>sBd@OfvO&Nci%mX$TNaZ(n*s0{z2)So*?p?>8b|^oS7zg zeXTktM`=vrbLu^xT%Sz&NmDQ$2OEoA=gDlv4}=@1_}7S!^JT2Qr@E*c(D0Bi?^U!n z7OP@>2dfzts5*j9#;b3F zwK*X0_*#n<$z7^DhQCELbDo%&siKDmAPU24quot2_7PKlF6o$_K9r%CA8Ro?k zSYio(%8mKIi}D920)O8ZfZfhxZCLspb_Z%?SO9duo`*i6|03u;Okf6ktba9p{4eXN zGy^%dldMt&P z>y5L2$IPo)_D|*~L`nmQCQ`HKoPSb3UI^WNZ~(e+5`y>g=>P1IcODjV@08a3uGRi| z%zk_*!-oTqiz`C^Cq*TNr+*bnyzGasu^d$~3mKcPSg{2)wagw0g=`fo?A?~QL-dy; zFJ%ydOZbN9S3c(H{~SJMnUSPxCkUc*!XTH6Fmdxe zbtYtF?>rrFUHd@qxi!t5QxJgFXd1kG)DUN71oIBL>milDz3sj`(wJ5LsWccwSUGOE z=i)1#nPwERyUS)XTAP1#a+U*zXjr1hqx39ng4nE32@0pxPjPRO(u8ksk_ruyEQ%;U zm&StF^-0{hSlB&?R`ON!d<39Zh-iPoUrt747$KItSKfZu3{K4?sYc4HhTxFaZwrC2 zgN8D6p!R8wOs!>z@fNBN=M7WbU74nMc$_~{0t6|AD^oo;=TEg-RxcS2nO125fGRRm zxaCnCYm#$;$CIvX0V}UKQ^%=@ZjbI0~ z@12vhBIoAj#*PK8kkNsuS7+`n0}cXJ^U$=@Y**P^+jbloN*$z0!D>apGAYcgv>cFV zGxR0Ws15KId1T&Ga$P2fCJmpldbcA26nX*yDk_xRJL;0ux}X$rde(xzwC9=zcgPcv zku%*4&XZ7ngk#hi#i{$uXl%5RR5CkqKM@uCq?;h~A6!Z{?cLJ({uc`ZL^!iK_tdYX0)p^wtm<&?o<{8tfcX)xTy$m8E?XMtXAa_F?}om4#Xelvl$X3I z#z`O(v~fkG(2A`wGAHk$Cv)ZSfm-q2C}w$;`UsBnE%c-wvaDHAB3tho%mCqpQLPc& zvYu&1bB<=bNn+0T1crH38lpJZcC~k8C*1hEG}m~Z%w}*>LQIJz#m1{6i6G;)aP}&^ zyV;r3XLrulE{*ubf22In*4`oTkR>G)m^kSjg@Ace8iC^iW}P24a@o4yUwdYSzhp|)bSb$^Gb&U0@90Fs#I_^4$^F|MvHkYbyF@h)I)y8 z_~e{u>b{wassFN$C)$>tt$%6`eY!zm*Q6bvD8XF9F3!e<{j#ltq9`y zLbD;|hDa`^KIFFfbEc221g-%t_hD)jwBE-Vh6zHiCFj~K?%{~!7--;q_8o@sDl>wTys9<&YHz_y}&octU~DZA&{B26c{(Yh&mQ8W|BnzoKle}|G{q4 zajSaZ8u*HW^#vQP+~pu$tdM;tDy6Rbp{v;mSsPNb2Tl!kbiTNGtU~rPg>L8E?iX5h zslz-?Cb(BR8joUy+cNGuX>p(o;=0?SfPjAMe8bgQH*rg73zPP5=K z>b|ykIn)*m5PhEdJBJ{L6DJq0)W&TJUD$AS-F)bI6IbllOMr)gjElJ87CAF`aRCC( z=qf)j-aem;QoP*%=39G-8%kiT%6otQqt&@+TA5QSW8&^`UCv>S#pePCZ8n5sJxCQB z@-N^7Lx-=a=V-s^TDICSN%?r5zJVLyZxGSGa%l6P{fU2DPoIS%=VqN%--L1J{Mpcp zcfhh%$SxMYzd2surcqOLTD17*ksTN#)Md1zp|12?nh-lbhszNr@uh-Zsn@tlNI=T= zOZ6po?KgQV*Bfap2g_I>;xOcMdP~Mi1%{>zcR$lSa1trTQyac)z{s2xclx&Rjj8HuvA|iYPPLXtxw_>t zvR1uimoRH{T=ui=>IR-M0-1AS*R#TV#dcenHVyF_BhM%o%vg1|eYpc$=DWM7M7zF) z<~JF9UX;LJ(`&DbCf|UD#dhd^Zc$>02yPkwIr@+H?;DDeldX z=X%^*S@+2XHwxOXqcBooF8*s(=wM#5Z^UgBE`*I96=2%&rwgfkEK)Yq0*4y18Y^fYXtAni4}Qnv_ejDdhQ!vUiLUjo8M5}8b**Mb>|z* zo;{%VqJxS=4=B#-z9bjhrOqG577;8Ky=Pqn@%-=XocXxsxnqeqjQd>&3?jQAO0#s z*kM%G-BWE+WK`s1K8xaSFl6YKXKAC?A3+#Y(>LT?$=ZP;NXjv5LnidDU0WrmnXFo3 z5W_>1^0!)+O~=`zCwc+|*RRn0cHL4U?mnldJfiua?r>!Z);wi;z|u@TS7mT+y^&nt zHnG+Gr9szgP}48~-$wFjv>cZT%;Rx+ic#lsbT<=Nub!B*@c1-*(m*FnLfXP_eXcmL z-DT;~5^8rm6khWmz72Uq`CPtp+d?cGzbs;^(DH_HVu8(PqoQ0_-s_VpuQC4D?=5~h z*^`3oZOrPNj8b*hPYe>kM6;8gs+6vH^qNyDfSUUiWggU$92(T~CQ^hkO_t7w_W1kfTWO(Om}hapBa1MVUA0Mg{)C$FOs7SL^D! zy4J79i_~SiOe!YmzDLiLfy*c~x#j_OgqL30bz>eTD0GtTb~l(-`%N#qb#~GdfURob z!-vomJX)n=Vt1l%m6iox-@&G#lG0)0wlvG`JZy?bn|>4+ZjR5az?$PNs(M{1Xg;E^iv4lPm9@QSysLadUzxd) z!Mp3?GsD0auT8>+JjRoAaHTO&oBQYxUm1gdo2=p+HL>df1l_N=b7EKPno3hX9hyPI z%;pdp;X$UPdKKFqVYv%NWD zJBt)^S*&zXNGdk#l8GCjwn7Ko$2!S9TnBH9{}9MZc^dNg{PHBYpupf#E&b5{0g`Nj z&HIBCgVmtp80dNQRU&{8u5Z2VLGr~%br>q9qKm>!rm||4Qq@nW1-Cv*lrFgu13@6p z+&r$$F3H&j6Lqg?vi6fGD+9NoKC!*C-`SeTR}ZJ1>A}*=#Vf)$?1-TmcnaF5Sm7cB0pLfcvsiQXyvMo3 zJ^S*Hv{VNUSgFFb*R+4`6CGd#Ln)<6PkyO~zHiQ&3QB?bwlMPpd)EJtYE~A&jP*Uz4{-w$ifUSaP0sr&qS#{YL|zaPo}kItGDv7-qAoHVesF(ZDz^a9!ukZDF~ zxjIVh@g~`@>dy;_nal>RTc#j^B3Xz+`{U#MFUod32-(%MGsIjr zl-A~kxB+x2P^j61`Tpo)2oB-q7EbeF9=!0%Yo_K<=af$rdkcb0mh3>1s3ounGeDS6 zB%~770|Ze0^*D^#4(kWGFuc0`HDl&=mB7d3Yi>fD-d^Q*^$X zgr2b7RNj?nAx#5zUWvPlIQ37313|JR4e$`-w^6nb=&y#t*5u6FIfYY9o;# z8f`-ju|0*DuLKf<8OW{1#Q&Io-$$7CaAx(`ghld1g1MmbH&v7rwOpUu&#J1kMR7J7nki<^QbHmKWmig9m}&YJiD1?8>i+tcQ`TYegRnqiKE z=p-76LcK>(rwln}2g^5ijMiHcMAMhGP|w+I%r9V#@?N;UE5w{5BQWg;t{;J79SQX; z4P~s7SjmxTQKy*(m+(oRe}=5k%PTG9kGt#08HZH;JYb^a(L>ytZ|>$_?e}eg>oHAl z*V_jdr|Esoi4>c#2?ze=-7VWoiU}fISk;xV^kE>Og7feQI02fI1FVh2HBPVABYD>wNnx)I$1~c796&ELMI2O4%%0UFO^T6Y_ zw95?@?wi{J^`@p);(~->tXB=Fk5w*Ee1Y0-0*PX3+67ZC$B=vRm7$si9>sVe7ZWd3 z?c@KTitn%H0Bbz@tomWnj-{!}>X77`F|eZJDI7ML_q#kSiZtk18rK@WNTBH(bx#`k zEuDV<1R6(m)>j1Cm*jp-HU+}e)8x4xUz3!UoBD`M&eedwzzAl=c0p|a04sHlg|#slKX?w#MJ zJ9y+2!;pKa2B}>oW^^il)TNVdpE|A|sYFH^rpwn~xWl9=)jD z-B*R#gpnpwuJ6a_n>Qz#5|iIJhtT2b9G;ONOIVTc>MM%DWk&!uK^k1g<(`; ztl!tnWXcU|KK~FdvvbFVK3UC)ONR@%L8KgI=iuO=N?O)XiKDG#l-9yy9@l0;)&_?% z*Y(7?{&=-)rSl%Wd4t-QH%VwC?v~yybr5^|s&i6L)$A3F|9mFxC@P<7q{|yt0wD%Z zg;ixly-{~t-Pl!23i)~}PNKG!UY4y7y7JjKFei8pU{*!wrA0c2AyDZWJfXM%ug{^^ zlujGSF3X;5%Ivh_U@eGv*0}RRug_tw|0KN6L*SWF-|_NBL}e5A@}xV{p%drS6WiAt zz=~Ql1w;Ju?+ve|V@F9WyL_uIsyf6pe{$?&li2+-!Z%j;CI3~`O%m26mSf}~khlHt zlhZE83B;yvD4{ahuF*Aur(9IWMVZ0Vqi7{H^hCT!vY)UJD8)Q6zD299?N%pkMx<4g z4-vymkt-13!RXsj8G^R3+sp|3s)mYy{MXAXcUvP=-^=)fUeH?|f>8+KxT1Y>zZ4Ro zPjOhE@m`cPpCU_#wCIBMyHXhl38RVixdDp%l$AbgRV&VOFgm$01^LChV@8~fRorPYo6C1me5&MZ0~Nw42F#%{_p)q!;0j*tw{fK18ygm_Xghc6Xm$07xG@7;G8A5!#pj*N^fKqKyJ#t^SBMlwqOSva_3-DStJ8^O+ zj^)9~&XR1sVy$yqZxjPvQ|m*S`~@;U+nT2v;Yo{J$kyOZGk?p6aRb>JCLq@erIXd7 zJTJOXmXZ{>`h}GqU!LZ`1@oAMc&Y50zQtO4;QOHAS~|H#PG*c(E9py*yP;X>vIUl) z*??-lgFT-r58v+oRF$RYmTH_^ab~qXvE22#2e-vLTs;Z`up@NI&Qf9ez8=$mGWk92 z?Y~-5s+NL>aY#(~^dr}HaW(!8vSi|SxU;uFHsv*8gBY0%4N|rEmWq~5{zk0?fRT9A0|U8^K2)*#c7rk63ZdP2i0kom18I*>My@VD^MAV z)liifrf4hgqfEOT*)E@cCE-Q!e2t4|cBACI4X<;%{$%eME?CnLi(u{P>ZXXIPpYl@zsugM0*C>`>aLp1rY~x z?rtN}g6A8Rc9;d!HTjhHSLd3h^IwTClzI$)y*j%u&Z6$?8$un)nHPwG+qNd6v2%-y zoI<^>sM<}H-88mKLdw2964k9Kvi1pi?awR|dR-!E%?ik~TUyDvQA!S(ZQ}?FcLfVV z0yej9EsO5FFXy;1_A{MP3paAW4j)L##R!SUofZ4D#}N)B`Icp)H~mCMwh%iU!RVlg zE$@g~%XRfv7+sPK7Fzesm8Za$vm3j5C{Vj~JQnR7AieJH1MG}Vc{y$Km*OhkmF?6d z#l93*L3XqU;an-M$#C(P;pB^aS`S?)g6PCq^Hd;SCJ`+AO0qS{Lq2|iW9dofV(x#?Cof{6`g#&t z_mS@$Mv#$12Q+6fV6%;qC;9B=25m}F;!r=)O!q4t>T<5c4jOucK@s2J)s6S19=kgp z2K*WKQrfm5?G^uJ2~T723#0K}^yKBdC1F-Ys8a`rc3{0h#b00L7tzt25-DKFSNQOI z3s%hHHP>6iAuZxfuY1UT{a(%pZNWxoj9VeC!BEqnXz2opn-9n0K=McPJu2MqYiwr( zNT~=jTh!5cdgLk#&ktSE$Y5Wec=?p-aGdVs_jKGnJ?d-FP6ua;Q^?O68qL_;&yck? z*0(D0#v8&0={_8%^~Ax!GnJPG zYr7;S^IIYG<8dj?3*S@DuF=r>OCN6yJ^s+~qwoLnO{pVTYxg^m#~mztX}5nq8v}5V zpsY{xJ2(Q{{D0UW8PlVVs16oy9Kw~UZ#G`*PQJebV~qQ}ceW2axG8{zai^#)(+d6u zPhfRoQWV<+RZads4#F>gOKrfZAl0jYe34&{^>?U&@jl=T_is&H{PUmW7~HTzB5u7% z#b2tNAB_z81;80D@GPJFt*^oUNLB%dt0szD;ZMZw`>uM^pNvM6{pI`+=)uYR(ioNY zyBQjLpWO!mKrmU88^K>r0)(g>+*%xOZ2J@JlVi9*utoo}X0CFc*Cbq1U5SL~J`olc7K!pRMJ+5W zJbWxH>?uOvKNb~{#9QElroDoKrm}(pqo%v7jlGjK78XZbV63Dnt~_Pvumj^M%Nxe` zi*KULZjmd_$JT$7H&BD_0p#>dY=bltUK(~XEHNsgPh9Ny>dtgL8U|C!rR^ov+aD6l z<|Z&NB!o=y!GCnFj8=g-a<#DL^L2LnT?I?Z z7X%cYtv$^deVv_LJV3tEO#gES2q^#lnxBdBe{S(~lx8w`uF0t2>Tb;_%J+!x5t9rN zBO{}fyOj+{OY!Nys{@~;ne040-9Y^OK0ZEtK058KT@Pz_1y^UFPfwZuOwGS5|MlX(D@yVI9{OKI@h>_5&$ob}Wr(Es z|98@4h^AoAc(AbKu#^?$b$qe6G6`n&#~8ZdXmgzl&L?rHkEdYP!yn#`YQ;VOWM`jcS(f0hW=CC5LxBovnxx@C_B8O04=1JIJy8c%Y=z{+Lb@695{;vp1vxYE5Ixo_+ z%s_zqMebWFpP*?(HYR1nx^Hs8b=Hnn?9$l)K97LOqM84;R+&yKe(D_WxK_&s4BF<+K#nDROky zNA+@9bdzO7$Yt5JZYO#NZ6eES>m3o_$$Du1v8+PXUcaz;s4vIW>zFFHE@)l$vG%T< zVB~8`iJE^~Zg`^n{a?>y^#)nxS#5qHw^|yZFGBIyNsy+V8p2#V_!=YDi zbo3IUoPIc}IO9Eoma6p_c65MWUqQNdB~ck{-gEWH(+lYFl&!Zy5v@nk$<3v1!vYn_ zQ^!p)yTnp)auc0GCqteaV9<-V8;EC(2ba@H3(!WVr?ge8kdt|WtN}tj_-BLY~ zn#`NDkS$Z@_`yD1E~SPsdj**r1~RegBJqu_#eBL&gnu13BUZ2{Q!IPu7t4-!Q~N9Z zPSbVvq8_U$>pB(rel*9Ygc$RAvg6H4xWP4sfQUR)Pj-8UymUtb0_F#RMrWKTc_A;FioUBWOJf6)B8MoFcZ_(c6qFmzQ4~sHA$(M z0ogVj1J${r#{AGnVq0D()XB~bQ(b({GhG`Kl095{WosAg7v>(T0|KE@wsfDcTRx6g zw88mf`Y=}*hDl&qSOJr9E~iOKp#6gAfv+4L>?oN}uljN4bHfEY_{Dzd+{VUY(UZt; zot#zZ`xB)zc?$FmrIl^-?U&n;`Wf$Q}}!eq?r4Lz^cSC$oXkbG{O{TqK% zqE?K-Qiiv_r}4r!hi1@|mN7>h2w3U}xqwZZ$d~p?a1dneYp`B}Q}bZe;75UuidVRU zazso+6zXoh0QQ>zDhoD(|s(e!E>D);yrtCyvLqxgzHnb z?uRls+g~YP(nU_T`W;XdCNQw$c77qrbgh{J2d+@zN;U-tR?h5rsyh<*9VtZ0rbgax`HTDP!BQs9x^$&kbKP_9BCDyXismbP%xb!;rD-}J0XX#{ z_sCo2L&=VsYFdGpBf=>Oaa);K9qVt3f)P!)+}kZzGm57YoW!l)B)_*1_p{z%qQ*Q% z`u+i2)LFyYSkiUk)IhO?l3lgWYD+jw^BaL!o>}I`GY0 zk82L4rr*`Y!EnzWo%iI|cVt04HQ7$gsr9cZ36Lg`dd|!SG=F3G5R>^HKYUW#GP{A4 zuF@TM=m=2?X|(F4oIIOw)PrmWOL(+5#N}mG={ZkNJ+_s8)vj%%6aH&W;AIvfrJ)hk ztx?6Qnlf!X>Is~_{2e|@99amV)d_3@0W>&Xdh zIMvT~U9}z1T(IVTUKc%R37PwBb+>r`8+z!v;t74*n|>xZ{IX%(sKLQ8=<+B<*8B0& zQ$*kxR$vMj?BgQ1+1;8Ypp_&wm7RR>OA4ccByg8!Z~Ka96C zb23gO^|cdv+UGsT4N99dAy?UxR^nDc%gzX@uhwx3#QY9-UJ$MQ+;nZV&knlsTfVr- zE*#;+KK)G8t_)Rnzb@HCXuoJs&eji?Q^`nM6fdB1d9?oL#FwL z<9BHJe}K5O&b>m;nMyo5{Ui@%*p^_f1?z5Yi%sZZYEU+jDS;d4z2T9b2)i*qV@J&Inatn`>|>>_IoYib?$LT-GtnsIJCB6=5eeTn4rNTx_& zgKs51BrvWmGz{_PwDI;(zt67WH&xNH>W`Xr3pN?eZRU@u(D*Ko3Il&(3M#3_IW&P_z$S_rpJa?Z2GMWwBr!-CI4~ zat6!hrlk0|Q&qoYS%af{tz@@^HA0%~INyth2yaNRzYmr=o?LR-ZEN-r=fo4{W>8&z zD`3?AQAXOmc$Hp+dFG~AyumHIRsYNLt*vi+_GUaIPC<-;=ktyX(8Fr6VfZ+&EXU@M zh|BnwY#CrZU+md-N!zBG!|RnaWWUI4^f15aZ_{|+yl`zs!PagE9!hf-anOm$Q1wz! zy=4`5o7eiKU+zxm+M{XNgAZeuzxpd%rzM#K?Dr{Y#n&Dd)fH2P>qoG2$}OM1`k_EJ zvk-LcOdzQmE(i4{VmPxpb=iKoS>0RteME_2U4wnGYQ_ZyBL2WN50byt?v_#E1EsR6 ze@Gnn<=mn-z5ptTXuG}q^_s0@$;o^w`0oz6=4(76Pfq!=0Df@06yjG;HC4aELRbBn;h!G{`PQc_vOO1Zko9pBUPx5>z#Kr7@`!V!{LEmD`1F?@e;a&nuY7rIhAhBryNxokNfs>)z$^|z8X@nELJ7d>cxtvwg=J$^OJus z<0t*AZ-<3rob~0d{w=37rot=>-#|#cgRb+{#f=hhM$E%{Q<=DuGsjA}J(}Oy(Pwsk zOc=wE<-7pJpl6#!3x_WPuRF-Dh;NJ-j+M0yY{T7E?<}*+MN?&aMiXb>J6JHn{JbCd zi%~Y;HG6*ErvtDPQ#>vDV94CzQ7~+~X>c0s-Dxv_9s}BVhWQynmRaBXQu4A+yViss zelxxjel?9D>+u#Okn9!TGSo)UcdE&d9vXJF5@mA@aLZTxJ)qi;lndr#?Wt6ADe=9_ zKja=?e5f9I|Fuhr6i232$kWt{{*VXW!y6ZEfmZ{5f4(ix{wtWa*^i z)&7CiqE~)drrUp4G+;8%`$sTAi!~vICFy7DuaABP6V&!CeanKVQ^2>uXEbN0mRH2Y z`_Fe5RTJ9A;8!O{N2mhIrfTiv%GW_xy+$%|7I!W2Rlm!tBwP0xy>6iGM2Y`ihri>LCe0z|+OUnM_uz7~T-dkQ9CB93H zdDM4!S<^oa(Y_E6ut6%kSh4pAp{--bWMtY*txWFeq3o}T#Ma=sdGWJra1J;0QKqP| zg=R&7M5VB1G2n(9716?)_*u$EE5MFH!*f2+lh%;^)4C%L|YDN)&o z)19i0Xi+<}Acn^XLU+()9@6=Eq&xe2bKh1ya$&chuw`L-g3obb=$f;NhrwmTKl0>e z&ZUdAYprnx>UxAZ4AvGU>UtFbTWwJXt*}nLhFIQ$-}zdo;`=C zg~9Sa8oN|?(FZyixHW@q+`86_QmPh@sIV`o?u{!_& zksPfk^ul0B{x3lrP~>=qQ}RKUSn#qg5(5&Ok#YNSsn_UY0%yCzLgi=#nUCbS9KlOF z!uGw4YsX3qNbth@UgY4f^(uyJ8K?yR1QpQwBFUnux+?ceG;XrRE3Q2AG~q(Uzq-9c zwauT*W7r~$_~q2C)2M>`4^Rz1GMV0FcDE{9Kd1dBTk4@Jx}gl7-zeiBjp zeJe5AOzEKMlmu8I^~*H`Ok>|LrjzkyVUFaELVnwevZ3hPHpk)ym~uecbDt=C%KVud|2l9E z6}(-i6#07IBCq>)$vnD!5h)yT@)G?1h7;^JkB)+^z~vnNRvZFCt;y-!Le*we;aiU7Gcgk z4yz|sU^4=H+PN<<$_HD#OklW?oLn?4KB6x|rb21*QX zlKR)UNQQ$f2;xvJM)s=dG??g@8b~mv{hA1ySh-Ll*t1EgVZ64sU{txFuWZb}+Gctc&iSF} zM6b?loloW*Pd{?+wALnZybz3687o8?C$QNn9UnO6nYOif_i?hL^gWHANC6I0lr6Z- z0P#UnzAC1(jd4^tg=oqqeM@bO6&yO)YE!b$TC2{HY^;*Au z9{eTQik7?lqD4uI<1<-J!E~wi9PF9OK^5h((EXwQC)6UfZO7C7SwYY@M+}c11w=Ui znV*Pz!PieWnmL+yaI*Z}>yr54QP0zad!I(pTLOSXWFw{B^q~|icWFg5CrH-OedsK` z6KW45)%&cI6~DlvPPaDFmVSAJ1RwABSALfomalzd#t;dS&sVr)Wz(D-;D?vB(RmCA zh}sNjhYO`e)+#-C)ntPB6arubW68Y6$&vS(Sm=X!d%aZ)sVZBIKeug+uGpkMGS7XU zEyEn2^bPuyndTL3_XCf*@|Vru@MRux1bqC@!vmN^)PST<`&aH8roMYmHj$M1@6?co_$TRaghko$-fTY%Ee4>nx(#D-<~L2f!CuiS%P zA_#m=+Q-sOfFU80c}yHa2xKi>+s~3^;X5*zrb`0!x@}gy(6IPi!;A|AbFvV$RZ^7I zaEDoG>V}K`x0Mv1UA6C0Svo5#u=rU*ft#sD-$DkIQzGZ53f`&|e;PG7dXPt^INjET5qW?D_lO(PB zYkyZEqzrI-_}XO4z0sHD2GxtAL019U3(X#=E|uxrDQ?Y1m&VB#O7!b}wdLiemz9C% z>$Zr^2FZXlYE$3f%pXnF;JaF%bvTWic9kICsv#>ANOJcWb)}(lm(7VWQpqjN6x4o0 zz?mRquR!@20F{*XO9X>1_ShRv<{>cuQU_p0PcB?rOCrhg4l#2`WeIX3Ur z&Wqo4ekMsCBT9KZ?O4$eLRMj`Te@wbWiWVl?g%ma8FF_veUV*gwLmqf*8gauSv+zE zfSUmA;THvO3?byVADJDJZVZR9d+(lnCtwJ;ml1IWIhxQv$JD8%)-<@x8T|%-%7>*- zK;DK#)h6CRY~FI<-RXMroF0cZPsU{&eLo%VD`*@1N1C|Z%a zgCW;sURM*?yi?SDQO}d}DN(@cPi1jGNiKFtkoGCruXyQaYb$;DR%52j;CuG7O;L1! z-{DRUE?M1BX2rtR)I_t@@Z8(IrLtV(1{Rvb*J@c})4O+=o$G3~BJN5DIj8~{ud5GP zVgs-Q#~n*NU;sx|c*g zW95}Uz}oNF>VL~-oMMhSLe@|sq~)IEvArXrtYrOc?1S&HY2yqkJ18#iSY@5n-D5>%8*i1J(L;UT zw;c=#Usq^dg{%bbU)Or0jU>+!$MW*36<20?sw88#=zoaxPAi?cH19`5>lH-ILmZvE z251lk{pA(BCa8oD6EY1uu@fn~*rx>lHfwUxHQrVY9<({dd?G$5MZwikAXb@d(-VvZw_&goq zefleG3bxaR!Vklp%R##?+!;Uq5^T5{M|P`qflII04tEy1Gau+Q-+JZ}>l3|c<+2^> zho1H_<$UCb;DHtG1ReuH@(f^@9G#6C`;ucK`CER-c!wNg&gXUrJm~o01LfuIlUJup zWVFYpOIIh~YzDVJb64&npIoaZM}I5THikn3jSt6|Af9WM^AC=IaJ;@dO!{swB$Q~z zcrXnz9WA+S#;g?8fHZ{+I*b>)gfKvVczv#+d^lpSRLgMq1xs@8EyaTrKfcUQP)0tA z-hED z8Da)eWghbL&<4ISo)t9jCsW~~9)55*HrxW5?wBhIJFmL`lN1OEN=*aBieCCnT%#K{ zD=JJGqRO)M+m~aVciK+&2N?XUilb;xGJ;m8VXb(%kkhwaQ5Vu2)-Qw)th~~Nx^FAs?=2tR~V=eWv$vkwO30w5HMv0(}KK99cCetK2X%e-2 z)LYv!C#TxIlYM(LJ$GVe+A-UXt{Q>ebH>cAS~*XT?(2QcB+ge$71XQNO4ec#Z)k(b za;@ZCs_Dd()I5(eS!`uf?2g&v=X*KDeR)mq1l=pzY)xDIK{opC0C(L@)jy zQ`yWE>lhg?vy9VBySyu|-_>N4;?narWvvLK1p`8$x7J4eA(JHojJ-+AMnjDUZBwlyi3S~1oE zlpU}i?$s{f$cR}^uxztz1YAT6%_4HacT9*QAsOC1~f_1Bx%&REgiyQ zdDVxr_ythMoZ5w_G-$?H{OS9es=_mO?{eyGZwID$?E6N9Ye;SXal9l~H@4?#PI)iGTAm(lnC^WN&TloSGHb7Qnh+&N z!gktGG>W8eMRoLg16};0K=WfSCvyfs^9auSeM#K5`X+%n;ds5)=}+*XhZS$-|fx=v|h? zVJZbWZ^D%1Cl%A9hQYDqGdeS6O*CHYixYW$jLM!d`C94>;h3W1N51XI3PVR!rcVXK z?ai!b1#K$FTL7?xUQ`py0l=_?-f4EkL5}!-sfo@@bNiXXdhjZ8FM=CgTDf|vU6cFq z(Ukkmh4C`xemyap&`1ZMj|zpQB8bAu+%P*hCHDibr!))r}5&rHYw})%hRP87rjd_T2$g~ zLEacvlKbP0V;YhZR`i#l2MJXUD_o^I(wGmK_(H*U-dd~h8WlnmSm=%5L?RMpU~^fL zPvPkjQr9J34j}baKMA7W> z5rUVlc_q2R)NnUJ2!@n?6dslQ|SI}y09K@z>;3*ws@N}I%CK=G(eI6;=^CNzQJM0i| zZ9n>Nd!5q=!6e!1msBr^@XWuRcyO(=v=D@d=LK~*Kjv~GlUX*a6emi=kq>B5>Th1r zDN*6FU(uH?{KhvC&`p%GMz36uA)oQJwmi^~)81kRCzykt8t+n%IkCZlZ#z~^A|!^#YQdr7r~pa^+L8o?yECX$S4BT8*n-5 zIa}i#w1{D{-YxsZ%uKmt`)KM(ztqL}*wF0OC@I~v;Xx$7cdgXIdGO~8imh!#aA_X7 zMjceU#_TJOEa3;zM!-8=Q%FwteDh4$fNvc!%uZhJn8Ilz$f*nB&N8!M1GTEE8~Gt!4UOk_hJ-KXQ5g8rzE)a$~-^-9g|N^qOELJRb#t~RvhH-l3GYijRGbaILT zJYOGYAhhppD5a?2Sds)Li~(w8J!@9lu3gNMu-nEHL>+^YMY*@VCsL^5F zHhMx?cB44Y>Af-YRbqNQ_ja;%v04kfBlog-p`TK={R4ySd?0#BQ2*-gyz5s!UGG;= zv8-@E`I?sJE6x2kcRr>*b9;2LwYuU*$o`O3{ZRU@O!kcDw-Yn*cHfzjD&F zk3K%XS^RR3C8=&dk6zn4g`;w>@Ai)Gy(e6NVH@6408TwxxBNUg6b6OW)?C67KLs7}}m5jhT-*g{Gc+BLv?u zwnFo2?#QelR^TfS+%kXJY!CH%%l3TAwiy;lNc!9(zc3ege*ROiH^{F~74hxNhcNoa zo~N5S3zd(MttjoSV<2V{Mpfo`+-6y?wDHhwL`h^*0+hg0mVog1JpuEq_9bfQ#hRgQ=1RGBU4vxoPw0>`=xcrR+4E5JK&lXWTw6oHu%O4!p3(jB zy}R|?`$>0_cfW8a)pQ)ho0XYS7g-%J zh3D5l>@DzK8$M<`u&d`fF&AI_~5Jp}+rD!aR0* z#xyGhN!f&bQl89Z?}hQ^P`9is->=tFdaeEXJYs$UvWKw>87XHi^Lyj@DQy0>PmOG0 zDMFj@wMF8~0zrkC4y>WLFw~W{Eo;V!z~*a{|S9bjP&un z%|ImGP|3LYd@4BCaNg}@3>oc4isN`WBvx!?!e6H-zRJvARop3=##zA8$KE)I!Opo9 zk%Q6^W}E`(R%y#rEiq^RtfOX3MbpR{J=A>B7Zvi$>N+%n%{F@_lL(*AGjPN_%J@Xe z{kvOG_9hgGq{s?f$o>-+=sCw|>EzgPv$iIi>qx#1SJB+uNXfk7yjQpG(mlzeq@DiR7`DO}hbE90dlOBy1L2>5M-{JXrapQu9XBS-f7x}y?533em( zZ{%yzi?}yAg1IKE%scWzy5}_NGky`q&*1_gEH4R=!R0)Q@kk6JE2SF|D&v3kJ)whC za{Pq)F!B$~7%Pe6S94D@UfO?tRgw+}=<0pm7Y!FG3mecJ|%yJU*)Cu zlBkvvtj4hc zoQg-u@BH!OR+?W{>!;sm;ozXlPKk8M5p`LU?6~Q*wnMPjQGFbZTj-cAt&f)}dZ+19 z6z$&`EE6c^Ixhuh$VAy4JI^%usKd8Uz;dzt_ys~h*mWH5@x9S$N-#nD+2CPJpu>k4 z*P#p^TRqy${fDu3+fnzkmo3hATEEphO?6G|;X;p1OfmJd@)f04J{Oe18|qTz_BCrRH{4JB5zc9^Vcr~NYb;K6<$b>P*D{mn|%vcRzZ zEvQe7X;(-B1Kkn9*48{F)!vgXekRaB;gdm@qXyK52;A& zBYOhBHkDeJS%*9u~QaS@c8=d;j?7D8h^D=Ky7OEI+oSV`z}2P zFRwvl0%ADiYTUa%N18Qv;iGEVVs)lV6^GS7qjTHMm{yuHmiY`~SH1|J(+tLV3vlS~ zmiiPu_}n*LzO<5p=`cDMTl-3YUP%Gpe8YN~6!J}H`r1vgcRSb$o%cXzgZQRC%v;8n zY?B7sE0IgW(gK*&C)x26qfY}DssHd+j3~Sa-Euu?%o;E1m14yYBTV4zeW*laq*x@) z%?Gv$HYp;G+v|f2V#Y{1RN7icge3sa9oDA&I=U3B=HDLBpLnRjc0QY6BPl}IU(yqx zorzf^g_ik}7aXk8R!S%ZjkW6A847T;uhkFLsBnPWTQTvEwZ*ti=TrETzcK4gS4Z35 z)$1elYR!FempTniJg}cP+`UB4o$Zg_}KfaAldpmId5nz)jNC=zd_@&(~fTP3FjIVAA4(3p-e3Yf!iLX z<*$IyMha;%dGRC#p@;>^pj+V|!-Ifq8cUfDz@g7iK`vN1QNi2eAKs}Iuzc!=3PEN0 z1OqEZo9-F8^g{2bie5}f)$>pjF2Coj0q#*M(&>CbW~MdOo%KoM3aa$M-Vd5Cpi zqIwD4NNpBU@M%hL;J?@cxfe{al@YMglNyTeap`Z_7R8{zJAxFliE8@yzbFlALLV?;G z3v=Q{Ky%GX0>N*(HC6zx>R!*s&rErL_QxOJ0xS4}9pKupQ^}eCv$6iYn;0z#^U+#w zw3yQ-$qrVnZ}q4R*$qk`_bhKE`1~Oc|466@7n=uvA1g-nkDvS>3OZFC$hI#;GM@eS zR$Ts_$S?I}>F=cW|8T{HzZvFrk!M%`-Jl;M@Wf=hO_cw&e`D8y{cGh<5+C%>=X)(j z4>09DxKezf|D`LeK!8F>H4Ry2`0oaPC#(Gb4J*g0kebo(%4ebNU8d(^xSr$nrPEo> z$}zfeVG2l{bLdazRrR*77^dbo9RO$}QV0fJa@<#1xdO^kgH>$9x4qU#YH0g)RY<#kRR|r=^yb0i!4a+Z& z`@K8irTQ~I3xT%4`H3NKsVQ}~BuPWV++qFCI=#mp84lakVV9RD3&(S_%~>N3-CVKs zbFdkJ$*sFd!DgVolgda69gCE!w&*PLMo%}Km_nu+DxASUj`Hu6AS5bas%{kW%$fDdk;?NPj^MpUiQ}ppq*62BT%p?XDO3R3d^Y)WyGk z=PbK731rZf_YaC0+ZR2$_sC36rA$a#v)O&6?D-}F%9vkcm%~!f+gqW4>1GI;R3MYx z3OaygP;u+k#j_q<$LY0V(6GwD(-EaO9x?CXk@oG$bk}x!coRf6Rfi*|l~q+t3`GXo zm2;eJdL^RNQDaFKlZ)YgS zS^KionRb&hR4a!nzqmcdEusqmgpFV5+*&(xM9=dVs3g_=&LkJo2=xgiqGB4h-~uK< z4VZv#I-fdi4e1H)iwWe1yPN|J`4+E_AGP350z23JG2^w;9SP+&tPY3QECsLew^B@} z=daE;U9*i=`XpzZ+x(|Lh0(|7jmL;Dy1~j62+{>CS8XDK`Al5Ag)AtTBZ2|^xVHj! zg)b&4#jj-V0$xt?rtOTpz_NdwBknZ!Ez|w5)m_jbSfKwMf&VcQQ{`Bm5 z7&iHY+SE?pbIZ8$UU98dEW!G4zK({~HJ678>5CAGg=M8c2PUMa@CeZu+d|^0^l0LQmde2pi(k zP-n9+r@tIKHW8Zd^^4c3}p`9r8&!y{Dssy<1}|Fh0kj!W8bXKW43EqRgo>BVFLQNq^j0U4UFNCGlOJ-P+G_6f`ZLQon@~Q`^{Wdt^DM_QB7m9laBU zXy$5d1~ZhZl3rGKZ^Ix3uQ#9o*J(u?yEf_ExZpAYc%}6dEPBPXov zH?#eGd9qr=xYp)*Il$C!cea1?KW>?mxxRploLplTuD7CRAkALu5J``@Mc@bz4nyNr zz5UqGF!>>@vT~wCdqyRZV;wYoJq_d$)L&f^SZPBQ`MB~)s#~VYJyOoR79cxwPBumD zLJ}2Vc)NX64MM5?U`XS^8kBHg1+XgNMx2Z-oj1+0b$H>t$_# zZ|111GbU`uWQ1duIkjK5m50C7HlP(OLVVCO;JiJgY9OCmRn$z=L=E=uO}FX4RUKI? z8ap8m%+%IvkXM=0RE=p#ZtBz*DdWA~jKd7J=RhW;KlH2%Am&`)P4xgq6XSJzn^Y_| zT_&&vy^SAWgu@(!4Q{$*&kh(}rhV)vp&O&JGv6L~Y2CKdKI8LL!!sGLan`?7_BU}o z^N@gHYiYzOnUb;Q<9pi;$eYdC&mpDzwaQHp;pI}qv2IZ#p+|G2U7K-c?lfXD3vlzB^Aobk-d|lE2BgHIsA zLk|tRm|T9RHhn)3z0-Oyx@wjMlDwWryr_2uWY8W&iX(HbYns+%>yyHz8<1Wg zf1IEpO+^FXP)N4`V|Qby#jzJu`@6t7eT*Iv#{es@(Z{Siy#YuzslD$M&_ZL3zeXMG zQ0scj4!l#)#%$y~xxoTtc*(-|o7xT|PJ#rr} zb|T99d77sXHtp{-_^O-E7SbE@7Iso_>m10lzJM6*;qCD4jY+DZn|SWgGssA#k3Q`_ znqALAxPJpIR%+tvj*CUsmZ7Fmcwg>8Dx;CV*N0m1&8brT25UP|g>})~EJW`}M-%-i ztK1XbDD;WGml-btC%CLL+t^%L1abtR5f`@>Xe;3s3iz^CnIMxLQ@ifwVEt+*R+)?4 zj*Hi=0OBHg9xgEdV56TvLUIy z_vo8Xw8Qp`F)qM{8M~}6+H8^@`fbhU713&H)GkF!cX?0Svj@r0UD*e=@!Sw@YC~l~ zM74?R+;Y^bLEFPEU*U*?taa09qoA_jHvGo>RvYJX!XJN_X=kR_4ukqh#eZTga0dDA znz_zb>~6GDHWUx(4*$Xq$dw9DLTr7uEEtO4c**49G#BL2el^V|uJj^8yWe13o=B0- z!E3fI>x9Nug$o7t%224PVzHomt4$y6g`3(u^lFv^`C{B7uTDb}Exe=YQn%T&nUQ#R z8nFO?Ue+z@DqRrR>ewtn#0hNA_lZK& z?4>9wF`J1A8lvUwnF7rHDeu)#l`Z=!V}iIOf?%JB*f|qAWllCQZ8eKwX1*jXr`+Ly zgIv6Jc)M+UwdO^0n{0>Q*z3yQU`udh*#lw1l(%&60L9kD&5eSgo{@^^b{ln947F~1 zOq3+z?3e7dYMZS$>t=k-(N|Hq%>0CzuGdZ*yqtSA>fzafADeQ|Ylnw=SkEDJZLND0w}!enUCzzmT!>AosI6OYi7mFwt3d z;=6czm+&;jlQha3=2z43jnAb{N~j&nlH=L<32NOEgHl}}{XyPAJI!LT|(mdZ5d6#!zCHRdKnb5C! z(xzQvY(h%D;Bth8oPkI`KyeotjU5bo@qgObzEPi@ojRe0S?W-loU9)9Jx7{)B)NVZ zmV~EXPki01gds@GhKKGK!zzi_tc%n`LE>6C&#a#D#>`|&`ncoPHM?jE_cFwsRQg5g zK{X2w95Z#_WH8hFE#Gm`TgQdfIn!QSB)PsZqxrTrVmbTM&*{5)Y6qwD5vJ^ibHnA)m}0c`}(bjkX<|hZV4GkYs1-Pxvp;oNJT1u`yB^ zdEaL6&Du%{bvb@nT5#!xO?|2Vy@KT0Rk1jrd~pWOcm8#eOm;xNUiZ-6(!SxutgGH6whW zDWRHha^>hMF+{YU*;S%6U(UWr9CySCzU@;lEuXpWH+l>lK3gZyynk4ng&RZ!S}3*E zkQ|=F-OncPdDb{2?j~GFgHX-H(Qt%T53(|cMJg+hFew&|*G|DaYKzq0>PV0fbF zM>5J;2Cmnxxu+$WS4m#%EHlc9&$2He;BaVn9X-@|AvHiKoU2*{W%WRH(AcoL%#7* zw($AX#Y%bWUHWn9lH+G5AE))h=er${tp2VWZQL%w){&H{Mob034`DpTW;YRXJa!6d zqZHF{)+$?X+R%5-Q9P-qG}lV*C1;1Ns?NFs` zIOwG2UQ_h}3AEv{%{4esq+3Eeo@Upd_I%BZLH$}KnP;VuR?Owzy4q9qRd)rU^57l^ zxd?1tlUO_DH~8(rT8xB6)B(-Ug=#Ic{ih8{JnNBQNGH^tKNC2P>a9o8(V7ar-Ch-> z`)(n_5N1<*{VFs5Cu?zleX^X8#m0x1>-bT@J-Lr-o$nj;`^DHWTW^<;<{>otjO2uL z$p2bPvkm<;sVuU9#4E zj8!Bn3?WS$D)5TfV$uU9m?osg*10^$Xnc zP?xr<u2W%O;V&#)?Eefv45sE%v!Hx)Wh<(&7#eRu0PKdTOY#8<)2M81BC zP8fLIkt@p2Q^PbO#GBy6$@*pmM3;#>DyPyS`htlyZMqRylNFo;;JtC4SBz;UdXUPg zEx`YtQE*`_uKZZcE78sQ_*J6FWcD}ZmD#*E&h(mO*4Nv8yfD)IzMMI*L zk5>FiA&W2mp$sC$lhk{NgcU5&`Ffs$Y7QpJ^UEii=gW8nfs~hQX&Yf8&R4Im9!Xn< zKjc73HF$e>k1La3;O(>-`1uW<72E$xM)cIkIR{g|v-s2-^~Qy4>~cQ3Gtv^kbAR2Q z+@QiWFWYcyZL>dy+s16q_cu}E8W~juoT-RG_Oer~O-{~G;7K6IfHInCp+UcLsGZ&v z*M^f_lmZz?q?j#}u~J55WI8&Fc_@CCPm$?&pp00I*Q>BR(!O1$88oq{-K|-;!``f} zM1zdGX=4yVx*OvncU`OPgeT}T_Vkh5L}Tg-wrTA>Ba56R@L=kag1w$H>5$bMc5TJM zmnGUB-I+dj&(A%*+7EM)w_qDWEkbt_#YQSC5{j1?lY&%8Y)XV5Nq*xcppo=0E7=}< zGCo3LRZdH|L6LaBrxjiHjwNj>s#B%=jsGFG*rjTL`eW|&Tv=87g4ThZ+XpY&)KJDO3)siZhWB&@X z9NX|5>5a#>&MwH3Ad zTxpW}^v$9&7)S=a9l>|Qz*Tl`$hi*f%y?7d}Jm0!0$ zD%~L<2uKLh(%lP1nuUUbG%DR7Anf%`UzFTpBIv>t; z{^x8yc;U5J^O?`gG464Xd+@j0Epv+OFk8QHR1_5AHeWcAtY$>=St znNyBO5>`{>UScD5GP_5{Cw$V9fKM>iUY^lgctMOq>%{7Z#-~DK2&|C5A2`GcVPB#5H1HOD_?X6DRnCO1$0wB1B)8n;21BpynPS>g zk%@7RrL>#a3%bl*%L46PzPZ$o3mlDDu!5JLV(s0vx*46pp;DZt13a|(qpg`WNG7l! zBngc6?!J5AN9vZZRW2LC{z=whb~n!S5Do5}_a#!hRJOf-wcH;C;4Nd3Dzln7?usItK~38e^pub znu!|x?8?G)qY}Z?qu37Jkco12awiuiwrWhSBP7}9ed{JTddW&#W+PD`pd6y^~&^7hBTWHU>9R*uUML_J#5OO zlj;c1%wD-;5d^|@NrbN>6!cb2y98RoUh=WY3()r;>qn1e=l*&r)0*IxN{t(vG=VfHf5@AGBxe%zzi|WXd?# zLTVddTHQIhoGT^pHDSs0MtgaYvSJFQ8)tM#BY#QRhdY#?WC!1M0pzn0jX|_dL$dXH zY%YXdyy;8C3_6-7!NYlRWo+jGjtZHo0gXYYuFxYty(>3K()qp*L`|+WdD?aqSHnc~DOid_m5hm4}eGp9cEKA9rXw3d> z?>tAQ5^Huy6DhP;lJbwcQ*t+JK8wE5LQ#21b-;7l>D>M-dWwef?sO2Jz86}*K0U@T zZFZ;Pg11JUuOT)hX%ok~>yo{%}7)GB1yF_@z%TX z*~U;Jcmp}o$F0(E!N6O`$6$IxIT({0{4krGs z#XQ1dgPqT+Xse0w43K!i5BXcq##UoY`2;o6ULLE&VG6)n+>F?BQ+J4K3XsWh(5091 zAyUX%zirz0%TS9Y4VP_Au17VBuge=u!i(+?5FQuZqo<1cpev>jw6IvM5S^+ftE9-- z?`UV-lmO$IvqSTc(dv*j2wbEc~n&gyq)TS;6;K$`_WMmASG43Qww1_c@76rUNC8zn0~9^KSJ|si8gg%7-#!)Kf@06|}_E zaWssbJZ3O(ocOvg#j;i%w%fYQQiy!-%#G3P7?RPoNq)+L5sJA8`z0u5!KP(d0n0jO zrZQ@4O<8w6>JM7P6Mjw{CRlDju3OZBcem{IjQXo3??^tC6c<%zay`27d^VNCxc$A) zEzdF|m=qr6x(2U1J7|jTer9$jC-cvhQRn>BK=BU!AmSF$yLci@w?{SOOQ%Z;-(_ur zne$VmE%buco{3G4qOf=aUcxT@!(7Xf<=8-#9(p^fsqZJWF1AIP+FH>k7g5HX2q}5Z z3>6Duj^o57T@lIXCY!1?A@2;00TftE$749#v9%tLFCKDkSBsxp-RSgW!!lN6T2yz& zphY#-)LG$1B!as@5TSnW%}!9S)9cOWk{-}~LRj0_{V1~iZbqe6@z!fs*f!( zC3OTEnF-yOFlj;-c|?Z`^mANbJl)r1GUnRMUb)bRS7$M%yARZfOLXHJ<{UOL46j-< z3``%A*tCnLt*;qn2x>m)gOA)3J7G!&q)l{ETEt!N)*tZ>Ch`8<;V_7?2^iG;6h0zGu$jt~ zx#n4Y{2@U2r#G}$g)9fa-_`4zkM622`C48cs0!Y3C1W@+2ZTbfw~)OTl#EvlRC0;L8qvGCk3_?rcD! zSm;SF_8C*S{_eBgipK{g?#ErV7qU|R`4>;Yop&y-&aaHeboVIWH#W8?``esvOKIAk?aNGjkU-}=maBlK4+jlauX zDK)aq_$ZD_A(O-`MWkm=&sGfiVfjwzkhxKmmg0AY{&J0qNbkTRm5(=Eb5Sgbp=eXG zepB>%>}zn-VNylFzj5-CN$i!3Q5t17(N6KWb3G@nbSG;-jX_9MmH(06TQ9C~*ZV0F zUs)s1;h>YUaOvaug!(wV*p+9fJcv&neFjp$h*F#{WC^PA>%l+grod zTl}25rQa|KmOV0`06B|qilLe1d)2*VucUDK>+QxDatErk?em@th?!ny%0ntigPcPp z%H_r9RSrBurT-I3CnkpQ5(g=S8j9ZQGkg@TjZ`imC1JUxVc(0J=aP;v*aV-&}=% zy{bLte;)sDhC^XLU=kGeYw=>d`784O{gV42MUDLT-~P93PpLZy{FffHXZZfzjYH7) z?`Dlx^#O@}>onDphQ2iqOhyHy>y>&|fKk6o1265L%TiBQ(#(3^l$WnZhJCe%A*BB( z`V~LMztbi5KV;Msw{QS1(`-2X;1!hwFwJ~XU_|iqC5j0DO5X?HB13ayYT5hy1@M6m zCcPg=VD8@yZeL0x8sIoe{yoBeU|w3L+89^k<9k3nMU&eC69MVt+SS z0LJluU+Z5(_P?|B+u`+pcM-CF8{fa-J|`G5bsWN^Ji^<2%Z8KN;#p>#W5^BeM-Akh zI>wjOnAg@NwLmtZh+5pW=n}OzaJL8n!B3&JcAY$(CoAJ8P!5CKD6fO@vEnXn%B!aa zAWZ#ZP*Cqs*(?G6PVjA_QAL*coBY{{-a5veT-8JKU5Ru%rvvtd4l{B>mb3PTVPaT) zCE(z-`SyGb-ZkL@4TY~Y21=D?X-p2^9e=gJ0(~_>D7i~K3X)vc5X}Y;?!n-cw+OGC zO02)ox2waZKt5ujwjs1DgRC3!5|9|K7gw$8bY|4-M3mS~ayfqfa>}^5%%QOw0}|p> z1H|}D)3%UZ(frN+h9#CalweV_BG`ZKQlk|XAk_)MDSJGX#gbTfsaF|#{Oc2UuG>yT zsqUU+?tH?@5DL}+9Ha*pexVlD+4|MA2C~HL&Sd$&zR|Cou-u~-*xn118NMPR3Xa>L zKy;;frhF8%^|FsQIF4B-d@j(e-0R;Cr&=<%f0YYLZu#vdyH|K?x8A=!)Prd0tdV4AIiKqr*VWFxC5={vn-kzne)Q3f9gZxxY9!*^6?PYc*oP{eN zeCTY;DJO9VR-aFhay_|I!WsN)&PV*b>oP3brc+|QRQ4jCPU`uaC;58AQ1QLTx*sW`8YEITY_WOpu?SqjxvY+-*KNheaszXX|=+Q0Y4#RDx>ST}$ z4Fn)Bo(*JqKRnqV-8f|uW%Cgs0Cv)!QIFls*%g{3wd$379XDHdQtedwvZGPTN`gL*4RumDJyx|4{{_O0+MM4*wVkTOYSA zY3JS`=3xJ%nR{nOJzq~W7RWX5&h*sR->3Z+5NSw$a0=3Cihz{Gh}%NKOnc3S_sK~i z3ZAIi-6z?POM&pN?nan&=PDSE54Q^RJ$!(`Ene)~en%2E{5$b>)vXEc%NFg5M~pay z|5k+g&xMYmL_esE;{t?s3&OC3)6>6ti!gvtkDsF&%k{Kxgyh=F$LyZp+cu&rTk#_6V z(VW&QptD`_afSfX#)~Rum~PEtnEOSKp(|-}GaTDt1H8$8X zhQB^)RA`B0Rt>PmqBitA{~+82G*)ZPghdBE8i)|jc^rP>xip1q$-kC3oI;yuKL`Dt z&qEiOA}|J0sxGsSnqzLwD=rU8Pb7fUKs%7Yg8;j3G{0uw(yk}pZ*A1jG&Hk%waW_g zq>*T1$6>@ z{J348Q4#!7uhwEqViN^-Cdh2yh7ijmMvA}pi0&ImJ}0ICJ<%*6`E8l**CV_=#$EjB(6O3F z^hXAWz6-wK!t(`kiF9#A$@l3#Sj*d)6CZas#&WY^`=5ZEj$FWowrX{YL zjkDY^Jq}C(cs`{Y0fGp~$K*UrzGu8vQ*@Ko-s<89GJbdF)(x(`TB;5@dk9S}&BiBG zF-jMw1+>gfyYQWTLqL|?(10*+Y#9fiR6-bn`x}9{-xC);+1&q6s*c+0tNaGn!Zp|SJEb~3KiLR2 zXa1M{5Y*zGP3?%xtc4&&W}G~XTN)<}>$Q=uZ*%LtF1Uv7Ab-IuPDdm46G3+WIBW(g ze%577!1r9%rTz0O3nq?>LmX04roW^NiCfH2EB1MlJn_A(qrCR|ZzZN*oY~3uvS6Hy zc}4c;=??DpzZSC5so2}y7y|63mBz&#@A_-%-srnaGOgn^8^xEBnRY9Qw{WFSI-d5j zV7+8KcK4N?Kc7jYi|mYqGzUZu*TK#-J_<$M(2@{eKTPCC3D1-JLdDi}9X;ehlUbs- zagDo6*ZemhVC~2d#|rzvE|z7W73hY#K}2t#hOBz#TB(cfH+<6eMmIjYw0)}Q-jksg z(I3sutdgUH-5&0QgZAfz2_zcj>D9>5+I}3V#)^LOePlpMzjLh2Wifq`0{<#FPa#kx z;`r2W5*{08M#>_wz)ASyi^qugRBxR+|5=EZVYGGgEnR6x)oki*A9^}0syA8%h*-KH zt9QDZc=am#Kmd6~%3(0LM+BOeT18w9s^Jg$oo&zkCnndEKq(wigL+ z++Q0NeXD3iHwaPzSK^7-qf93=)e_eWTG%3i)btKHiO#P=qw@o)0P&60wHv}CA6zG} zIvQ(fCEbT@tJarmQyy0Bp9?+njCj%f^wE6U>9_oan^(6D8Bn6v#%ERL(9A6aS=ggu z&WN8!M2C{wf-w3j9i8rt^K+N6EdqG-ua#=d2D60z@5YMs4`6Y_ifr_~XO}v~ow~)i zDIZRM==dSL&oF(w$16*M?YAB5dsX#UGZV>=4re7EDxst^1|9*?G_yO_h2JJb2k|~( zuBgTuEJn%$UH~p^+-0<1Ghc71J-g6R_9kcjXP?8v^ffUN<+n2Dc)0ATWaP&Tu>8ot zx2XZhqU>%#(Yc-~S2{zeeolGK^QJlBAmar;ZV3AH9(5p3(W%ey&+~2ie0XZV|Ci> zciYaG5}<8$`bx&pS&tBn$SILhuiSpxwC%%V#xdKfwbO+o#Myq8b)vG$-m$$1P{B=v zD1`&jAY4GTk7uWt`vwJE_|4|G=j}v4gPAUOTIR{GyXkMp&@x5nh#F}<`s9CZeatEH zLhxkHby-MZ|8-bok+KpuL6%!d`Fe3$j*J$d!Xi0AD5b`&B!;&*gI_)SgJ<&Xn&q%`>AY7CsJxq9*?M+=Z8lVGyP}^2k8`h^_a6-~tFz{pVb5RPqZOe`N+;gZ1GU@dk-; z++(IsV#08?9Q?*!^|%xRk6dga*w8)m3l7&b+0`YOh5`Tyi-$PIC|3~>`iD=^pDI0k zI;;4XF#|ML07{T1!xV(^9~|o6#xLX<&~g0VZ~fQF_P?X?Z`kvn{GtD6*9NQhQ=CvP zbllf12Bp7_b&mq?vIRr1E#Rk z%ao`84}VMk2QjN=Zj|$qV`zVY&lq{vPOv=fvvJ!sOOUOi#I{B&SvlNDM4-fW7k1@P zpN)VZ*fGy1C%l^FAMFy|y12KP%=Rwi+C2#I10QnF?-Rt|P{?J2QcxM#**`iFQ%gN9 zlnnex_MlE)){FMrCo;P0VO%xQ*JNgSS!+T!M>pPxayK(q=m|BC&+%7>jK+f>FT2AR z2w{HRR5=2+OHZ{lj7wjKw){eBX`&{!wZO18;WG`t64YjhM_1H^7~3E6g{nWjwPK+S zB<+v|w3}4@=oBuAfFs3}m-|FTb-khDI4n;b&ZRLZWLvTbx35F4p`a80*FUgobfwuR z^aV3439nMB#cgxr9DYQrr^v>!Azm~SQu6*Xp_DYujq`N0S(>aZNJ~p=0pyM}pIU@t zr(kFL<0bW;B|XY&y`VQO{Cma{Kk6IUOW+@ondo74=J;RxB`a zaY5fnAKWWFeZBhGbH{lY;pGtkL!pt%A1ux)?@b;oc6br9=<@tI!OviPIv;`I;+1}_ z9a_YA+H-BUyk{wCG$MDtv`0qVZhbQMqlwx$6i%m7gn~kVX|ANIDwrswkd#PuiymV1 zRN@S13OK5*;FT6hdhE9V*V~U1D*B&kxtt*SyQmnr_~!n4wQhriT^JMw3_zyR-@+-7 zcHCsj_k8<^!tmBhQXqvGF21qssDdyxXOZORznHA7(u|Ow4`!5)6Ed_`T5|G#WLIN> zsPNehHsAws@8MD#-F(50@d~vB=$ZbxL2V`5pu}IEgdeL4ot}vIl7RR8v{%b9Y4TjcPp)e>N9AKT=xiU3kPIqB%^N?g(M_ zISf8MnM{m&DdtjrUq>X>WPOvGt+#w@sV7gDLec59bqtVZvy~gT`?S1!^%Gg>Z9lA! z5xp05BLOfp{}!ZvRRHY*+J7%;@EdCsWI$`-c3-jvHd6B7*2{SU;nHmk41xRpyNO;< z(&%+31ZuAz(S8`gibh)3iyANgiC1TIMYe0~ilb5NpU68Sfsp1djV@x z%}c#@mGddDUd83n%(5(HJS_mVS$D?w={I8_5$5c@mH>@~R4PXI8d!)%s$-W`B}v z4(+?n1rVPQJZ^LL7n9!dV7YQDeo)-rA9~bNSkJb-FTT-odW4rI_eGXc%&BnWxlS`c z&{*&&xI$dxAz(N9&j#$Tbt*(B&Lcy&NSQ@ou-xj|+1XsHrshuxW*Vs)YT?cC7?^6= z>JJb{rrD=THu=TD?-+vqq;Pr1XU+ zoW$dJV~KB}nJ!(g!qHTwQ6nDO*RgTV5ozG~LGRTx#&-98Nt5-lBV^oK!QAmmL1-fs z>kK$E5l?costkmqIu2M=LnZ>H7*u28V$HU~ys*;GiUcg;A3k!@^$}X@@}PpPEm|#1 z2B0sF>=j%mbJz1jbysO$L|_tH4@*$X!Gh3f7mo^e@@nClZ+c~X)=DDNf%aj~PQ5{q z&xQBGhGq6qZ0-}dW@#k_r_QX?kbG=4I8)j*)TC}JM{DVv1AC2dCV-R9;fnAq49 zo!mRFoAu%0{JCDgLRuIxv$b+e^J`w51O$yH-B0DNUFGY|+VET$2YG&tvq11zIG#2> zz$g^TeK>kVq0k%wV6tkH518MR$H7F;XN}e)c=5TA}u^)E)s2hi3jR2F7lZ z%f3wzFQep1Y&&7aYTOn`b+yW#fqY zL5VU?NiDP&l>UAfqd#8~iuYREQ zym8Nq6Fc5tLwBKqQ3iAmTfvas;)=dTS!z3!43sqd3VXXcGaSM&8Ak6sgn(}*7QgN z20V%m=jG!ced!Bj<@@e%RF43b6B?0K&lR1Y+A8aL!FEx0Cw|e;q?g6D@yFpu1EnCV zS{+ou(3k<2dt3?L{89hUj!7!A!@Wk`SySl0wmXBOXM?_|-eu44A z6z29*^RYVOcov!=NZ0d{by@2%PFL9Pr$sRP!=!>?=a#c0Rqn8Gq=d!U4+ISU(c}5^ zl%*+rpLL9-Jq5c-R#Y=t=Tc)s<)M5pEVw45!f~r7qchL(2j!P|;ak>{rc$n@p=d75 zYUeGVCAuGAkB(0WO_>kmkJ_&T;6@Q7sKFIOzwbhyw)V}-z6J^&4^+JyC zuDKw;Sj~yal?EkfGL55xg^8(cq-2G``(`Pk%s`&tP>s5q-uL1?ioRVPBG0JKSLSGr zwP=o%gd}BqVkTaT@`q@BN&M~e$q#L@89#qpn`Dnr)`aENw*`2J6@|%LZMHUcSFlmV zKh~9M`=PrO`;I#326Vl^ND<_*UyTp)`+Xk1u|tgLH509+Hri`D**5lJrr zzTGg>@#N#zYcLqY@l=J)Z-bPgK;MIkhT+a3LsrrI__q)KWrEsYr{|e^eUJS2Ctn(G z4<7i|K_0pFjImt(gbO@P?_tZm->lfnNlE&OO?;D;T`lHB_R1%9pebKGT;`zj2Xl%q6R&ioT{ZObNrL2B_}F2??2DM7Bm3UP>UVp9uJTzxb8ZFFpW*$MvS z2Upty52=F;eXStA`uJcLFx}e;IGlgAWqmnUa-DDg?Ew6{6YnL!U<4nim|wrz)-zIi z9%3O&t~bB0C(skfEa>n1YO{NvuC|383tqAC(aYOcXPZF{^mkU0ROhd@hQKSn`4WS7 z`w!zCTo!JizYH7E-3(XTYG4MhXx*px*D$tR_SdcJ4f$Vf34vGqKWa)~B*BAsblyM~ zQE_l^k`p_k|5yN!o9I2gy^Z$aQ{46MVN-dmf7)qahB_{1s6xJt;IE;m1~c^k({DgN zOnsu&b!JG8hh|-FgJ_ z{@V*>{MK3g=QRL)=>l|IvYS9s*s87`uZt)$n%_*x{dmB7ja?%{rSwc;c~1ik zlZ{PV#xHJ}k?!C7_}_lL`3=@hDl~s0I`T6`C^P~E?U>RZs9_uLm=EUXb;OFx_XuUg zBx3CNgaEALr0uTZK0H^u=AKlXgrbnGLhxSJ%4OxQo`r7{Au&Y*ar`fT2mtY}+>N;P z@v7FM^iQ4N`g1f}x|^|10_IAd`JtxD2l6tat}dd)7Sy9kX0*=FJz;77{g${qK;O&3 zP_ZxxX~gbG(s>Szop?#Ehx2zy+z$}BIMo1BB>;S3F9Ps$w76@+;~Y&@P~n98278!r z6A%<(+1lEg*ON2=vi)wG^$Ex>v?BAL&xgzG65|||yeOqkwKWj!r|!<91<4n*QqBYJUKov`ol~V9>s+Q;6+&pr{}M)~ zkmX(B$sRcnb+Fh@^jOD$UkttQ>O9xJIPjSVMPMqUyAWrXEtCGzEaO$cUUw}f@=m_L zwrkY`t%Xu_d&Mr$Np$nM7?vsivDLvk`5xlSVujDz;&pHkw$pVH`?$bBKf!Z*%UW*a z8J$RB?c?mnicT>ya&qrPY3U4+T3q})@9oxLd(=Woz%HJxt4EtZOlgvi?J6(N^}P>5 zTOH@hj0T(W1=OJU6|!`rlys|bZc8Y%`M{*W*! zt8BZbaO*0asc8J_tTmUIgkk%*n-;~+{OinwTkN1Tr%Nf{(eQB5oR2!(G-PaIo$%=V zMEgiousHzXB@WByoT9r~cyv^W{r0bQLIPU_1=EHW4SmM%21<>bMCmxupvIfp&r_Ny z0QWrIpk@{3_X66&_@eLY&y4S&X2tBO1#H`<|vh}MXtS3%m-D;AxA_4Ov!+H{N9~k5}oWcRQ zh!LS4 zpxaRzz|;LAZIQTp&>-ZGs~x65K2+suCo9OE%ZSOage=*i6L|tbyY??r(w9btSkWev zQxuQqIlUQmz<(gPOIyJhTXy6c8}(HS^-rjB%R?(u+_&ma8*CyWRb*b4!q5|Iyn`_ARr zNKbNUL^Wt65nSC^w^%OiT%3e1^)UgVpo=r;T_%4mT=YvTYLmb{9pkcZ_31`_OQ&!3L`W_nd75&Po zj)I;71!m==gBEk1s}Gm}cl{h;yO z4l#hwFd4`3*S_Vw+_&?Ox{0s0)xZsWhSPby>sR&_>^<;8iFpHGzx(~rx_ln7H+aQq z;f0S^PYv16kPZw?V6QM0T_Ls6N&LRUV^-Y$}IK6AkqJ-LDSw z`<#d0db%G{(t4#ul5uFN2-&KH>Q}ia1KqPU@G?E6Yc`ID_CFkO2tlkzsb<#L&8qLF zc8R6)!?OLhcE&V~%z%tj5UuDC&C$#YN&7DAw!hKU3Pb_?vNMz33eejFf%&MUIvkcb z`q45winBh?3nLjzOG_E<8}Nl@@UvRu@Z$HeB&J3M5ZITm)JH2T=fttjvn|&vrW!tV z4yP+eMqEZN#7e0IZc2N%bOPd*u>e}tAHqFC_C~AW@yR*>a z#U`0zh0c~$c;AP@(2h?=25UTowM(78rP-*2|HtB8a=!-Hs=B~X=51c+NSIr>W0gGJ zm?*fgSg|sY9}+27ZS)$Q4w`U>dLXmqJw;+&gdfoc{_Wb82 zyosWQhPMBDLoLQwC{{pp(9@;jgo~2zRnQ{O#s=b~pcRmHb9Pq-n{yv+#`H$#YvyI2 zuAC_rInJ>ws^s1V(FuXM396%aPUWdJaKn3`k`tF0d$MY*?%XQ8D+KVaW3Ihf=hi7! zKtzl6$7Rak0CymwqO?g6lsh6n>ZPo=AF=piJW{5is-Ng}{x*#+o;^u}2yuRFH4F&p zkMke5_UR`-$I$2+eIeftG#YtF;bvXIAQ`FkKG9wnFtlPMJmOdKZEkDS#xn!JJ2*x# zRJN;~V>kfea=xbEo3CFLbdRKO7QhL8ZuU$O=Mxyh&O2-fsWT zwz(aPgM-7oeCD0SVn4ttjtpJt3oSq#k9@{0A6PP{lk$9uv~y3^>-{Ary0*)o-c&N! z{u%>MmFC#0W#)eRo@!aki$D|S9xtp@p-QJ3d9I3GT$ZHn?{|5=+Ei`5Tj>=2M8PS< zH0hinH8xXhGhS(UitLDK=*}H}Vj6QVbmyGe# zTRuLU=&0mp-TZR&TQ3&C@_R9yCg+c^h>8iT691=J=Z4+G0ntR=-t2zuPZv)L3_4d= z9-ea79;z@yJqK3-zOU_cTo1$~P2>p2d<=<>4pUoA%YDFFnEm|Yi>kd*Z-#0}LPE*4 zDKNerEhrlGKMln~=nHm%PUYdp#ZfE)eGtPzRF4T+ix zaZsdtcjxB=e4qeoN;G#!37m~!l+?H;(mi(-4t_td%ptUEJb=GF=thZ5$n0FTGFMbZ?{wKn+_WmR5&c`aoP0oPQ>ST6sGC z#fq8u#>U3z2_XeuYl~IR`_65?%vI~Yd5?G2cw?LYLL`&1$qw_-kC}b#GQCX@!-D}Y zhl@;9#pMESF}++s@{a=lD+0vV^?>>y3s45-G2yOUyvJ|tGg0lv=QE+FUF%)rx!!T0 zCcl zmFVrPEXGdC;G`_GF09$RW^1n_4cwbnM-4}|68RV8`5TPtPZK-5^c`E9<~gx}F6K8* z%_Oz500hC!!$9&vifH@f=^yWVselrqY_*x0AbfTZwKH0>K@TET zPUN_E87Ty8EC(1b>)M&dyhd&f&R!fhes0vBoEUwP;k#p%1FxI95ou`q8Z}nfE+Qw^ z&?aVwZ{lJ677GBvs_BCDh?C(>GNr+<8Zf1l54fGDMxPDccfa=8UYBo%e{3=5yn zWNq(s^jFTEK!VZMGDc2ohpKDIMj{+P5vRi3U9KlLM_ z#zWSRx`N58f4ZR77MZ7j2n0c{CKaM?3pAHEzL+RZeZJ#^dzb=GlPv0f`pP1>$!1u9 z_4WOb#?j-CdvOhQ2^l#Z940}@8z+9xz+DtQSIk7e{GVgx z)8_^!1GzKkjXOPS)%Kl;dh#*meg~EO7>KxAfrnV=5Temq7I`X@1Qs)6vz{7vz^#x@^ zG3%;%hJt?Y2C&bvZ!KKCw~5h!srP*9wj9!MeXwZT`7? z9|LnTxy^z0s`thVNFnr?vX5ug0o~=@B(A`?`t<+9Cd3o_mPnyAU3#Nd zSRLdrx8l!;v@hiPjqW5!`o}rO?R6Y{+1VG#kFE^fHwGg=)If=CbJ+;!b zhn=1r{nQVYbkakb!R|vHL{^HN>MFXsh6QP|#HU7-SaX&2|xKk0q**+9(~%&p15?42S~p@pb{{r2e^=cGv+$cO`aCGmD{81FcfaGtUoz5AV9@> z!)U9X)yrOh`p_F-2Z;#k7M9}$LjA@0{OsdBit!RKZy#w zi?GAPS0L8#IgDLf>DRAc+xq^aIFyu>j+@;w0Pe3{9fr$;5W=kH=ReOxdIpS-Ow9dK zB*C1ikFa0eNkRdd>tFBA&9r+wezD%aIsw-OC@0jH-jzAvcgO(p1{(mD_h`{OS#QBW z$!diLMV1@TInlms6zns_$;u}Hj19lfR`dt@0c#=tmn+?1t+X~$0?2Rf3Lra|Nl>ta zhkH(O9GExkL}QcpBMP3fUAm`(2432~l){4ga|X%2o;Ns_uaA&#FQ(QQkL*%99&S#f zmVDz;gF^FHJgt0QA2HYP6wDa90;hZ~4dijb8!BlG^Wzrn30Pl*-9PU>ik>yz6Tl8Xv3(s;=CE$9fQjq;sz5@=F8=Umu^X2c)U z^qvOgfcBo$Mgc$)5d6my1G*z)E>(8YF~U+8zmzNHd%I?H3Ti(LjouV^^}g5%6^-uV zMEc0~1@zNKIBReTt6?;siAsEFlhj8VcVW|_o8&eR7PdrP4= z6*UlSsIG22kV|L$Go>j%Pi!F$p6+vjP!~+jPD@W$^bd$vt%%#!=eSM!`wTpXf@l$_ zp)S$5WPYawh=E$X`*@kYxTNPMnp^W~>sLs0bhO>+!!9^QPZs*Ye);73u@s(8K|x9? zHAdFPWvRY12W5<`!90Y~j`c$b8tTZ_ps%lLZ^j24!Xdtx4QG1@1(lPs*regY85Z+e zq21)S##3_^1P@|*PzaQ1aGy%QKQU-QSy0V)51Q{)lrKL!Hz2VFYUN_f?;nui|-axp?%saA|>v6+y&q;$5s7U3{lJ@Z; z^JxhU+pQD~^;9`$!(dDTD6cd0Xm*lWZ8Th?rakiPZjM%7P%B;ahEwIh2f|*u1LV`0 z>6~u6`3PCyaiT9`^t^{nLc+op^>!$Fl6UyExP`*|J3C9Ur3qZcXlLgn9lYMDbDd!L@_W>+iwiKhK(@W#8N0;&`!i2=HuW3MrC44XIXKusa9FgWq^zUd-FZ3AT8*6Sj* z^?k-MWQTJL*X&#U;i02xpI=trQ96yNO##jGe7x)PkL^UwSls~=ErpSJ_1;^+2W7e> zL~BN_@w2hDu689zHnY|0Kto+w<<(e+_o3S(C-&DEQ*}hvcov2#Bn^5P%evQmwn9~5xq%!wZ1-BojFf)Cu>?80*qFYL9; zB>hY)DTj%F(>VKEJ=z5uX8k~-Rz;BseBi+*ccvBYtngb$sKKDUm9D`;IgOn|ryx=Q zMzj6vedIV{dvBM-$|>ClM_vGC#3k!GB~<|o2$zDNv(ES{jcx`S}AyHu5HIprg|r+GX*MG!KZQ zijZ*IrQGF`IeZd0&`P<`mEYFwv}gkhKB$-JV{IGDbZ`LJx^w z-3>caN49*ZOT#0W|80=bX$SX+1m0&b>NzR{T;Ao}CyYPUKu%O9`Vt3X^OhaR*EcJ@ z*y$GsiBgmpH|#>!p4gt!cihah1CPM4s5Fv@*@ zDT{r(s=O~paj$kq9oJ+nSr(C1l`Vi=?~*}wD!5>P7eFmM5$0p@9S=$7`)Wt^0<@|+ z(c6U|D(1YRyb^2cK(0e=^&0&?9o_SQql=!~LsXE%(MjZv$$}7(M1ea12j_F-{mA#0 znPR=-ai_R1xg|;nZ*HrQHv10lN2xsz9!kIZi+%oz~Gc1lKYOIt_WD)gsW}Nz@>zEH?lzRzdty3$5o9oyph%@NztX=#{^btZK zzNkEx5M$9Z#CnAsHdD;e6sCofoPT08;LBV*v+%baf;XP!Y#N^o*GikosVshdV>pm^ zT|dp?yqZomh#s7I9Znf`Z(>%%P(1)tSguNE-wt2ciq?iL0B_ZS%Z8~~No8uht}4h}uG$#g zQVf;iaRV1w-jNwHyjxsaH}5V zex>1n;>?dsWkWNu`@o)^b2WQZ%B8=~+kECzbG&S|ydsPbrp0K}2sBPGyS$NI&fqF3QsxU(IP8NVmG?xw}={`S?9c;w^UJ@xGDVFG?SJnqL##RMU?aRzt_cLv25dBy!drjKWr__=1Xa*XrQDXmdhrZ>H|3BYUg{ z0<*(qV`5H)w^b*yF)uDaGfTHDV8d=W5C2an$M*&+@a@HOnr&Y)tZIno#0p=SijBck zd$q`x3r~4pOh(+k{|=MZ#b8uZt*5u_Bl4h&!@^9-e-kToY*|%Rdj$GC45}8dDJ1;rC1e2lH zyXj#BWJ5{5U`@-QoNaN3CR)ut)-(iRGL>O#|4S8)Z!2uZ;z8}uIi+w}isoIuwb9xx zx18@0s9M8g(HZ>qQ`gMWItzM|Uo2Srm{E1V+NjyOG_moi1Vl!yaLka0noifdSmH`V zPBoxM=O%xkwXmTZEiq4N>kk$NED*qp>d6^wbOZq<5R&kE5UZ_R*eOJB&& z+6bzUebRzkFvyelQ89uTo<&X8`6kRb_msK?BODAC+=fje+d$2ynTE92Oi4xE?SJF)*mty~hL+8!AXz4wG%#QM z*^bk*rZ=I`klj388_oPgodK>NQC9VywD>|sWGW?SSOmeqI)u`e*ZK?CO^lr`x`9Yp zL}r4w9OBGHho}D`=IeV?IAJ-kJ-{(iya9;Sd4Kz>E6bpv6JLIP#dPnag*n$+<0zZ7p{) z$Xc#wv4!YQxGjhd_7xw0b^()3cNg6$!Hd(Z2E8op)BW|a3XOe{RMk}uoD$D!ew+K5 zL}Wh{P;C4W%-sfEc~_Ze&B_2!-U|7@_Iy{X)`I)LUT^ju&gOA%IM(odNr=QsrnHF%k;ggqRPIdyw*F*nN&rkg%Y`CL<4}?+bFBIdGIXPYYwAV1Ns7R8V9h``KLN;TBL>KLD=XKH%GmGB5zj zEL|PI;X8r*Ns0|=7cdc@9F{^Xcw%!a7PWf)dU(z%>x>BC*%bB6vKiJ h&`yM55E%#lGpl%?tlY5o)NTeK@O1TaS?83{1OOt8t+D_B literal 0 HcmV?d00001 diff --git a/docs/docs/administration/oauth.md b/docs/docs/administration/oauth.md index d0a9ce733e..3b1e8c729d 100644 --- a/docs/docs/administration/oauth.md +++ b/docs/docs/administration/oauth.md @@ -14,6 +14,7 @@ Immich supports 3rd party authentication via [OpenID Connect][oidc] (OIDC), an i - [Authelia](https://www.authelia.com/integration/openid-connect/immich/) - [Okta](https://www.okta.com/openid-connect/) - [Google](https://developers.google.com/identity/openid-connect/openid-connect) +- [Keycloak](https://www.keycloak.org) ## Prerequisites @@ -253,4 +254,40 @@ Configuration of OAuth in Immich System Settings +

+Keycloak Example + +### Keycloak Example + +Here's an example of OAuth configured for Keycloak: + +Create your immich client on your Keycloak Realm. + + + + + +Configuration of OAuth in Immich System Settings + +| Setting | Value | +| ---------------------------- | ----------------------------------------------------- | +| Issuer URL | `https:///realms/` | +| Client ID | immich | +| Client Secret | can be optained from Clients -> immich -> Credentials | +| Scope | openid email profile | +| Signing Algorithm | RS256 | +| Storage Label Claim | preferred_username | +| Role Claim | immich_role | +| Storage Quota Claim | immich_quota | +| Default Storage Quota (GiB) | 0 (empty for unlimited quota) | +| Button Text | Sign in with Keycloak (recommended) | +| Auto Register | Enabled (optional) | +| Auto Launch | Enabled (optional) | +| Mobile Redirect URI Override | Disabled | +| Mobile Redirect URI | | + +Role Claim can be managed via Client Role. Remember to create a mapper with claim name `immich_role`. + +
+ [oidc]: https://openid.net/connect/ From 505a07a82593e26800d0c9ff9820a2faa54bf2a3 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 1 Apr 2026 07:10:39 -0500 Subject: [PATCH 075/156] feat: add move to lock folder in folder view (#27384) --- .../folders/[[photos=photos]]/[[assetId=id]]/+page.svelte | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte index 59220b9113..97c1bfafdf 100644 --- a/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/folders/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -16,6 +16,7 @@ import DeleteAssets from '$lib/components/timeline/actions/DeleteAssetsAction.svelte'; import DownloadAction from '$lib/components/timeline/actions/DownloadAction.svelte'; import FavoriteAction from '$lib/components/timeline/actions/FavoriteAction.svelte'; + import SetVisibilityAction from '$lib/components/timeline/actions/SetVisibilityAction.svelte'; import TagAction from '$lib/components/timeline/actions/TagAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import SkipLink from '$lib/elements/SkipLink.svelte'; @@ -60,6 +61,10 @@ await invalidateAll(); }; + const handleSetVisibility = () => { + void triggerAssetUpdate(); + }; + const handleSelectAllAssets = () => { if (!data.pathAssets) { return; @@ -143,6 +148,7 @@ + {#if $preferences.tags.enabled && assetMultiSelectManager.isAllUserOwned} {/if} From 4eb531197e333dc5fd24e83edd6e7c85c2de5723 Mon Sep 17 00:00:00 2001 From: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com> Date: Wed, 1 Apr 2026 14:14:28 +0200 Subject: [PATCH 076/156] fix(web): prevent AssetUpdate from adding unrelated timeline assets (#27369) --- .../timeline-manager.svelte.spec.ts | 45 ++++++++++++++++++- .../timeline-manager.svelte.ts | 2 +- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.spec.ts b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.spec.ts index 943b5d12a8..849011bea4 100644 --- a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.spec.ts +++ b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.spec.ts @@ -1,9 +1,10 @@ import { sdkMock } from '$lib/__mocks__/sdk.mock'; +import { eventManager } from '$lib/managers/event-manager.svelte'; import { getMonthGroupByDate } from '$lib/managers/timeline-manager/internal/search-support.svelte'; import { AbortError } from '$lib/utils'; import { fromISODateTimeUTCToObject } from '$lib/utils/timeline-util'; import { AssetVisibility, type AssetResponseDto, type TimeBucketAssetResponseDto } from '@immich/sdk'; -import { timelineAssetFactory, toResponseDto } from '@test-data/factories/asset-factory'; +import { assetFactory, timelineAssetFactory, toResponseDto } from '@test-data/factories/asset-factory'; import { tick } from 'svelte'; import { TimelineManager } from './timeline-manager.svelte'; import type { TimelineAsset } from './types'; @@ -442,6 +443,48 @@ describe('TimelineManager', () => { }); }); + describe('AssetUpdate events', () => { + let timelineManager: TimelineManager; + + beforeEach(async () => { + timelineManager = new TimelineManager(); + sdkMock.getTimeBuckets.mockResolvedValue([]); + + await timelineManager.updateViewport({ width: 1588, height: 1000 }); + await timelineManager.updateOptions({ albumId: 'album-id' }); + }); + + afterEach(() => { + timelineManager.destroy(); + }); + + it('ignores unknown assets for album timelines', () => { + eventManager.emit('AssetUpdate', assetFactory.build()); + + expect(timelineManager.assetCount).toEqual(0); + expect(timelineManager.months).toHaveLength(0); + }); + + it('updates existing assets in the timeline', () => { + const existing = deriveLocalDateTimeFromFileCreatedAt(timelineAssetFactory.build({ isFavorite: false })); + + timelineManager.upsertAssets([existing]); + eventManager.emit( + 'AssetUpdate', + assetFactory.build({ + id: existing.id, + ownerId: existing.ownerId, + isFavorite: true, + isTrashed: existing.isTrashed, + visibility: existing.visibility, + }), + ); + + expect(timelineManager.assetCount).toEqual(1); + expect(timelineManager.months[0].getFirstAsset().isFavorite).toEqual(true); + }); + }); + describe('removeAssets', () => { let timelineManager: TimelineManager; diff --git a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts index 9ab884b059..b5c019d06a 100644 --- a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts +++ b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts @@ -113,7 +113,7 @@ export class TimelineManager extends VirtualScrollManager { this.#unsubscribes.push( eventManager.on({ - AssetUpdate: (asset: AssetResponseDto) => this.upsertAssets([toTimelineAsset(asset)]), + AssetUpdate: (asset: AssetResponseDto) => this.#updateAssets([toTimelineAsset(asset)]), }), ); } From ecba4e2a62149b3da4aee25bdcd59d29b2c3b76b Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Wed, 1 Apr 2026 14:15:43 +0200 Subject: [PATCH 077/156] chore: tee GITHUB_OUTPUT for debugging (#27378) --- .github/workflows/auto-close.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/auto-close.yml b/.github/workflows/auto-close.yml index 348c0785bb..dbbb404e9e 100644 --- a/.github/workflows/auto-close.yml +++ b/.github/workflows/auto-close.yml @@ -30,7 +30,7 @@ jobs: while IFS= read -r header; do printf '%s\n' "$BODY" | grep -qF "$header" || OK=false done < <(sed '//d' .github/pull_request_template.md | grep "^## ") - echo "uses_template=$OK" >> "$GITHUB_OUTPUT" + echo "uses_template=$OK" | tee --append "$GITHUB_OUTPUT" close_template: runs-on: ubuntu-latest @@ -128,7 +128,7 @@ jobs: run: | REMAINING=$(gh pr view "$PR_NUMBER" --repo "${{ github.repository }}" --json labels \ --jq '[.labels[].name | select(startswith("auto-closed:"))] | length') - echo "remaining=$REMAINING" >> "$GITHUB_OUTPUT" + echo "remaining=$REMAINING" | tee --append "$GITHUB_OUTPUT" - name: Reopen PR if: ${{ steps.check_labels.outputs.remaining == '0' }} From 0b40f4fd76e4c43aa0a04ea3a16440492d452528 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 08:16:45 -0400 Subject: [PATCH 078/156] chore(deps): update dependency happy-dom to v20.8.9 [security] (#27350) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 62 +++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7b559068c7..478086e526 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,7 +67,7 @@ importers: version: 24.12.0 '@vitest/coverage-v8': specifier: ^4.0.0 - version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) byte-size: specifier: ^9.0.0 version: 9.0.1 @@ -112,10 +112,10 @@ importers: version: 8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: ^4.0.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest-fetch-mock: specifier: ^0.4.0 - version: 0.4.5(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 0.4.5(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) yaml: specifier: ^2.3.1 version: 2.8.3 @@ -287,7 +287,7 @@ importers: version: 6.1.1(typescript@5.9.3)(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: ^4.0.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) e2e-auth-server: devDependencies: @@ -676,7 +676,7 @@ importers: version: 13.15.10 '@vitest/coverage-v8': specifier: ^3.0.0 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.4)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) eslint: specifier: ^10.0.0 version: 10.1.0(jiti@2.6.1) @@ -733,7 +733,7 @@ importers: version: 6.1.1(typescript@5.9.3)(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: ^3.0.0 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.4)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) web: dependencies: @@ -799,7 +799,7 @@ importers: version: 4.7.8 happy-dom: specifier: ^20.0.0 - version: 20.8.4 + version: 20.8.9 intl-messageformat: specifier: ^11.0.0 version: 11.2.0 @@ -893,7 +893,7 @@ importers: version: 6.9.1 '@testing-library/svelte': specifier: ^5.2.8 - version: 5.3.1(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 5.3.1(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) '@testing-library/user-event': specifier: ^14.5.2 version: 14.6.1(@testing-library/dom@10.4.1) @@ -917,7 +917,7 @@ importers: version: 1.5.6 '@vitest/coverage-v8': specifier: ^4.0.0 - version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) dotenv: specifier: ^17.0.0 version: 17.3.1 @@ -980,7 +980,7 @@ importers: version: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: ^4.0.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages: @@ -7759,8 +7759,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.8.4: - resolution: {integrity: sha512-GKhjq4OQCYB4VLFBzv8mmccUadwlAusOZOI7hC1D9xDIT5HhzkJK17c4el2f6R6C715P9xB4uiMxeKUa2nHMwQ==} + happy-dom@20.8.9: + resolution: {integrity: sha512-Tz23LR9T9jOGVZm2x1EPdXqwA37G/owYMxRwU0E4miurAtFsPMQ1d2Jc2okUaSjZqAFz2oEn3FLXC5a0a+siyA==} engines: {node: '>=20.0.0'} has-flag@4.0.0: @@ -16830,14 +16830,14 @@ snapshots: dependencies: svelte: 5.54.1 - '@testing-library/svelte@5.3.1(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@testing-library/svelte@5.3.1(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@testing-library/dom': 10.4.1 '@testing-library/svelte-core': 1.0.0(svelte@5.54.1) svelte: 5.54.1 optionalDependencies: vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: @@ -17536,7 +17536,7 @@ snapshots: '@vercel/oidc@3.0.5': {} - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.4)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -17551,11 +17551,11 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.2 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.4)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -17567,9 +17567,9 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -17581,7 +17581,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/expect@3.2.4': dependencies: @@ -20392,7 +20392,7 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.8.4: + happy-dom@20.8.9: dependencies: '@types/node': 24.12.0 '@types/whatwg-mimetype': 3.0.2 @@ -25547,11 +25547,11 @@ snapshots: optionalDependencies: vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vitest-fetch-mock@0.4.5(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))): + vitest-fetch-mock@0.4.5(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))): dependencies: - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.4)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 @@ -25579,7 +25579,7 @@ snapshots: optionalDependencies: '@types/debug': 4.1.12 '@types/node': 24.12.0 - happy-dom: 20.8.4 + happy-dom: 20.8.9 jsdom: 26.1.0(canvas@2.11.2) transitivePeerDependencies: - jiti @@ -25595,7 +25595,7 @@ snapshots: - tsx - yaml - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) @@ -25620,12 +25620,12 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.12.0 - happy-dom: 20.8.4 + happy-dom: 20.8.9 jsdom: 26.1.0(canvas@2.11.2(encoding@0.1.13)) transitivePeerDependencies: - msw - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) @@ -25650,12 +25650,12 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.12.0 - happy-dom: 20.8.4 + happy-dom: 20.8.9 jsdom: 26.1.0(canvas@2.11.2) transitivePeerDependencies: - msw - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.4)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) @@ -25680,7 +25680,7 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 25.5.0 - happy-dom: 20.8.4 + happy-dom: 20.8.9 jsdom: 26.1.0(canvas@2.11.2) transitivePeerDependencies: - msw From 4ef777d1458120d5df80d66576d11078218d2ded Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 08:17:58 -0400 Subject: [PATCH 079/156] chore(deps): update dependency handlebars to v4.7.9 [security] (#27334) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 478086e526..2590f4971c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -468,7 +468,7 @@ importers: version: 8.1.6 handlebars: specifier: ^4.7.8 - version: 4.7.8 + version: 4.7.9 helmet: specifier: ^8.1.0 version: 8.1.0 @@ -796,7 +796,7 @@ importers: version: 0.5.0 handlebars: specifier: ^4.7.8 - version: 4.7.8 + version: 4.7.9 happy-dom: specifier: ^20.0.0 version: 20.8.9 @@ -7754,8 +7754,8 @@ packages: handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + handlebars@4.7.9: + resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} engines: {node: '>=0.4.7'} hasBin: true @@ -20383,7 +20383,7 @@ snapshots: handle-thing@2.0.1: {} - handlebars@4.7.8: + handlebars@4.7.9: dependencies: minimist: 1.2.8 neo-async: 2.6.2 From c29493e3a0bd0a629648fe6cd7c72887d264b931 Mon Sep 17 00:00:00 2001 From: Brandon Wees Date: Wed, 1 Apr 2026 07:19:38 -0500 Subject: [PATCH 080/156] fix: withFilePath select edited or unedited file (#27328) * fix: withFilePath select edited or unedited file * chore: test --- server/src/queries/asset.job.repository.sql | 5 ++-- server/src/queries/asset.repository.sql | 7 +++-- server/src/queries/person.repository.sql | 4 +-- server/src/repositories/person.repository.ts | 12 ++------ server/src/utils/database.ts | 5 ++-- .../repositories/asset-job.repository.spec.ts | 29 +++++++++++++++++++ 6 files changed, 43 insertions(+), 19 deletions(-) diff --git a/server/src/queries/asset.job.repository.sql b/server/src/queries/asset.job.repository.sql index 554aa3b195..333d4ace81 100644 --- a/server/src/queries/asset.job.repository.sql +++ b/server/src/queries/asset.job.repository.sql @@ -437,12 +437,13 @@ select "asset_file" where "asset_file"."assetId" = "asset"."id" - and "asset_file"."type" = $1 + and "asset_file"."type" = 'preview' + and "asset_file"."isEdited" = false ) as "previewFile" from "asset" where - "asset"."id" = $2 + "asset"."id" = $1 -- AssetJobRepository.getForSyncAssets select diff --git a/server/src/queries/asset.repository.sql b/server/src/queries/asset.repository.sql index a2525c3b17..a68fde2b93 100644 --- a/server/src/queries/asset.repository.sql +++ b/server/src/queries/asset.repository.sql @@ -637,13 +637,14 @@ select "asset_file" where "asset_file"."assetId" = "asset"."id" - and "asset_file"."type" = $1 + and "asset_file"."type" = 'encoded_video' + and "asset_file"."isEdited" = false ) as "encodedVideoPath" from "asset" where - "asset"."id" = $2 - and "asset"."type" = $3 + "asset"."id" = $1 + and "asset"."type" = $2 -- AssetRepository.getForOcr select diff --git a/server/src/queries/person.repository.sql b/server/src/queries/person.repository.sql index 80756f26c7..47d98f77de 100644 --- a/server/src/queries/person.repository.sql +++ b/server/src/queries/person.repository.sql @@ -176,7 +176,7 @@ select where "asset_file"."assetId" = "asset"."id" and "asset_file"."type" = 'preview' - and "asset_file"."isEdited" = $1 + and "asset_file"."isEdited" = false ) as "previewPath" from "person" @@ -184,7 +184,7 @@ from inner join "asset" on "asset_face"."assetId" = "asset"."id" left join "asset_exif" on "asset_exif"."assetId" = "asset"."id" where - "person"."id" = $2 + "person"."id" = $1 and "asset_face"."deletedAt" is null -- PersonRepository.reassignFace diff --git a/server/src/repositories/person.repository.ts b/server/src/repositories/person.repository.ts index 8701779de5..d427552ab4 100644 --- a/server/src/repositories/person.repository.ts +++ b/server/src/repositories/person.repository.ts @@ -9,7 +9,7 @@ import { DB } from 'src/schema'; import { AssetFaceTable } from 'src/schema/tables/asset-face.table'; import { FaceSearchTable } from 'src/schema/tables/face-search.table'; import { PersonTable } from 'src/schema/tables/person.table'; -import { removeUndefinedKeys } from 'src/utils/database'; +import { removeUndefinedKeys, withFilePath } from 'src/utils/database'; import { paginationHelper, PaginationOptions } from 'src/utils/pagination'; export interface PersonSearchOptions { @@ -282,15 +282,7 @@ export class PersonRepository { 'asset.originalPath', 'asset_exif.orientation as exifOrientation', ]) - .select((eb) => - eb - .selectFrom('asset_file') - .select('asset_file.path') - .whereRef('asset_file.assetId', '=', 'asset.id') - .where('asset_file.type', '=', sql.lit(AssetFileType.Preview)) - .where('asset_file.isEdited', '=', false) - .as('previewPath'), - ) + .select((eb) => withFilePath(eb, AssetFileType.Preview).as('previewPath')) .where('person.id', '=', id) .where('asset_face.deletedAt', 'is', null) .executeTakeFirst(); diff --git a/server/src/utils/database.ts b/server/src/utils/database.ts index 03998d9462..d25d99b491 100644 --- a/server/src/utils/database.ts +++ b/server/src/utils/database.ts @@ -126,12 +126,13 @@ export function withFiles(eb: ExpressionBuilder, type?: AssetFileTy ).as('files'); } -export function withFilePath(eb: ExpressionBuilder, type: AssetFileType) { +export function withFilePath(eb: ExpressionBuilder, type: AssetFileType, isEdited = false) { return eb .selectFrom('asset_file') .select('asset_file.path') .whereRef('asset_file.assetId', '=', 'asset.id') - .where('asset_file.type', '=', type); + .where('asset_file.type', '=', sql.lit(type)) + .where('asset_file.isEdited', '=', sql.lit(isEdited)); } export function withFacesAndPeople( diff --git a/server/test/medium/specs/repositories/asset-job.repository.spec.ts b/server/test/medium/specs/repositories/asset-job.repository.spec.ts index 6af3aa778f..023ed8774e 100644 --- a/server/test/medium/specs/repositories/asset-job.repository.spec.ts +++ b/server/test/medium/specs/repositories/asset-job.repository.spec.ts @@ -115,4 +115,33 @@ describe(AssetJobRepository.name, () => { ); }); }); + + describe('getForOcr', () => { + it('should not return the edited preview file', async () => { + const { ctx, sut } = setup(); + const { user } = await ctx.newUser(); + const { asset } = await ctx.newAsset({ ownerId: user.id }); + + await ctx.newAssetFile({ + assetId: asset.id, + type: AssetFileType.Preview, + path: 'preview_edited.jpg', + isEdited: true, + }); + await ctx.newAssetFile({ + assetId: asset.id, + type: AssetFileType.Preview, + path: 'preview_unedited.jpg', + isEdited: false, + }); + + const result = await sut.getForOcr(asset.id); + + expect(result).toEqual( + expect.objectContaining({ + previewFile: 'preview_unedited.jpg', + }), + ); + }); + }); }); From 2a619d3c105cd6f9195e2a132fdb8ef832f0f9c9 Mon Sep 17 00:00:00 2001 From: Timon Date: Wed, 1 Apr 2026 15:19:14 +0200 Subject: [PATCH 081/156] fix(web): Enable stack selector in shared album view (#24641) --- .../[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 8e8eea13d8..5e92592f1a 100644 --- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -351,6 +351,7 @@ {showArchiveIcon} {onSelect} onEscape={handleEscape} + withStacked={true} > {#if viewMode !== AlbumPageViewMode.SELECT_ASSETS} {#if viewMode !== AlbumPageViewMode.SELECT_THUMBNAIL} From d1e2e8ab4e9b01951ecc38c664a392cb0d51a7b5 Mon Sep 17 00:00:00 2001 From: okxint <130782884+okxint@users.noreply.github.com> Date: Wed, 1 Apr 2026 19:01:54 +0530 Subject: [PATCH 082/156] fix(server): use substring matching for person name search (#26903) --- server/src/queries/person.repository.sql | 11 ++++------- server/src/repositories/person.repository.ts | 14 ++++---------- .../1773846750001-AddPersonNameTrigramIndex.ts | 11 +++++++++++ server/src/schema/tables/person.table.ts | 6 ++++++ 4 files changed, 25 insertions(+), 17 deletions(-) create mode 100644 server/src/schema/migrations/1773846750001-AddPersonNameTrigramIndex.ts diff --git a/server/src/queries/person.repository.sql b/server/src/queries/person.repository.sql index 47d98f77de..f60b8859f2 100644 --- a/server/src/queries/person.repository.sql +++ b/server/src/queries/person.repository.sql @@ -200,13 +200,10 @@ select from "person" where - ( - "person"."ownerId" = $1 - and ( - lower("person"."name") like $2 - or lower("person"."name") like $3 - ) - ) + "person"."ownerId" = $1 + and f_unaccent ("person"."name") %>> f_unaccent ($2) +order by + f_unaccent ("person"."name") <->>> f_unaccent ($3) limit $4 diff --git a/server/src/repositories/person.repository.ts b/server/src/repositories/person.repository.ts index d427552ab4..c1c21162a2 100644 --- a/server/src/repositories/person.repository.ts +++ b/server/src/repositories/person.repository.ts @@ -312,16 +312,10 @@ export class PersonRepository { return this.db .selectFrom('person') .selectAll('person') - .where((eb) => - eb.and([ - eb('person.ownerId', '=', userId), - eb.or([ - eb(eb.fn('lower', ['person.name']), 'like', `${personName.toLowerCase()}%`), - eb(eb.fn('lower', ['person.name']), 'like', `% ${personName.toLowerCase()}%`), - ]), - ]), - ) - .limit(1000) + .where('person.ownerId', '=', userId) + .where(() => sql`f_unaccent("person"."name") %>> f_unaccent(${personName})`) + .orderBy(sql`f_unaccent("person"."name") <->>> f_unaccent(${personName})`) + .limit(100) .$if(!withHidden, (qb) => qb.where('person.isHidden', '=', false)) .execute(); } diff --git a/server/src/schema/migrations/1773846750001-AddPersonNameTrigramIndex.ts b/server/src/schema/migrations/1773846750001-AddPersonNameTrigramIndex.ts new file mode 100644 index 0000000000..58d83be70b --- /dev/null +++ b/server/src/schema/migrations/1773846750001-AddPersonNameTrigramIndex.ts @@ -0,0 +1,11 @@ +import { Kysely, sql } from 'kysely'; + +export async function up(db: Kysely): Promise { + await sql`CREATE INDEX "idx_person_name_trigram" ON "person" USING gin (f_unaccent("name") gin_trgm_ops);`.execute(db); + await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('index_idx_person_name_trigram', '{"type":"index","name":"idx_person_name_trigram","sql":"CREATE INDEX \\"idx_person_name_trigram\\" ON \\"person\\" USING gin (f_unaccent(\\"name\\") gin_trgm_ops);"}'::jsonb);`.execute(db); +} + +export async function down(db: Kysely): Promise { + await sql`DROP INDEX "idx_person_name_trigram";`.execute(db); + await sql`DELETE FROM "migration_overrides" WHERE "name" = 'index_idx_person_name_trigram';`.execute(db); +} diff --git a/server/src/schema/tables/person.table.ts b/server/src/schema/tables/person.table.ts index 02fb85b757..35447acfd0 100644 --- a/server/src/schema/tables/person.table.ts +++ b/server/src/schema/tables/person.table.ts @@ -5,6 +5,7 @@ import { CreateDateColumn, ForeignKeyColumn, Generated, + Index, PrimaryGeneratedColumn, Table, Timestamp, @@ -16,6 +17,11 @@ import { AssetFaceTable } from 'src/schema/tables/asset-face.table'; import { UserTable } from 'src/schema/tables/user.table'; @Table('person') +@Index({ + name: 'idx_person_name_trigram', + using: 'gin', + expression: 'f_unaccent("name") gin_trgm_ops', +}) @UpdatedAtTrigger('person_updatedAt') @AfterDeleteTrigger({ scope: 'statement', From da4b88fc14274c5510319394ef0f111b144cc542 Mon Sep 17 00:00:00 2001 From: Mees Frensel <33722705+meesfrensel@users.noreply.github.com> Date: Wed, 1 Apr 2026 16:34:49 +0200 Subject: [PATCH 083/156] fix(web): transition bg and border-radius (#27438) * fix(web): transition bg and border-radius * also transition thumb --- .../assets/thumbnail/thumbnail.svelte | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/web/src/lib/components/assets/thumbnail/thumbnail.svelte b/web/src/lib/components/assets/thumbnail/thumbnail.svelte index 64b5a835ed..f7b9020d98 100644 --- a/web/src/lib/components/assets/thumbnail/thumbnail.svelte +++ b/web/src/lib/components/assets/thumbnail/thumbnail.svelte @@ -208,7 +208,11 @@
Date: Wed, 1 Apr 2026 11:49:09 -0400 Subject: [PATCH 084/156] feat(web): highlight active person thumbnail in detail panel and edit faces panel (#27401) - Dim non-hovered person thumbnails to 40% opacity when any face is active - Add ring highlight on the active person's thumbnail - Add focus-visible outline styling for keyboard navigation - Apply same treatment to both detail panel people section and edit faces side panel Change-Id: I4ac10fe4568b95f3e0e8d9104133180f6a6a6964 Co-authored-by: Alex --- web/src/lib/components/asset-viewer/detail-panel.svelte | 5 ++++- .../lib/components/assets/thumbnail/image-thumbnail.svelte | 4 ++++ web/src/lib/components/faces-page/person-side-panel.svelte | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/web/src/lib/components/asset-viewer/detail-panel.svelte b/web/src/lib/components/asset-viewer/detail-panel.svelte index ba3ae559dc..f79a0ecbdc 100644 --- a/web/src/lib/components/asset-viewer/detail-panel.svelte +++ b/web/src/lib/components/asset-viewer/detail-panel.svelte @@ -227,8 +227,9 @@

{person.name}

diff --git a/web/src/lib/components/assets/thumbnail/image-thumbnail.svelte b/web/src/lib/components/assets/thumbnail/image-thumbnail.svelte index a54ad911fd..3ee633a603 100644 --- a/web/src/lib/components/assets/thumbnail/image-thumbnail.svelte +++ b/web/src/lib/components/assets/thumbnail/image-thumbnail.svelte @@ -16,6 +16,7 @@ circle?: boolean; hidden?: boolean; border?: boolean; + highlighted?: boolean; hiddenIconClass?: string; class?: ClassValue; brokenAssetClass?: ClassValue; @@ -34,6 +35,7 @@ circle = false, hidden = false, border = false, + highlighted = false, hiddenIconClass = 'text-white', onComplete = undefined, class: imageClass = '', @@ -60,6 +62,8 @@ shadow && 'shadow-lg', (circle || !heightStyle) && 'aspect-square', border && 'border-3 border-immich-dark-primary/80 hover:border-immich-primary', + 'transition-shadow duration-150', + highlighted && 'ring-4 ring-immich-primary dark:ring-immich-dark-primary', ]); let style = $derived( diff --git a/web/src/lib/components/faces-page/person-side-panel.svelte b/web/src/lib/components/faces-page/person-side-panel.svelte index d1556af0f5..ddeddb1ed2 100644 --- a/web/src/lib/components/faces-page/person-side-panel.svelte +++ b/web/src/lib/components/faces-page/person-side-panel.svelte @@ -225,6 +225,7 @@ {:else} {#each peopleWithFaces as face, index (face.id)} {@const personName = face.person ? face.person?.name : $t('face_unassigned')} + {@const isHighlighted = $boundingBoxesArray.some((b) => b.id === face.id)}
Date: Wed, 1 Apr 2026 19:30:54 -0400 Subject: [PATCH 085/156] refactor(web): rename DayGroup to TimelineDay (#27446) Rename DayGroup class to TimelineDay to better convey that it represents a single day within the timeline. Updates the file, class, and all references across 13 files. Change-Id: I9faef9bad73cd5b11f40daaf5eb140dd6a6a6964 --- .../components/album-page/album-viewer.svelte | 2 +- web/src/lib/components/timeline/Month.svelte | 51 ++++++------ .../lib/components/timeline/Timeline.svelte | 36 +++++---- .../group-insertion-cache.svelte.ts | 32 ++++---- .../internal/layout-support.svelte.ts | 38 ++++----- .../internal/search-support.svelte.ts | 12 +-- .../timeline-manager/month-group.svelte.ts | 81 ++++++++++--------- ...group.svelte.ts => timeline-day.svelte.ts} | 4 +- .../timeline-manager.svelte.ts | 26 +++--- .../timeline-manager/viewer-asset.svelte.ts | 8 +- web/src/lib/utils/asset-utils.ts | 2 +- .../[[assetId=id]]/+page.svelte | 2 +- .../(user)/utilities/geolocation/+page.svelte | 6 +- 13 files changed, 153 insertions(+), 147 deletions(-) rename web/src/lib/managers/timeline-manager/{day-group.svelte.ts => timeline-day.svelte.ts} (98%) diff --git a/web/src/lib/components/album-page/album-viewer.svelte b/web/src/lib/components/album-page/album-viewer.svelte index e0182d1c08..55e80ae983 100644 --- a/web/src/lib/components/album-page/album-viewer.svelte +++ b/web/src/lib/components/album-page/album-viewer.svelte @@ -48,7 +48,7 @@ const asset = $slideshowNavigation === SlideshowNavigation.Shuffle ? await timelineManager.getRandomAsset() - : timelineManager.months[0]?.dayGroups[0]?.viewerAssets[0]?.asset; + : timelineManager.months[0]?.timelineDays[0]?.viewerAssets[0]?.asset; if (asset) { handlePromiseError( assetViewerManager.setAssetId(asset.id).then(() => ($slideshowState = SlideshowState.PlaySlideshow)), diff --git a/web/src/lib/components/timeline/Month.svelte b/web/src/lib/components/timeline/Month.svelte index 539b2efdf8..7d3fb36f54 100644 --- a/web/src/lib/components/timeline/Month.svelte +++ b/web/src/lib/components/timeline/Month.svelte @@ -1,7 +1,7 @@ -{#each filterIsInOrNearViewport(monthGroup.dayGroups) as dayGroup, groupIndex (dayGroup.day)} - {@const isDayGroupSelected = assetInteraction.selectedGroup.has(dayGroup.groupTitle)} +{#each filterIsInOrNearViewport(monthGroup.timelineDays) as timelineDay, groupIndex (timelineDay.day)} + {@const isTimelineDaySelected = assetInteraction.selectedGroup.has(timelineDay.groupTitle)}
(hoveredDayGroup = dayGroup.groupTitle)} - onmouseleave={() => (hoveredDayGroup = null)} + style:inset-inline-start={timelineDay.start + 'px'} + style:top={timelineDay.top + 'px'} + onmouseenter={() => (hoveredTimelineDay = timelineDay.groupTitle)} + onmouseleave={() => (hoveredTimelineDay = null)} >
{#if !singleSelect}
onDayGroupSelect(dayGroup, assetsSnapshot(dayGroup.getAssets()))} - onkeydown={() => onDayGroupSelect(dayGroup, assetsSnapshot(dayGroup.getAssets()))} + class:w-8={hoveredTimelineDay === timelineDay.groupTitle || + assetInteraction.selectedGroup.has(timelineDay.groupTitle)} + onclick={() => onTimelineDaySelect(timelineDay, assetsSnapshot(timelineDay.getAssets()))} + onkeydown={() => onTimelineDaySelect(timelineDay, assetsSnapshot(timelineDay.getAssets()))} > - {#if isDayGroupSelected} + {#if isTimelineDaySelected} {:else} @@ -92,20 +93,20 @@
{/if} - - {dayGroup.groupTitle} + + {timelineDay.groupTitle}
{#snippet thumbnail({ asset, position })} - {@render thumbnailWithGroup({ asset, position, dayGroup, groupIndex })} + {@render thumbnailWithGroup({ asset, position, timelineDay, groupIndex })} {/snippet}
diff --git a/web/src/lib/components/timeline/Timeline.svelte b/web/src/lib/components/timeline/Timeline.svelte index eb237cc7af..a4d135b1bd 100644 --- a/web/src/lib/components/timeline/Timeline.svelte +++ b/web/src/lib/components/timeline/Timeline.svelte @@ -13,7 +13,7 @@ import Skeleton from '$lib/elements/Skeleton.svelte'; import type { AssetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; - import type { DayGroup } from '$lib/managers/timeline-manager/day-group.svelte'; + import type { TimelineDay } from '$lib/managers/timeline-manager/timeline-day.svelte'; import { isIntersecting } from '$lib/managers/timeline-manager/internal/intersection-support.svelte'; import type { MonthGroup } from '$lib/managers/timeline-manager/month-group.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; @@ -52,7 +52,7 @@ onThumbnailClick?: ( asset: TimelineAsset, timelineManager: TimelineManager, - dayGroup: DayGroup, + timelineDay: TimelineDay, onClick: ( timelineManager: TimelineManager, assets: TimelineAsset[], @@ -390,8 +390,8 @@ lastAssetMouseEvent = asset; }; - const handleGroupSelect = (dayGroup: DayGroup, assets: TimelineAsset[]) => { - const group = dayGroup.groupTitle; + const handleGroupSelect = (timelineDay: TimelineDay, assets: TimelineAsset[]) => { + const group = timelineDay.groupTitle; if (assetInteraction.selectedGroup.has(group)) { assetInteraction.removeGroupFromMultiselectGroup(group); for (const asset of assets) { @@ -468,12 +468,12 @@ const monthGroup = monthGroups[index]; // Split month group into day groups and check each group - for (const dayGroup of monthGroup.dayGroups) { - const dayGroupTitle = dayGroup.groupTitle; - if (dayGroup.getAssets().every((a) => assetInteraction.hasSelectedAsset(a.id))) { - assetInteraction.addGroupToMultiselectGroup(dayGroupTitle); + for (const timelineDay of monthGroup.timelineDays) { + const timelineDayTitle = timelineDay.groupTitle; + if (timelineDay.getAssets().every((a) => assetInteraction.hasSelectedAsset(a.id))) { + assetInteraction.addGroupToMultiselectGroup(timelineDayTitle); } else { - assetInteraction.removeGroupFromMultiselectGroup(dayGroupTitle); + assetInteraction.removeGroupFromMultiselectGroup(timelineDayTitle); } } } @@ -524,16 +524,18 @@ const assetSelectHandler = ( timelineManager: TimelineManager, asset: TimelineAsset, - assetsInDayGroup: TimelineAsset[], + assetsInTimelineDay: TimelineAsset[], groupTitle: string, ) => { void onSelectAssets(asset); // Check if all assets are selected in a group to toggle the group selection's icon - let selectedAssetsInGroupCount = assetsInDayGroup.filter(({ id }) => assetInteraction.hasSelectedAsset(id)).length; + let selectedAssetsInGroupCount = assetsInTimelineDay.filter(({ id }) => + assetInteraction.hasSelectedAsset(id), + ).length; // if all assets are selected in a group, add the group to selected group - if (selectedAssetsInGroupCount === assetsInDayGroup.length) { + if (selectedAssetsInGroupCount === assetsInTimelineDay.length) { assetInteraction.addGroupToMultiselectGroup(groupTitle); } else { assetInteraction.removeGroupFromMultiselectGroup(groupTitle); @@ -668,9 +670,9 @@ {singleSelect} {monthGroup} manager={timelineManager} - onDayGroupSelect={handleGroupSelect} + onTimelineDaySelect={handleGroupSelect} > - {#snippet thumbnail({ asset, position, dayGroup, groupIndex })} + {#snippet thumbnail({ asset, position, timelineDay, groupIndex })} {@const isAssetSelectionCandidate = assetInteraction.hasSelectionCandidate(asset.id)} {@const isAssetSelected = assetInteraction.hasSelectedAsset(asset.id) || timelineManager.albumAssets.has(asset.id)} @@ -683,14 +685,14 @@ {groupIndex} onClick={(asset) => { if (typeof onThumbnailClick === 'function') { - onThumbnailClick(asset, timelineManager, dayGroup, _onClick); + onThumbnailClick(asset, timelineManager, timelineDay, _onClick); } else { - _onClick(timelineManager, dayGroup.getAssets(), dayGroup.groupTitle, asset); + _onClick(timelineManager, timelineDay.getAssets(), timelineDay.groupTitle, asset); } }} onSelect={() => { if (isSelectionMode || assetInteraction.selectionActive) { - assetSelectHandler(timelineManager, asset, dayGroup.getAssets(), dayGroup.groupTitle); + assetSelectHandler(timelineManager, asset, timelineDay.getAssets(), timelineDay.groupTitle); return; } void onSelectAssets(asset); diff --git a/web/src/lib/managers/timeline-manager/group-insertion-cache.svelte.ts b/web/src/lib/managers/timeline-manager/group-insertion-cache.svelte.ts index 566b11b8b7..0e534c10d6 100644 --- a/web/src/lib/managers/timeline-manager/group-insertion-cache.svelte.ts +++ b/web/src/lib/managers/timeline-manager/group-insertion-cache.svelte.ts @@ -1,64 +1,64 @@ import { setDifference, type TimelineDate } from '$lib/utils/timeline-util'; import { AssetOrder } from '@immich/sdk'; -import type { DayGroup } from './day-group.svelte'; import type { MonthGroup } from './month-group.svelte'; +import type { TimelineDay } from './timeline-day.svelte'; import type { TimelineAsset } from './types'; export class GroupInsertionCache { #lookupCache: { - [year: number]: { [month: number]: { [day: number]: DayGroup } }; + [year: number]: { [month: number]: { [day: number]: TimelineDay } }; } = {}; unprocessedAssets: TimelineAsset[] = []; // eslint-disable-next-line svelte/prefer-svelte-reactivity - changedDayGroups = new Set(); + changedTimelineDays = new Set(); // eslint-disable-next-line svelte/prefer-svelte-reactivity - newDayGroups = new Set(); + newTimelineDays = new Set(); - getDayGroup({ year, month, day }: TimelineDate): DayGroup | undefined { + getTimelineDay({ year, month, day }: TimelineDate): TimelineDay | undefined { return this.#lookupCache[year]?.[month]?.[day]; } - setDayGroup(dayGroup: DayGroup, { year, month, day }: TimelineDate) { + setTimelineDay(timelineDay: TimelineDay, { year, month, day }: TimelineDate) { if (!this.#lookupCache[year]) { this.#lookupCache[year] = {}; } if (!this.#lookupCache[year][month]) { this.#lookupCache[year][month] = {}; } - this.#lookupCache[year][month][day] = dayGroup; + this.#lookupCache[year][month][day] = timelineDay; } - get existingDayGroups() { - return setDifference(this.changedDayGroups, this.newDayGroups); + get existingTimelineDays() { + return setDifference(this.changedTimelineDays, this.newTimelineDays); } get updatedBuckets() { // eslint-disable-next-line svelte/prefer-svelte-reactivity const updated = new Set(); - for (const group of this.changedDayGroups) { + for (const group of this.changedTimelineDays) { updated.add(group.monthGroup); } return updated; } - get bucketsWithNewDayGroups() { + get bucketsWithNewTimelineDays() { // eslint-disable-next-line svelte/prefer-svelte-reactivity const updated = new Set(); - for (const group of this.newDayGroups) { + for (const group of this.newTimelineDays) { updated.add(group.monthGroup); } return updated; } sort(monthGroup: MonthGroup, sortOrder: AssetOrder = AssetOrder.Desc) { - for (const group of this.changedDayGroups) { + for (const group of this.changedTimelineDays) { group.sortAssets(sortOrder); } - for (const group of this.newDayGroups) { + for (const group of this.newTimelineDays) { group.sortAssets(sortOrder); } - if (this.newDayGroups.size > 0) { - monthGroup.sortDayGroups(); + if (this.newTimelineDays.size > 0) { + monthGroup.sortTimelineDays(); } } } diff --git a/web/src/lib/managers/timeline-manager/internal/layout-support.svelte.ts b/web/src/lib/managers/timeline-manager/internal/layout-support.svelte.ts index 232c67a6ba..a6d8d5d65f 100644 --- a/web/src/lib/managers/timeline-manager/internal/layout-support.svelte.ts +++ b/web/src/lib/managers/timeline-manager/internal/layout-support.svelte.ts @@ -25,41 +25,41 @@ export function layoutMonthGroup(timelineManager: TimelineManager, month: MonthG let cumulativeWidth = 0; let currentRowHeight = 0; - let dayGroupRow = 0; - let dayGroupCol = 0; + let timelineDayRow = 0; + let timelineDayCol = 0; const options = timelineManager.justifiedLayoutOptions; - for (const dayGroup of month.dayGroups) { - dayGroup.layout(options, noDefer); + for (const timelineDay of month.timelineDays) { + timelineDay.layout(options, noDefer); // Calculate space needed for this item (including gap if not first in row) - const spaceNeeded = dayGroup.width + (dayGroupCol > 0 ? timelineManager.gap : 0); + const spaceNeeded = timelineDay.width + (timelineDayCol > 0 ? timelineManager.gap : 0); const fitsInCurrentRow = cumulativeWidth + spaceNeeded <= timelineManager.viewportWidth; if (fitsInCurrentRow) { - dayGroup.row = dayGroupRow; - dayGroup.col = dayGroupCol++; - dayGroup.start = cumulativeWidth; - dayGroup.top = cumulativeHeight; + timelineDay.row = timelineDayRow; + timelineDay.col = timelineDayCol++; + timelineDay.start = cumulativeWidth; + timelineDay.top = cumulativeHeight; - cumulativeWidth += dayGroup.width + timelineManager.gap; + cumulativeWidth += timelineDay.width + timelineManager.gap; } else { // Move to next row cumulativeHeight += currentRowHeight; cumulativeWidth = 0; - dayGroupRow++; - dayGroupCol = 0; + timelineDayRow++; + timelineDayCol = 0; // Position at start of new row - dayGroup.row = dayGroupRow; - dayGroup.col = dayGroupCol; - dayGroup.start = 0; - dayGroup.top = cumulativeHeight; + timelineDay.row = timelineDayRow; + timelineDay.col = timelineDayCol; + timelineDay.start = 0; + timelineDay.top = cumulativeHeight; - dayGroupCol++; - cumulativeWidth += dayGroup.width + timelineManager.gap; + timelineDayCol++; + cumulativeWidth += timelineDay.width + timelineManager.gap; } - currentRowHeight = dayGroup.height + timelineManager.headerHeight; + currentRowHeight = timelineDay.height + timelineManager.headerHeight; } // Add the height of the final row diff --git a/web/src/lib/managers/timeline-manager/internal/search-support.svelte.ts b/web/src/lib/managers/timeline-manager/internal/search-support.svelte.ts index f881c6e7fc..028968d18a 100644 --- a/web/src/lib/managers/timeline-manager/internal/search-support.svelte.ts +++ b/web/src/lib/managers/timeline-manager/internal/search-support.svelte.ts @@ -60,10 +60,10 @@ async function getAssetByAssetOffset( monthGroup: MonthGroup, direction: Direction, ) { - const dayGroup = monthGroup.findDayGroupForAsset(asset); + const timelineDay = monthGroup.findTimelineDayForAsset(asset); for await (const targetAsset of timelineManager.assetsIterator({ startMonthGroup: monthGroup, - startDayGroup: dayGroup, + startTimelineDay: timelineDay, startAsset: asset, direction, })) { @@ -79,10 +79,10 @@ async function getAssetByDayOffset( monthGroup: MonthGroup, direction: Direction, ) { - const dayGroup = monthGroup.findDayGroupForAsset(asset); + const timelineDay = monthGroup.findTimelineDayForAsset(asset); for await (const targetAsset of timelineManager.assetsIterator({ startMonthGroup: monthGroup, - startDayGroup: dayGroup, + startTimelineDay: timelineDay, startAsset: asset, direction, })) { @@ -127,10 +127,10 @@ export async function retrieveRange(timelineManager: TimelineManager, start: Ass } const range: TimelineAsset[] = []; - const startDayGroup = startMonthGroup.findDayGroupForAsset(startAsset); + const startTimelineDay = startMonthGroup.findTimelineDayForAsset(startAsset); for await (const targetAsset of timelineManager.assetsIterator({ startMonthGroup, - startDayGroup, + startTimelineDay, startAsset, })) { range.push(targetAsset); diff --git a/web/src/lib/managers/timeline-manager/month-group.svelte.ts b/web/src/lib/managers/timeline-manager/month-group.svelte.ts index d23dc1b801..172e91f7b0 100644 --- a/web/src/lib/managers/timeline-manager/month-group.svelte.ts +++ b/web/src/lib/managers/timeline-manager/month-group.svelte.ts @@ -23,8 +23,8 @@ import { isInViewport as isInViewportUtil, } from '$lib/managers/timeline-manager/internal/intersection-support.svelte'; import { SvelteSet } from 'svelte/reactivity'; -import { DayGroup } from './day-group.svelte'; import { GroupInsertionCache } from './group-insertion-cache.svelte'; +import { TimelineDay } from './timeline-day.svelte'; import type { TimelineManager } from './timeline-manager.svelte'; import type { AssetDescriptor, Direction, MoveAsset, TimelineAsset } from './types'; import { ViewerAsset } from './viewer-asset.svelte'; @@ -32,7 +32,7 @@ import { ViewerAsset } from './viewer-asset.svelte'; export class MonthGroup { #viewportProximity: ViewportProximity = $state(ViewportProximity.FarFromViewport); isLoaded: boolean = $state(false); - dayGroups: DayGroup[] = $state([]); + timelineDays: TimelineDay[] = $state([]); readonly timelineManager: TimelineManager; #height: number = $state(0); @@ -44,7 +44,7 @@ export class MonthGroup { assetsCount: number = $derived( this.isLoaded - ? this.dayGroups.reduce((accumulator, g) => accumulator + g.viewerAssets.length, 0) + ? this.timelineDays.reduce((accumulator, g) => accumulator + g.viewerAssets.length, 0) : this.#initialCount, ); loader: CancellableTask | undefined; @@ -72,7 +72,7 @@ export class MonthGroup { this.isLoaded = true; }, () => { - this.dayGroups = []; + this.timelineDays = []; this.isLoaded = false; }, this.#handleLoadError, @@ -103,25 +103,28 @@ export class MonthGroup { return isInViewportUtil(this.#viewportProximity); } - get lastDayGroup() { - return this.dayGroups.at(-1); + get lastTimelineDay() { + return this.timelineDays.at(-1); } getFirstAsset() { - return this.dayGroups[0]?.getFirstAsset(); + return this.timelineDays[0]?.getFirstAsset(); } getAssets() { // eslint-disable-next-line unicorn/no-array-reduce - return this.dayGroups.reduce((accumulator: TimelineAsset[], g: DayGroup) => accumulator.concat(g.getAssets()), []); + return this.timelineDays.reduce( + (accumulator: TimelineAsset[], g: TimelineDay) => accumulator.concat(g.getAssets()), + [], + ); } - sortDayGroups() { + sortTimelineDays() { if (this.#sortOrder === AssetOrder.Asc) { - return this.dayGroups.sort((a, b) => a.day - b.day); + return this.timelineDays.sort((a, b) => a.day - b.day); } - return this.dayGroups.sort((a, b) => b.day - a.day); + return this.timelineDays.sort((a, b) => b.day - a.day); } runAssetCallback(ids: Set, callback: (asset: TimelineAsset) => void | { remove?: boolean }) { @@ -133,15 +136,15 @@ export class MonthGroup { changedGeometry: false, }; } - const { dayGroups } = this; + const { timelineDays } = this; let combinedChangedGeometry = false; let idsToProcess = new SvelteSet(ids); const idsProcessed = new SvelteSet(); const combinedMoveAssets: MoveAsset[][] = []; - let index = dayGroups.length; + let index = timelineDays.length; while (index--) { if (idsToProcess.size > 0) { - const group = dayGroups[index]; + const group = timelineDays[index]; const { moveAssets, processedIds, changedGeometry } = group.runAssetCallback(ids, callback); if (moveAssets.length > 0) { combinedMoveAssets.push(moveAssets); @@ -152,7 +155,7 @@ export class MonthGroup { } combinedChangedGeometry = combinedChangedGeometry || changedGeometry; if (group.viewerAssets.length === 0) { - dayGroups.splice(index, 1); + timelineDays.splice(index, 1); combinedChangedGeometry = true; } } @@ -215,12 +218,12 @@ export class MonthGroup { return addContext.unprocessedAssets; } - for (const group of addContext.existingDayGroups) { + for (const group of addContext.existingTimelineDays) { group.sortAssets(this.#sortOrder); } - if (addContext.newDayGroups.size > 0) { - this.sortDayGroups(); + if (addContext.newTimelineDays.size > 0) { + this.sortTimelineDays(); } addContext.sort(this, this.#sortOrder); @@ -237,20 +240,20 @@ export class MonthGroup { return; } - let dayGroup = addContext.getDayGroup(localDateTime) || this.findDayGroupByDay(localDateTime.day); - if (dayGroup) { - addContext.setDayGroup(dayGroup, localDateTime); + let timelineDay = addContext.getTimelineDay(localDateTime) || this.findTimelineDayByDay(localDateTime.day); + if (timelineDay) { + addContext.setTimelineDay(timelineDay, localDateTime); } else { const groupTitle = formatGroupTitle(fromTimelinePlainDate(localDateTime)); - dayGroup = new DayGroup(this, this.dayGroups.length, localDateTime.day, groupTitle); - this.dayGroups.push(dayGroup); - addContext.setDayGroup(dayGroup, localDateTime); - addContext.newDayGroups.add(dayGroup); + timelineDay = new TimelineDay(this, this.timelineDays.length, localDateTime.day, groupTitle); + this.timelineDays.push(timelineDay); + addContext.setTimelineDay(timelineDay, localDateTime); + addContext.newTimelineDays.add(timelineDay); } - const viewerAsset = new ViewerAsset(dayGroup, timelineAsset); - dayGroup.viewerAssets.push(viewerAsset); - addContext.changedDayGroups.add(dayGroup); + const viewerAsset = new ViewerAsset(timelineDay, timelineAsset); + timelineDay.viewerAssets.push(viewerAsset); + addContext.changedTimelineDays.add(timelineDay); } get viewId() { @@ -312,21 +315,21 @@ export class MonthGroup { handleError(error, _$t('errors.failed_to_load_assets')); } - findDayGroupForAsset(asset: TimelineAsset) { - for (const group of this.dayGroups) { + findTimelineDayForAsset(asset: TimelineAsset) { + for (const group of this.timelineDays) { if (group.viewerAssets.some((viewerAsset) => viewerAsset.id === asset.id)) { return group; } } } - findDayGroupByDay(day: number) { - return this.dayGroups.find((group) => group.day === day); + findTimelineDayByDay(day: number) { + return this.timelineDays.find((group) => group.day === day); } findAssetAbsolutePosition(assetId: string) { this.timelineManager.clearDeferredLayout(this); - for (const group of this.dayGroups) { + for (const group of this.timelineDays) { const viewerAsset = group.viewerAssets.find((viewAsset) => viewAsset.id === assetId); if (viewerAsset) { if (!viewerAsset.position) { @@ -341,18 +344,18 @@ export class MonthGroup { } } - *assetsIterator(options?: { startDayGroup?: DayGroup; startAsset?: TimelineAsset; direction?: Direction }) { + *assetsIterator(options?: { startTimelineDay?: TimelineDay; startAsset?: TimelineAsset; direction?: Direction }) { const direction = options?.direction ?? 'earlier'; let { startAsset } = options ?? {}; const isEarlier = direction === 'earlier'; - let groupIndex = options?.startDayGroup - ? this.dayGroups.indexOf(options.startDayGroup) + let groupIndex = options?.startTimelineDay + ? this.timelineDays.indexOf(options.startTimelineDay) : isEarlier ? 0 - : this.dayGroups.length - 1; + : this.timelineDays.length - 1; - while (groupIndex >= 0 && groupIndex < this.dayGroups.length) { - const group = this.dayGroups[groupIndex]; + while (groupIndex >= 0 && groupIndex < this.timelineDays.length) { + const group = this.timelineDays[groupIndex]; yield* group.assetsIterator({ startAsset, direction }); startAsset = undefined; groupIndex += isEarlier ? 1 : -1; diff --git a/web/src/lib/managers/timeline-manager/day-group.svelte.ts b/web/src/lib/managers/timeline-manager/timeline-day.svelte.ts similarity index 98% rename from web/src/lib/managers/timeline-manager/day-group.svelte.ts rename to web/src/lib/managers/timeline-manager/timeline-day.svelte.ts index 000b07f3c4..d78be71c70 100644 --- a/web/src/lib/managers/timeline-manager/day-group.svelte.ts +++ b/web/src/lib/managers/timeline-manager/timeline-day.svelte.ts @@ -9,7 +9,7 @@ import type { MonthGroup } from './month-group.svelte'; import type { Direction, MoveAsset, TimelineAsset } from './types'; import { ViewerAsset } from './viewer-asset.svelte'; -export class DayGroup { +export class TimelineDay { readonly monthGroup: MonthGroup; readonly index: number; readonly groupTitle: string; @@ -151,7 +151,7 @@ export class DayGroup { } } - get absoluteDayGroupTop() { + get absoluteTimelineDayTop() { return this.monthGroup.top + this.#top; } } diff --git a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts index b5c019d06a..f02667ab47 100644 --- a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts +++ b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts @@ -26,9 +26,9 @@ import { import { AssetOrder, getAssetInfo, getTimeBuckets, type AssetResponseDto } from '@immich/sdk'; import { clamp, isEqual } from 'lodash-es'; import { SvelteDate, SvelteSet } from 'svelte/reactivity'; -import { DayGroup } from './day-group.svelte'; import { isMismatched, updateObject } from './internal/utils.svelte'; import { MonthGroup } from './month-group.svelte'; +import { TimelineDay } from './timeline-day.svelte'; import type { AssetDescriptor, Direction, @@ -138,16 +138,16 @@ export class TimelineManager extends VirtualScrollManager { async *assetsIterator(options?: { startMonthGroup?: MonthGroup; - startDayGroup?: DayGroup; + startTimelineDay?: TimelineDay; startAsset?: TimelineAsset; direction?: Direction; }) { const direction = options?.direction ?? 'earlier'; - let { startDayGroup, startAsset } = options ?? {}; + let { startTimelineDay, startAsset } = options ?? {}; for (const monthGroup of this.monthGroupIterator({ direction, startMonthGroup: options?.startMonthGroup })) { await this.loadMonthGroup(monthGroup.yearMonth, { cancelable: false }); - yield* monthGroup.assetsIterator({ startDayGroup, startAsset, direction }); - startDayGroup = startAsset = undefined; + yield* monthGroup.assetsIterator({ startTimelineDay, startAsset, direction }); + startTimelineDay = startAsset = undefined; } } @@ -226,10 +226,10 @@ export class TimelineManager extends VirtualScrollManager { } clearDeferredLayout(month: MonthGroup) { - const hasDeferred = month.dayGroups.some((group) => group.deferredLayout); + const hasDeferred = month.timelineDays.some((group) => group.deferredLayout); if (hasDeferred) { updateGeometry(this, month, { invalidateHeight: true, noDefer: true }); - for (const group of month.dayGroups) { + for (const group of month.timelineDays) { group.deferredLayout = false; } } @@ -428,8 +428,8 @@ export class TimelineManager extends VirtualScrollManager { } await this.loadMonthGroup(randomMonth.yearMonth, { cancelable: false }); - let randomDay: DayGroup | undefined = undefined; - for (const day of randomMonth.dayGroups) { + let randomDay: TimelineDay | undefined = undefined; + for (const day of randomMonth.timelineDays) { if (randomAssetIndex < accumulatedCount + day.viewerAssets.length) { randomDay = day; break; @@ -618,16 +618,16 @@ export class TimelineManager extends VirtualScrollManager { } protected postUpsert(context: GroupInsertionCache): void { - for (const group of context.existingDayGroups) { + for (const group of context.existingTimelineDays) { group.sortAssets(this.#options.order); } - for (const monthGroup of context.bucketsWithNewDayGroups) { - monthGroup.sortDayGroups(); + for (const monthGroup of context.bucketsWithNewTimelineDays) { + monthGroup.sortTimelineDays(); } for (const month of context.updatedBuckets) { - month.sortDayGroups(); + month.sortTimelineDays(); updateGeometry(this, month, { invalidateHeight: true }); } this.updateViewportProximities(); diff --git a/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts b/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts index e0d8e1f5b5..d7691b7025 100644 --- a/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts +++ b/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts @@ -1,15 +1,15 @@ import type { CommonPosition } from '$lib/utils/layout-utils'; -import type { DayGroup } from './day-group.svelte'; import { ViewportProximity, calculateViewerAssetViewportProximity, isInOrNearViewport, } from './internal/intersection-support.svelte'; +import type { TimelineDay } from './timeline-day.svelte'; import type { TimelineAsset } from './types'; export class ViewerAsset { - readonly #group: DayGroup; + readonly #group: TimelineDay; #viewportProximity = $derived.by(() => { if (!this.position) { @@ -17,7 +17,7 @@ export class ViewerAsset { } const store = this.#group.monthGroup.timelineManager; - const positionTop = this.#group.absoluteDayGroupTop + this.position.top; + const positionTop = this.#group.absoluteTimelineDayTop + this.position.top; return calculateViewerAssetViewportProximity(store, positionTop, this.position.height); }); @@ -30,7 +30,7 @@ export class ViewerAsset { asset: TimelineAsset = $state(); id: string = $derived(this.asset.id); - constructor(group: DayGroup, asset: TimelineAsset) { + constructor(group: TimelineDay, asset: TimelineAsset) { this.#group = group; this.asset = asset; } diff --git a/web/src/lib/utils/asset-utils.ts b/web/src/lib/utils/asset-utils.ts index 9e9cf57726..33a5424157 100644 --- a/web/src/lib/utils/asset-utils.ts +++ b/web/src/lib/utils/asset-utils.ts @@ -407,7 +407,7 @@ export const selectAllAssets = async (timelineManager: TimelineManager, assetInt } assetInteraction.selectAssets([...monthGroup.assetsIterator()]); - for (const dateGroup of monthGroup.dayGroups) { + for (const dateGroup of monthGroup.timelineDays) { assetInteraction.addGroupToMultiselectGroup(dateGroup.groupTitle); } } diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 5e92592f1a..285a50ef57 100644 --- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -104,7 +104,7 @@ const asset = $slideshowNavigation === SlideshowNavigation.Shuffle ? await timelineManager.getRandomAsset() - : timelineManager.months[0]?.dayGroups[0]?.viewerAssets[0]?.asset; + : timelineManager.months[0]?.timelineDays[0]?.viewerAssets[0]?.asset; if (asset) { handlePromiseError( assetViewerManager.setAssetId(asset.id).then(() => ($slideshowState = SlideshowState.PlaySlideshow)), diff --git a/web/src/routes/(user)/utilities/geolocation/+page.svelte b/web/src/routes/(user)/utilities/geolocation/+page.svelte index 5f0bbe8e88..7a577bd8cf 100644 --- a/web/src/routes/(user)/utilities/geolocation/+page.svelte +++ b/web/src/routes/(user)/utilities/geolocation/+page.svelte @@ -6,7 +6,7 @@ import { AssetAction } from '$lib/constants'; import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { authManager } from '$lib/managers/auth-manager.svelte'; - import type { DayGroup } from '$lib/managers/timeline-manager/day-group.svelte'; + import type { TimelineDay } from '$lib/managers/timeline-manager/timeline-day.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; import GeolocationPointPickerModal from '$lib/modals/GeolocationPointPickerModal.svelte'; @@ -109,7 +109,7 @@ const handleThumbnailClick = ( asset: TimelineAsset, timelineManager: TimelineManager, - dayGroup: DayGroup, + timelineDay: TimelineDay, onClick: ( timelineManager: TimelineManager, assets: TimelineAsset[], @@ -125,7 +125,7 @@ point = { lat: asset.latitude, lng: asset.longitude }; void setQueryValue('at', asset.id); } else { - onClick(timelineManager, dayGroup.getAssets(), dayGroup.groupTitle, asset); + onClick(timelineManager, timelineDay.getAssets(), timelineDay.groupTitle, asset); } }; From b465f2b58faf784274854abad69b7422bb823243 Mon Sep 17 00:00:00 2001 From: Mees Frensel <33722705+meesfrensel@users.noreply.github.com> Date: Thu, 2 Apr 2026 17:18:47 +0200 Subject: [PATCH 086/156] fix: scrollbar ui theme colors (#27455) --- web/src/app.css | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/web/src/app.css b/web/src/app.css index 1ff3bec99b..4afc13ea0a 100644 --- a/web/src/app.css +++ b/web/src/app.css @@ -128,25 +128,24 @@ /* Track */ html::-webkit-scrollbar-track { - background: #f1f1f1; - border-radius: 16px; + background-color: var(--immich-ui-light-100); + border-radius: 4px; } /* Handle */ html::-webkit-scrollbar-thumb { - background: rgba(85, 86, 87, 0.408); - border-radius: 16px; + background-color: color-mix(in oklab, var(--immich-ui-light-600) 40%, transparent); + border-radius: 4px; } /* Handle on hover */ html::-webkit-scrollbar-thumb:hover { - background: #4250afad; - border-radius: 16px; + background-color: color-mix(in oklab, var(--immich-ui-primary-500) 70%, transparent); } body { margin: 0; - color: #3a3a3a; + color: var(--immich-ui-dark); } body.asset-viewer-open { From 37823bcd519fa95094a8594f49b1fb1e4c7b047a Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 2 Apr 2026 10:28:40 -0500 Subject: [PATCH 087/156] feat: create new person in face editor (#27364) * feat: create new person in face editor * add delay * fix: test * i18n * fix: unit test * pr feedback --- i18n/en.json | 4 + server/src/services/person.service.spec.ts | 88 +++++++++++++++++- server/src/services/person.service.ts | 10 +- .../specs/services/person.service.spec.ts | 13 ++- .../face-editor/face-editor.svelte | 75 ++++++++++++++- web/src/lib/modals/CreateFaceModal.svelte | 91 +++++++++++++++++++ 6 files changed, 274 insertions(+), 7 deletions(-) create mode 100644 web/src/lib/modals/CreateFaceModal.svelte diff --git a/i18n/en.json b/i18n/en.json index 42a89586f9..29af88b5b0 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -849,9 +849,12 @@ "create_link_to_share": "Create link to share", "create_link_to_share_description": "Let anyone with the link see the selected photo(s)", "create_new": "CREATE NEW", + "create_new_face": "Create new face", "create_new_person": "Create new person", "create_new_person_hint": "Assign selected assets to a new person", "create_new_user": "Create new user", + "create_person": "Create person", + "create_person_subtitle": "Add a name to the selected face to create and tag the new person", "create_shared_album_page_share_add_assets": "ADD ASSETS", "create_shared_album_page_share_select_photos": "Select Photos", "create_shared_link": "Create shared link", @@ -2214,6 +2217,7 @@ "tag": "Tag", "tag_assets": "Tag assets", "tag_created": "Created tag: {tag}", + "tag_face": "Tag face", "tag_feature_description": "Browsing photos and videos grouped by logical tag topics", "tag_not_found_question": "Cannot find a tag? Create a new tag.", "tag_people": "Tag People", diff --git a/server/src/services/person.service.spec.ts b/server/src/services/person.service.spec.ts index 5c262d892d..8b303d04f6 100644 --- a/server/src/services/person.service.spec.ts +++ b/server/src/services/person.service.spec.ts @@ -12,7 +12,13 @@ import { PersonFactory } from 'test/factories/person.factory'; import { UserFactory } from 'test/factories/user.factory'; import { authStub } from 'test/fixtures/auth.stub'; import { systemConfigStub } from 'test/fixtures/system-config.stub'; -import { getAsDetectedFace, getForAssetFace, getForDetectedFaces, getForFacialRecognitionJob } from 'test/mappers'; +import { + getAsDetectedFace, + getForAsset, + getForAssetFace, + getForDetectedFaces, + getForFacialRecognitionJob, +} from 'test/mappers'; import { newDate, newUuid } from 'test/small.factory'; import { makeStream, newTestService, ServiceMocks } from 'test/utils'; @@ -370,6 +376,86 @@ describe(PersonService.name, () => { }); }); + describe('createFace', () => { + it('should create a manual face and initialize the person feature photo creation', async () => { + const auth = AuthFactory.create(); + const asset = AssetFactory.create(); + const person = PersonFactory.create({ faceAssetId: null }); + const featureFace = AssetFaceFactory.create({ + assetId: asset.id, + personId: person.id, + sourceType: SourceType.Manual, + }); + + mocks.access.asset.checkOwnerAccess.mockResolvedValue(new Set([asset.id])); + mocks.access.person.checkOwnerAccess.mockResolvedValue(new Set([person.id])); + mocks.asset.getById.mockResolvedValue(getForAsset(asset)); + mocks.person.getById.mockResolvedValue(person); + mocks.person.getRandomFace.mockResolvedValue(featureFace); + mocks.person.update.mockResolvedValue({ ...person, faceAssetId: featureFace.id }); + + await expect( + sut.createFace(auth, { + assetId: asset.id, + personId: person.id, + imageHeight: 500, + imageWidth: 400, + x: 10, + y: 20, + width: 100, + height: 110, + }), + ).resolves.toBeUndefined(); + + expect(mocks.asset.getById).toHaveBeenCalledWith(asset.id, { edits: true, exifInfo: true }); + expect(mocks.person.createAssetFace).toHaveBeenCalledWith({ + assetId: asset.id, + personId: person.id, + imageHeight: 500, + imageWidth: 400, + boundingBoxX1: 10, + boundingBoxX2: 110, + boundingBoxY1: 20, + boundingBoxY2: 130, + sourceType: SourceType.Manual, + }); + expect(mocks.person.getRandomFace).toHaveBeenCalledWith(person.id); + expect(mocks.person.update).toHaveBeenCalledWith({ id: person.id, faceAssetId: featureFace.id }); + expect(mocks.job.queueAll).toHaveBeenCalledWith([ + { name: JobName.PersonGenerateThumbnail, data: { id: person.id } }, + ]); + }); + + it('should not update the person feature photo if one already exists', async () => { + const auth = AuthFactory.create(); + const asset = AssetFactory.create(); + const person = PersonFactory.create({ faceAssetId: newUuid() }); + + mocks.access.asset.checkOwnerAccess.mockResolvedValue(new Set([asset.id])); + mocks.access.person.checkOwnerAccess.mockResolvedValue(new Set([person.id])); + mocks.asset.getById.mockResolvedValue(getForAsset(asset)); + mocks.person.getById.mockResolvedValue(person); + + await expect( + sut.createFace(auth, { + assetId: asset.id, + personId: person.id, + imageHeight: 500, + imageWidth: 400, + x: 10, + y: 20, + width: 100, + height: 110, + }), + ).resolves.toBeUndefined(); + + expect(mocks.person.createAssetFace).toHaveBeenCalledOnce(); + expect(mocks.person.getRandomFace).not.toHaveBeenCalled(); + expect(mocks.person.update).not.toHaveBeenCalled(); + expect(mocks.job.queueAll).not.toHaveBeenCalled(); + }); + }); + describe('createNewFeaturePhoto', () => { it('should change person feature photo', async () => { const person = PersonFactory.create(); diff --git a/server/src/services/person.service.ts b/server/src/services/person.service.ts index fb04ace4f2..fde5313f4d 100644 --- a/server/src/services/person.service.ts +++ b/server/src/services/person.service.ts @@ -631,7 +631,11 @@ export class PersonService extends BaseService { this.requireAccess({ auth, permission: Permission.PersonRead, ids: [dto.personId] }), ]); - const asset = await this.assetRepository.getById(dto.assetId, { edits: true, exifInfo: true }); + const [asset, person] = await Promise.all([ + this.assetRepository.getById(dto.assetId, { edits: true, exifInfo: true }), + this.findOrFail(dto.personId), + ]); + if (!asset) { throw new NotFoundException('Asset not found'); } @@ -689,6 +693,10 @@ export class PersonService extends BaseService { boundingBoxY2: Math.round(bottomRight.y), sourceType: SourceType.Manual, }); + + if (!person.faceAssetId) { + await this.createNewFeaturePhoto([person.id]); + } } async deleteFace(auth: AuthDto, id: string, dto: AssetFaceDeleteDto): Promise { diff --git a/server/test/medium/specs/services/person.service.spec.ts b/server/test/medium/specs/services/person.service.spec.ts index 4cd705b5bd..39805580f6 100644 --- a/server/test/medium/specs/services/person.service.spec.ts +++ b/server/test/medium/specs/services/person.service.spec.ts @@ -5,6 +5,7 @@ import { AccessRepository } from 'src/repositories/access.repository'; import { AssetEditRepository } from 'src/repositories/asset-edit.repository'; import { AssetRepository } from 'src/repositories/asset.repository'; import { DatabaseRepository } from 'src/repositories/database.repository'; +import { JobRepository } from 'src/repositories/job.repository'; import { LoggingRepository } from 'src/repositories/logging.repository'; import { PersonRepository } from 'src/repositories/person.repository'; import { StorageRepository } from 'src/repositories/storage.repository'; @@ -20,7 +21,7 @@ const setup = (db?: Kysely) => { return newMediumService(PersonService, { database: db || defaultDatabase, real: [AccessRepository, DatabaseRepository, PersonRepository, AssetRepository, AssetEditRepository], - mock: [LoggingRepository, StorageRepository], + mock: [JobRepository, LoggingRepository, StorageRepository], }); }; @@ -89,6 +90,7 @@ describe(PersonService.name, () => { const { person } = await ctx.newPerson({ ownerId: user.id }); const { asset } = await ctx.newAsset({ id: factory.uuid(), ownerId: user.id, width: 200, height: 200 }); await ctx.newExif({ assetId: asset.id, exifImageHeight: 200, exifImageWidth: 200 }); + ctx.getMock(JobRepository).queueAll.mockResolvedValue(); const auth = factory.auth({ user }); @@ -128,6 +130,7 @@ describe(PersonService.name, () => { const { person } = await ctx.newPerson({ ownerId: user.id }); const { asset } = await ctx.newAsset({ id: factory.uuid(), ownerId: user.id, width: 150, height: 200 }); await ctx.newExif({ assetId: asset.id, exifImageHeight: 200, exifImageWidth: 200 }); + ctx.getMock(JobRepository).queueAll.mockResolvedValue(); await ctx.newEdits(asset.id, { edits: [ @@ -199,6 +202,7 @@ describe(PersonService.name, () => { const { person } = await ctx.newPerson({ ownerId: user.id }); const { asset } = await ctx.newAsset({ id: factory.uuid(), ownerId: user.id, width: 100, height: 200 }); await ctx.newExif({ assetId: asset.id, exifImageWidth: 200, exifImageHeight: 100 }); + ctx.getMock(JobRepository).queueAll.mockResolvedValue(); await ctx.newEdits(asset.id, { edits: [ @@ -263,6 +267,7 @@ describe(PersonService.name, () => { const { person } = await ctx.newPerson({ ownerId: user.id }); const { asset } = await ctx.newAsset({ id: factory.uuid(), ownerId: user.id, width: 200, height: 100 }); await ctx.newExif({ assetId: asset.id, exifImageHeight: 100, exifImageWidth: 200 }); + ctx.getMock(JobRepository).queueAll.mockResolvedValue(); await ctx.newEdits(asset.id, { edits: [ @@ -327,6 +332,7 @@ describe(PersonService.name, () => { const { person } = await ctx.newPerson({ ownerId: user.id }); const { asset } = await ctx.newAsset({ id: factory.uuid(), ownerId: user.id, width: 200, height: 150 }); await ctx.newExif({ assetId: asset.id, exifImageHeight: 200, exifImageWidth: 200 }); + ctx.getMock(JobRepository).queueAll.mockResolvedValue(); await ctx.newEdits(asset.id, { edits: [ @@ -400,6 +406,7 @@ describe(PersonService.name, () => { const { person } = await ctx.newPerson({ ownerId: user.id }); const { asset } = await ctx.newAsset({ id: factory.uuid(), ownerId: user.id, width: 150, height: 100 }); await ctx.newExif({ assetId: asset.id, exifImageHeight: 100, exifImageWidth: 200 }); + ctx.getMock(JobRepository).queueAll.mockResolvedValue(); await ctx.newEdits(asset.id, { edits: [ @@ -473,6 +480,7 @@ describe(PersonService.name, () => { const { person } = await ctx.newPerson({ ownerId: user.id }); const { asset } = await ctx.newAsset({ id: factory.uuid(), ownerId: user.id, width: 200, height: 150 }); await ctx.newExif({ assetId: asset.id, exifImageHeight: 200, exifImageWidth: 150 }); + ctx.getMock(JobRepository).queueAll.mockResolvedValue(); await ctx.newEdits(asset.id, { edits: [ @@ -543,6 +551,7 @@ describe(PersonService.name, () => { const { person } = await ctx.newPerson({ ownerId: user.id }); const { asset } = await ctx.newAsset({ id: factory.uuid(), ownerId: user.id, width: 150, height: 100 }); await ctx.newExif({ assetId: asset.id, exifImageHeight: 200, exifImageWidth: 200 }); + ctx.getMock(JobRepository).queueAll.mockResolvedValue(); await ctx.newEdits(asset.id, { edits: [ @@ -622,6 +631,7 @@ describe(PersonService.name, () => { const { person } = await ctx.newPerson({ ownerId: user.id }); const { asset } = await ctx.newAsset({ id: factory.uuid(), ownerId: user.id, width: 100, height: 100 }); await ctx.newExif({ assetId: asset.id, exifImageHeight: 100, exifImageWidth: 100 }); + ctx.getMock(JobRepository).queueAll.mockResolvedValue(); await ctx.newEdits(asset.id, { edits: [ @@ -692,6 +702,7 @@ describe(PersonService.name, () => { const { person } = await ctx.newPerson({ ownerId: user.id }); const { asset } = await ctx.newAsset({ id: factory.uuid(), ownerId: user.id, width: 100, height: 100 }); await ctx.newExif({ assetId: asset.id, exifImageHeight: 200, exifImageWidth: 100, orientation: '6' }); + ctx.getMock(JobRepository).queueAll.mockResolvedValue(); await ctx.newEdits(asset.id, { edits: [ diff --git a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte index 8f7103c2a3..2418e5bf85 100644 --- a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte +++ b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte @@ -2,6 +2,7 @@ import { shortcut } from '$lib/actions/shortcut'; import ImageThumbnail from '$lib/components/assets/thumbnail/image-thumbnail.svelte'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; + import FaceCreateTagModal from '$lib/modals/CreateFaceModal.svelte'; import { getPeopleThumbnailUrl } from '$lib/utils'; import { getNaturalSize, scaleToFit } from '$lib/utils/container-utils'; import { handleError } from '$lib/utils/handle-error'; @@ -260,6 +261,44 @@ }; }; + type FaceCoordinates = NonNullable>; + + const getFacePreviewUrl = (data: FaceCoordinates) => { + if (!htmlElement) { + return; + } + + const natural = getNaturalSize(htmlElement); + if (natural.width <= 0 || natural.height <= 0) { + return; + } + + const x = clamp(data.x, 0, natural.width - 1); + const y = clamp(data.y, 0, natural.height - 1); + const width = clamp(data.width, 1, natural.width - x); + const height = clamp(data.height, 1, natural.height - y); + + if (width <= 0 || height <= 0) { + return; + } + + const canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + + const context = canvas.getContext('2d'); + if (!context) { + return; + } + + try { + context.drawImage(htmlElement, x, y, width, height, 0, 0, width, height); + return canvas.toDataURL('image/png'); + } catch { + return; + } + }; + const tagFace = async (person: PersonResponseDto) => { try { const data = getFaceCroppedCoordinates(); @@ -294,6 +333,28 @@ } }; + const showCreateFaceModal = async () => { + try { + const data = getFaceCroppedCoordinates(); + if (!data) { + return; + } + + const created = await modalManager.show(FaceCreateTagModal, { + assetId, + ...data, + previewUrl: getFacePreviewUrl(data), + }); + if (!created) { + return; + } + + onClose(); + } catch (error) { + handleError(error, 'Error creating and tagging face'); + } + }; + onDestroy(() => { onClose(); }); @@ -303,19 +364,19 @@
- +

{$t('select_person_to_tag')}

@@ -354,6 +415,12 @@ {/if}
- + + +
diff --git a/web/src/lib/modals/CreateFaceModal.svelte b/web/src/lib/modals/CreateFaceModal.svelte new file mode 100644 index 0000000000..fa845cba2d --- /dev/null +++ b/web/src/lib/modals/CreateFaceModal.svelte @@ -0,0 +1,91 @@ + + + + {$t('create_person_subtitle')} + {#if previewUrl} + +
+ {$t('preview')} + {#if isSubmitting} +
+ +
+ {/if} +
+
+ {/if} + + + + +
From c8ae99e7d7011dcb1074d51077f1a57526eec6d9 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Thu, 2 Apr 2026 15:19:24 -0400 Subject: [PATCH 088/156] fix: escape html (#27469) --- .../components/asset-viewer/photo-sphere-viewer-adapter.svelte | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/src/lib/components/asset-viewer/photo-sphere-viewer-adapter.svelte b/web/src/lib/components/asset-viewer/photo-sphere-viewer-adapter.svelte index d46b5e0dc1..12c4b45541 100644 --- a/web/src/lib/components/asset-viewer/photo-sphere-viewer-adapter.svelte +++ b/web/src/lib/components/asset-viewer/photo-sphere-viewer-adapter.svelte @@ -19,6 +19,7 @@ import { ResolutionPlugin } from '@photo-sphere-viewer/resolution-plugin'; import { SettingsPlugin } from '@photo-sphere-viewer/settings-plugin'; import '@photo-sphere-viewer/settings-plugin/index.css'; + import { escape } from 'lodash-es'; import { onDestroy, onMount } from 'svelte'; // Adapted as well as possible from classlist 'border-solid border-white border-3 rounded-lg' @@ -138,7 +139,7 @@ const fontSize = (1.4 * width) / box.text.length; // fits almost all strings within the box, depends on font family const transform = `matrix3d(${matrix.join(',')})`; - const content = `
${box.text}
`; + const content = `
${escape(box.text)}
`; if (updateOnly) { markersPlugin.updateMarker({ From adb6b39eec2b7b2372d268c237df4df11a3b3522 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Thu, 2 Apr 2026 17:49:26 -0400 Subject: [PATCH 089/156] fix: migrations (#27477) --- ...TrigramIndex.ts => 1775165531374-AddPersonNameTrigramIndex.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename server/src/schema/migrations/{1773846750001-AddPersonNameTrigramIndex.ts => 1775165531374-AddPersonNameTrigramIndex.ts} (100%) diff --git a/server/src/schema/migrations/1773846750001-AddPersonNameTrigramIndex.ts b/server/src/schema/migrations/1775165531374-AddPersonNameTrigramIndex.ts similarity index 100% rename from server/src/schema/migrations/1773846750001-AddPersonNameTrigramIndex.ts rename to server/src/schema/migrations/1775165531374-AddPersonNameTrigramIndex.ts From db0f86c749b5dea2b3514def933819cbdedc91a9 Mon Sep 17 00:00:00 2001 From: Zack Pollard Date: Thu, 2 Apr 2026 23:32:26 +0100 Subject: [PATCH 090/156] feat: move version checks to our own infrastructure (#27450) --- i18n/ar.json | 2 +- i18n/be.json | 2 +- i18n/bg.json | 2 +- i18n/ca.json | 2 +- i18n/cs.json | 2 +- i18n/da.json | 2 +- i18n/de.json | 2 +- i18n/el.json | 2 +- i18n/en.json | 2 +- i18n/eo.json | 2 +- i18n/es.json | 2 +- i18n/et.json | 2 +- i18n/fa.json | 2 +- i18n/fi.json | 2 +- i18n/fr.json | 2 +- i18n/ga.json | 2 +- i18n/gl.json | 2 +- i18n/gsw.json | 2 +- i18n/he.json | 2 +- i18n/hi.json | 2 +- i18n/hr.json | 2 +- i18n/hu.json | 2 +- i18n/id.json | 2 +- i18n/is.json | 2 +- i18n/it.json | 2 +- i18n/ja.json | 2 +- i18n/kn.json | 2 +- i18n/ko.json | 2 +- i18n/lt.json | 2 +- i18n/lv.json | 2 +- i18n/ml.json | 2 +- i18n/mr.json | 2 +- i18n/ms.json | 2 +- i18n/nb_NO.json | 2 +- i18n/nl.json | 2 +- i18n/pl.json | 2 +- i18n/pt.json | 2 +- i18n/pt_BR.json | 2 +- i18n/ro.json | 2 +- i18n/ru.json | 2 +- i18n/sk.json | 2 +- i18n/sl.json | 2 +- i18n/sr_Cyrl.json | 2 +- i18n/sr_Latn.json | 2 +- i18n/sv.json | 2 +- i18n/ta.json | 2 +- i18n/te.json | 2 +- i18n/th.json | 2 +- i18n/tr.json | 2 +- i18n/uk.json | 2 +- i18n/vi.json | 2 +- i18n/zh_Hans.json | 2 +- i18n/zh_Hant.json | 2 +- server/src/app.module.ts | 3 +++ .../src/repositories/server-info.repository.ts | 13 +++++++++---- server/src/services/version.service.spec.ts | 17 ++++++----------- server/src/services/version.service.ts | 3 +-- server/src/utils/fetch.spec.ts | 18 ++++++++++++++++++ server/src/utils/fetch.ts | 12 ++++++++++++ .../NewVersionCheckSettings.svelte | 2 +- .../onboarding-server-privacy.svelte | 2 +- 61 files changed, 104 insertions(+), 72 deletions(-) create mode 100644 server/src/utils/fetch.spec.ts create mode 100644 server/src/utils/fetch.ts diff --git a/i18n/ar.json b/i18n/ar.json index 3834d76a5f..b9672916eb 100644 --- a/i18n/ar.json +++ b/i18n/ar.json @@ -441,7 +441,7 @@ "user_successfully_removed": "المستخدم {email} تمت ازالته بنجاح.", "users_page_description": "صفحة ادارة المستخدمين", "version_check_enabled_description": "تفعيل التحقق من الإصدارات الجديدة", - "version_check_implications": "تعتمد ميزة التحقق من الإصدار على التواصل الدوري مع github.com", + "version_check_implications": "تعتمد ميزة التحقق من الإصدار على التواصل الدوري مع {server}", "version_check_settings": "التحقق من الإصدار", "version_check_settings_description": "تفعيل/تعطيل الإشعار لإصدار جديد", "video_conversion_job": "تحويل أشرطة الفيديو", diff --git a/i18n/be.json b/i18n/be.json index 2605a382b1..ed66c4e1b3 100644 --- a/i18n/be.json +++ b/i18n/be.json @@ -239,7 +239,7 @@ "user_settings": "Налады карыстальніка", "user_settings_description": "Кіраванне наладамі карыстальніка", "version_check_enabled_description": "Уключыць праверку версіі", - "version_check_implications": "Функцыя праверкі версіі перыядычна звяртаецца да github.com", + "version_check_implications": "Функцыя праверкі версіі перыядычна звяртаецца да {server}", "version_check_settings": "Праверка версіі", "version_check_settings_description": "Уключыць/адключыць апавяшчэнні аб новай версіі" }, diff --git a/i18n/bg.json b/i18n/bg.json index 4e64363267..2a832c5bd7 100644 --- a/i18n/bg.json +++ b/i18n/bg.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Потребител {email} е успешно премахнат.", "users_page_description": "Страница за администриране на потребители", "version_check_enabled_description": "Активирай проверка на версията", - "version_check_implications": "Функцията за проверка на версията разчита на периодична комуникация с github.com", + "version_check_implications": "Функцията за проверка на версията разчита на периодична комуникация с {server}", "version_check_settings": "Проверка на версията", "version_check_settings_description": "Активирайте/деактивирайте известието за нова версия", "video_conversion_job": "Транскодиране на видеоклиповете", diff --git a/i18n/ca.json b/i18n/ca.json index fbd6c5840f..99af12e01b 100644 --- a/i18n/ca.json +++ b/i18n/ca.json @@ -441,7 +441,7 @@ "user_successfully_removed": "L'usuari {email} s'ha eliminat correctament.", "users_page_description": "Pàgina d'usuaris de l'administrador", "version_check_enabled_description": "Activa la comprovació de la versió", - "version_check_implications": "La funció de comprovació de versions depèn de comunicacions periòdiques amb github.com", + "version_check_implications": "La funció de comprovació de versions depèn de comunicacions periòdiques amb {server}", "version_check_settings": "Comprovació de versió", "version_check_settings_description": "Activa/desactiva la notificació de nova versió", "video_conversion_job": "Transcodificació de vídeos", diff --git a/i18n/cs.json b/i18n/cs.json index 363e568331..f23100b582 100644 --- a/i18n/cs.json +++ b/i18n/cs.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Uživatel {email} byl úspěšně odstraněn.", "users_page_description": "Stránka správců", "version_check_enabled_description": "Povolit kontrolu verzí", - "version_check_implications": "Kontrola verze je založena na pravidelné komunikaci s github.com", + "version_check_implications": "Kontrola verze je založena na pravidelné komunikaci s {server}", "version_check_settings": "Kontrola verze", "version_check_settings_description": "Povolení/zakázání oznámení o nové verzi", "video_conversion_job": "Překódování videí", diff --git a/i18n/da.json b/i18n/da.json index 1eafb3d827..b234deb2fb 100644 --- a/i18n/da.json +++ b/i18n/da.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Bruger {email} er blevet fjernet med succes.", "users_page_description": "Admin-brugere side", "version_check_enabled_description": "Aktivér versionstjek", - "version_check_implications": "Funktionen til versionstjek er afhængig af periodisk kommunikation med github.com", + "version_check_implications": "Funktionen til versionstjek er afhængig af periodisk kommunikation med {server}", "version_check_settings": "Versionstjek", "version_check_settings_description": "Aktiver/deaktiverer notifikation for den nye version", "video_conversion_job": "Transkod videoer", diff --git a/i18n/de.json b/i18n/de.json index a6b2a844c4..10f920a788 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Der Benutzer {email} wurde erfolgreich entfernt.", "users_page_description": "Administrator-Benutzerseite", "version_check_enabled_description": "Versionsprüfung aktivieren", - "version_check_implications": "Die Funktion zur Versionsprüfung basiert auf regelmäßiger Kommunikation mit GitHub.com", + "version_check_implications": "Die Funktion zur Versionsprüfung basiert auf regelmäßiger Kommunikation mit {server}", "version_check_settings": "Versionsprüfung", "version_check_settings_description": "Aktivieren/Deaktivieren der Benachrichtigung über neue Versionen", "video_conversion_job": "Videos transkodieren", diff --git a/i18n/el.json b/i18n/el.json index 851a4edb27..a991151155 100644 --- a/i18n/el.json +++ b/i18n/el.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Ο χρήστης {email} αφαιρέθηκε με επιτυχία.", "users_page_description": "Σελίδα χρηστών διαχειριστή", "version_check_enabled_description": "Ενεργοποίηση ελέγχου έκδοσης", - "version_check_implications": "Η λειτουργία ελέγχου έκδοσης, εξαρτάται από την περιοδική επικοινωνία με το github.com", + "version_check_implications": "Η λειτουργία ελέγχου έκδοσης, εξαρτάται από την περιοδική επικοινωνία με το {server}", "version_check_settings": "Έλεγχος εκδοσης", "version_check_settings_description": "Ενεργοποίηση/απενεργοποίηση της ειδοποίησης για νέα έκδοση", "video_conversion_job": "Μετατροπή βίντεο", diff --git a/i18n/en.json b/i18n/en.json index 29af88b5b0..4f2922f35d 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -441,7 +441,7 @@ "user_successfully_removed": "User {email} has been successfully removed.", "users_page_description": "Admin users page", "version_check_enabled_description": "Enable version check", - "version_check_implications": "The version check feature relies on periodic communication with github.com", + "version_check_implications": "The version check feature relies on periodic communication with {server}", "version_check_settings": "Version Check", "version_check_settings_description": "Enable/disable the new version notification", "video_conversion_job": "Transcode videos", diff --git a/i18n/eo.json b/i18n/eo.json index 8e89e960c4..310962fc48 100644 --- a/i18n/eo.json +++ b/i18n/eo.json @@ -441,7 +441,7 @@ "user_successfully_removed": "La uzanto {email} estas forigita.", "users_page_description": "Paĝo por administri uzantojn", "version_check_enabled_description": "Ebligi kontrolon de versio", - "version_check_implications": "La funkcio de kontrolado de versio bezonas de temp' al tempan komunikadon kun github.com", + "version_check_implications": "La funkcio de kontrolado de versio bezonas de temp' al tempan komunikadon kun {server}", "version_check_settings": "Kontrolo de versio", "version_check_settings_description": "Ŝalti/malŝalti atentigilon pri novaj versioj", "video_conversion_job": "Transkodado de videoj", diff --git a/i18n/es.json b/i18n/es.json index fe82e3a093..a9a9194941 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -441,7 +441,7 @@ "user_successfully_removed": "El usuario {email} ha sido eliminado con éxito.", "users_page_description": "Página de usuarios administradores", "version_check_enabled_description": "Activar la comprobación de la versión", - "version_check_implications": "La función de comprobación de versiones depende de la comunicación periódica con github.com", + "version_check_implications": "La función de comprobación de versiones depende de la comunicación periódica con {server}", "version_check_settings": "Verificar versión", "version_check_settings_description": "Activar/desactivar la notificación de nueva versión", "video_conversion_job": "Transcodificar vídeos", diff --git a/i18n/et.json b/i18n/et.json index f2726add15..12265a4e97 100644 --- a/i18n/et.json +++ b/i18n/et.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Kasutaja {email} edukalt eemaldatud.", "users_page_description": "Kasutajate haldamise leht", "version_check_enabled_description": "Luba versioonikontroll", - "version_check_implications": "Versioonikontroll vajab perioodilist ühendumist github.com-iga", + "version_check_implications": "Versioonikontroll vajab perioodilist ühendumist {server}-iga", "version_check_settings": "Versioonikontroll", "version_check_settings_description": "Luba/keela uue versiooni teavitus", "video_conversion_job": "Videote transkodeerimine", diff --git a/i18n/fa.json b/i18n/fa.json index e7d681d92f..39f098e3e6 100644 --- a/i18n/fa.json +++ b/i18n/fa.json @@ -365,7 +365,7 @@ "user_successfully_removed": "کاربر {email} با موفقیت حذف شد.", "users_page_description": "صفحه مدیریت کاربران", "version_check_enabled_description": "فعال‌سازی بررسی نسخه", - "version_check_implications": "ویژگی بررسی نسخه به ارتباط دوره ای با github.com متکی است", + "version_check_implications": "ویژگی بررسی نسخه به ارتباط دوره ای با {server} متکی است", "version_check_settings": "بررسی نسخه", "version_check_settings_description": "فعال یا غیرفعال کردن اعلان نسخه جدید", "video_conversion_job": "تبدیل (رمزگذاری) ویدیوها", diff --git a/i18n/fi.json b/i18n/fi.json index 084540324a..43edbb68e2 100644 --- a/i18n/fi.json +++ b/i18n/fi.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Käyttäjä {email} on poistettu onnistuneesti.", "users_page_description": "Ylläpitäjän käyttäjien lista", "version_check_enabled_description": "Ota käyttöön versiotarkastus", - "version_check_implications": "Versiotarkistus vaatii säännöllisen yhteyden github.comiin", + "version_check_implications": "Versiotarkistus vaatii säännöllisen yhteyden {server}iin", "version_check_settings": "Versiotarkistus", "version_check_settings_description": "Ota käyttöön ilmoitukset, kun uusi versio on saatavilla", "video_conversion_job": "Transkoodaa videot", diff --git a/i18n/fr.json b/i18n/fr.json index ddbbe1dd13..ba5c64f12a 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -441,7 +441,7 @@ "user_successfully_removed": "L'utilisateur {email} a été supprimé avec succès.", "users_page_description": "Page d'administration des utilisateurs", "version_check_enabled_description": "Activer la vérification périodique de nouvelle version", - "version_check_implications": "Le contrôle de version repose sur une communication périodique avec github.com", + "version_check_implications": "Le contrôle de version repose sur une communication périodique avec {server}", "version_check_settings": "Vérification de la version", "version_check_settings_description": "Gérer la vérification de nouvelle version d'Immich", "video_conversion_job": "Transcodage des vidéos", diff --git a/i18n/ga.json b/i18n/ga.json index 8cdcf03fbe..46eb6e90a7 100644 --- a/i18n/ga.json +++ b/i18n/ga.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Baineadh an t-úsáideoir {email} go rathúil.", "users_page_description": "Leathanach úsáideoirí riarthóra", "version_check_enabled_description": "Cumasaigh seiceáil leagan", - "version_check_implications": "Braitheann an ghné seiceála leagan ar chumarsáid thréimhsiúil le github.com", + "version_check_implications": "Braitheann an ghné seiceála leagan ar chumarsáid thréimhsiúil le {server}", "version_check_settings": "Seiceáil Leagan", "version_check_settings_description": "Cumasaigh/díchumasaigh an fógra faoin leagan nua", "video_conversion_job": "Físeáin Traschódaithe", diff --git a/i18n/gl.json b/i18n/gl.json index 63faaec9a8..22cc4b9692 100644 --- a/i18n/gl.json +++ b/i18n/gl.json @@ -441,7 +441,7 @@ "user_successfully_removed": "O usuario {email} foi eliminado satisfactoriamente.", "users_page_description": "Páxina de usuarios administradores", "version_check_enabled_description": "Activar comprobación de versión", - "version_check_implications": "A función de comprobación de versión depende da comunicación periódica con github.com", + "version_check_implications": "A función de comprobación de versión depende da comunicación periódica con {server}", "version_check_settings": "Comprobación de Versión", "version_check_settings_description": "Activar/desactivar a notificación de nova versión", "video_conversion_job": "Transcodificar vídeos", diff --git a/i18n/gsw.json b/i18n/gsw.json index bad2816ad9..4df40f233b 100644 --- a/i18n/gsw.json +++ b/i18n/gsw.json @@ -422,7 +422,7 @@ "user_successfully_removed": "Dr Benutzer {email} isch erfolgrich entfernt worde.", "users_page_description": "Administrator-Benutzersiite", "version_check_enabled_description": "Versionsprüefig akivierä", - "version_check_implications": "D’Funktion zur Versionsprüefig basiert uf regelmässiger Kommunikazion mit GitHub.com", + "version_check_implications": "D’Funktion zur Versionsprüefig basiert uf regelmässiger Kommunikazion mit {server}", "version_check_settings": "Versionsprüefig", "version_check_settings_description": "Aktiviere/Deaktivier d’Benochrichtigung über neui Versione", "video_conversion_job": "Videos transkodiere", diff --git a/i18n/he.json b/i18n/he.json index 629f8166cb..81d577d21a 100644 --- a/i18n/he.json +++ b/i18n/he.json @@ -441,7 +441,7 @@ "user_successfully_removed": "המשתמש {email} הוסר בהצלחה.", "users_page_description": "עמוד ניהול משתמשים", "version_check_enabled_description": "אפשר בדיקת גרסה", - "version_check_implications": "תכונת בדיקת הגרסה מסתמכת על תקשורת תקופתית עם github.com", + "version_check_implications": "תכונת בדיקת הגרסה מסתמכת על תקשורת תקופתית עם {server}", "version_check_settings": "בדיקת גרסה", "version_check_settings_description": "הפעל/השבת את ההתראה על גרסה חדשה", "video_conversion_job": "המרת קידוד סרטונים", diff --git a/i18n/hi.json b/i18n/hi.json index c7d439e5a0..bce419160e 100644 --- a/i18n/hi.json +++ b/i18n/hi.json @@ -441,7 +441,7 @@ "user_successfully_removed": "उपयोगकर्ता {email} को सफलतापूर्वक हटा दिया गया है।", "users_page_description": "प्रशासक (Admin) उपयोगकर्ता पेज", "version_check_enabled_description": "नई रिलीज़ की जाँच के लिए GitHub पर आवधिक अनुरोध सक्षम करें", - "version_check_implications": "संस्करण जाँच सुविधा github.com के साथ आवधिक संचार पर निर्भर करती है", + "version_check_implications": "संस्करण जाँच सुविधा {server} के साथ आवधिक संचार पर निर्भर करती है", "version_check_settings": "संस्करण चेक", "version_check_settings_description": "नए संस्करण अधिसूचना को सक्षम/अक्षम करें", "video_conversion_job": "ट्रांसकोड वीडियो", diff --git a/i18n/hr.json b/i18n/hr.json index 3337235102..259ee2fd8a 100644 --- a/i18n/hr.json +++ b/i18n/hr.json @@ -429,7 +429,7 @@ "user_settings": "Korisničke postavke", "user_settings_description": "Upravljanje korisničkim postavkama", "version_check_enabled_description": "Omogući provjeru verzije", - "version_check_implications": "Značajka provjere verzije oslanja se na periodičnu komunikaciju s github.com", + "version_check_implications": "Značajka provjere verzije oslanja se na periodičnu komunikaciju s {server}", "version_check_settings": "Provjera verzije", "version_check_settings_description": "Omogućite/onemogućite obavijest o novoj verziji", "video_conversion_job": "Transkodiranje videozapisa", diff --git a/i18n/hu.json b/i18n/hu.json index 2521d21922..b7fca103f6 100644 --- a/i18n/hu.json +++ b/i18n/hu.json @@ -441,7 +441,7 @@ "user_successfully_removed": "{email} felhasználó sikeresen eltávolítva.", "users_page_description": "Admin felhasználók oldala", "version_check_enabled_description": "Új verziók elérhetőségének ellenőrzése", - "version_check_implications": "Az új verziók ellenőrzése időszakos kommunikációt igényel a github.com oldallal", + "version_check_implications": "Az új verziók ellenőrzése időszakos kommunikációt igényel a {server} oldallal", "version_check_settings": "Verzió ellenőrzés", "version_check_settings_description": "Az új verzióról való értesítés be- és kikapcsolása", "video_conversion_job": "Videók Átkódolása", diff --git a/i18n/id.json b/i18n/id.json index cae842d1c6..7ab487f25a 100644 --- a/i18n/id.json +++ b/i18n/id.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Pengguna {email} berhasil dihapus.", "users_page_description": "Halaman pengguna admin", "version_check_enabled_description": "Aktifkan pemeriksaan versi", - "version_check_implications": "Fitur pemeriksaan versi tergantung pada komunikasi berkala dengan github.com", + "version_check_implications": "Fitur pemeriksaan versi tergantung pada komunikasi berkala dengan {server}", "version_check_settings": "Pemeriksaan Versi", "version_check_settings_description": "Aktifkan/nonaktifkan notifikasi versi baru", "video_conversion_job": "Transkode video", diff --git a/i18n/is.json b/i18n/is.json index a355b71661..7d15b0fd69 100644 --- a/i18n/is.json +++ b/i18n/is.json @@ -421,7 +421,7 @@ "user_successfully_removed": "Notandi {email} hefur verið fjarlægður.", "users_page_description": "Síða stjórnunarnotanda", "version_check_enabled_description": "Virkja athugun á útgáfu", - "version_check_implications": "Þessi athugun hefur lotubundin samskipti við github.com", + "version_check_implications": "Þessi athugun hefur lotubundin samskipti við {server}", "version_check_settings": "Athugun útgáfu", "version_check_settings_description": "Af-/virkja meldingu um nýja útgáfu", "video_conversion_job": "Umkóða myndbönd", diff --git a/i18n/it.json b/i18n/it.json index 75e230654b..f540e1893b 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -441,7 +441,7 @@ "user_successfully_removed": "L'utente {email} è stato rimosso con successo.", "users_page_description": "Pagina utenti (admin)", "version_check_enabled_description": "Abilita controllo della versione", - "version_check_implications": "La funzione di controllo della versione fa uso di una comunicazione periodica con github.com", + "version_check_implications": "La funzione di controllo della versione fa uso di una comunicazione periodica con {server}", "version_check_settings": "Controllo Versione", "version_check_settings_description": "Abilita/disabilita la notifica per nuove versioni", "video_conversion_job": "Transcodifica video", diff --git a/i18n/ja.json b/i18n/ja.json index cd98b391ef..17dd8c1f48 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -441,7 +441,7 @@ "user_successfully_removed": "ユーザー {email} は正常に削除されました。", "users_page_description": "管理者用 ユーザー ページ", "version_check_enabled_description": "バージョンの確認を有効にする", - "version_check_implications": "このバージョン確認機能は定期的なgithub.comとの通信によります", + "version_check_implications": "このバージョン確認機能は定期的な{server}との通信によります", "version_check_settings": "バージョンチェック", "version_check_settings_description": "新しいバージョンの通知を有効/無効にします", "video_conversion_job": "動画をトランスコード", diff --git a/i18n/kn.json b/i18n/kn.json index 16079d48bf..12e7f0918b 100644 --- a/i18n/kn.json +++ b/i18n/kn.json @@ -439,7 +439,7 @@ "user_successfully_removed": "ಬಳಕೆದಾರ {email} ಅವರನ್ನು ಯಶಸ್ವಿಯಾಗಿ ತೆಗೆದುಹಾಕಲಾಗಿದೆ.", "users_page_description": "ನಿರ್ವಾಹಕ ಬಳಕೆದಾರರ ಪುಟ", "version_check_enabled_description": "ಆವೃತ್ತಿ ಪರಿಶೀಲನೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ", - "version_check_implications": "ಆವೃತ್ತಿ ಪರಿಶೀಲನೆ ವೈಶಿಷ್ಟ್ಯವು github.com ನೊಂದಿಗೆ ಆವರ್ತಕ ಸಂವಹನವನ್ನು ಅವಲಂಬಿಸಿದೆ", + "version_check_implications": "ಆವೃತ್ತಿ ಪರಿಶೀಲನೆ ವೈಶಿಷ್ಟ್ಯವು {server} ನೊಂದಿಗೆ ಆವರ್ತಕ ಸಂವಹನವನ್ನು ಅವಲಂಬಿಸಿದೆ", "version_check_settings": "ಆವೃತ್ತಿ ಪರಿಶೀಲನೆ", "version_check_settings_description": "ಹೊಸ ಆವೃತ್ತಿಯ ಅಧಿಸೂಚನೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ/ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ", "video_conversion_job": "ವೀಡಿಯೊಗಳನ್ನು ಟ್ರಾನ್ಸ್‌ಕೋಡ್ ಮಾಡಿ", diff --git a/i18n/ko.json b/i18n/ko.json index 22d5d1b8a6..e17b3a4693 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -441,7 +441,7 @@ "user_successfully_removed": "사용자 {email}님이 성공적으로 삭제되었습니다.", "users_page_description": "관리자 사용자 페이지", "version_check_enabled_description": "버전 확인 활성화", - "version_check_implications": "주기적으로 Github에 요청을 보내 새 버전을 확인합니다.", + "version_check_implications": "주기적으로 {server}에 요청을 보내 새 버전을 확인합니다.", "version_check_settings": "버전 확인", "version_check_settings_description": "새 버전 확인 및 알림 기능을 관리합니다.", "video_conversion_job": "동영상 트랜스코드", diff --git a/i18n/lt.json b/i18n/lt.json index 5675673317..1e652d14ac 100644 --- a/i18n/lt.json +++ b/i18n/lt.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Naudotojas {email} sėkmingai pašalintas.", "users_page_description": "Administratorių vartotojų puslapis", "version_check_enabled_description": "Įgalinti versijų tikrinimą", - "version_check_implications": "Versijų tikrinimas reikalauja periodiškos komunikacijos su github.com", + "version_check_implications": "Versijų tikrinimas reikalauja periodiškos komunikacijos su {server}", "version_check_settings": "Versijos tikrinimas", "version_check_settings_description": "Įjungti/išjungti naujos versijos pranešimus", "video_conversion_job": "Vaizdo įrašų konvertavimas", diff --git a/i18n/lv.json b/i18n/lv.json index 59b5dea657..f9e37722e3 100644 --- a/i18n/lv.json +++ b/i18n/lv.json @@ -402,7 +402,7 @@ "user_settings": "Lietotāja iestatījumi", "user_settings_description": "Lietotāju iestatījumu pārvaldība", "version_check_enabled_description": "Ieslēgt versijas pārbaudi", - "version_check_implications": "Versiju pārbaudes funkcija ir atkarīga no periodiskas saziņas ar github.com", + "version_check_implications": "Versiju pārbaudes funkcija ir atkarīga no periodiskas saziņas ar {server}", "version_check_settings": "Versijas pārbaude", "version_check_settings_description": "Ieslēgt/izslēgt paziņojumus par jaunu versiju" }, diff --git a/i18n/ml.json b/i18n/ml.json index f6d170623a..2a4d54b4af 100644 --- a/i18n/ml.json +++ b/i18n/ml.json @@ -420,7 +420,7 @@ "user_settings": "ഉപയോക്താവിന്റെ ക്രമീകരണങ്ങൾ", "user_settings_description": "ഉപയോക്തൃ ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", "version_check_enabled_description": "പതിപ്പ് പരിശോധന പ്രവർത്തനക്ഷമമാക്കുക", - "version_check_implications": "പതിപ്പ് പരിശോധന ഫീച്ചർ github.com-മായി ആനുകാലിക ആശയവിനിമയത്തെ ആശ്രയിച്ചിരിക്കുന്നു", + "version_check_implications": "പതിപ്പ് പരിശോധന ഫീച്ചർ {server}-മായി ആനുകാലിക ആശയവിനിമയത്തെ ആശ്രയിച്ചിരിക്കുന്നു", "version_check_settings": "പതിപ്പ് പരിശോധന", "version_check_settings_description": "പുതിയ പതിപ്പിന്റെ അറിയിപ്പ് പ്രവർത്തനക്ഷമമാക്കുക/പ്രവർത്തനരഹിതമാക്കുക", "video_conversion_job": "വീഡിയോകൾ ട്രാൻസ്‌കോഡ് ചെയ്യുക", diff --git a/i18n/mr.json b/i18n/mr.json index cbeac5131f..1a6fa4adc9 100644 --- a/i18n/mr.json +++ b/i18n/mr.json @@ -408,7 +408,7 @@ "user_settings": "वापरकर्ता सेटिंग्ज", "user_settings_description": "वापरकर्ता सेटिंग्ज व्यवस्थापित करा", "version_check_enabled_description": "आवृत्ती तपासणी सक्षम करा", - "version_check_implications": "आवृत्ती तपासणी वैशिष्ट्य GitHub.com सोबत आवर्ती संवादावर अवलंबून आहे", + "version_check_implications": "आवृत्ती तपासणी वैशिष्ट्य {server} सोबत आवर्ती संवादावर अवलंबून आहे", "version_check_settings": "आवृत्ती तपासणी", "version_check_settings_description": "नवीन आवृत्ती सूचना सक्षम/अक्षम करा", "video_conversion_job": "व्हिडिओ ट्रान्सकोड करा", diff --git a/i18n/ms.json b/i18n/ms.json index 0c1ae6c156..705919bff8 100644 --- a/i18n/ms.json +++ b/i18n/ms.json @@ -393,7 +393,7 @@ "user_settings": "Tetapan Pengguna", "user_settings_description": "Urus tetapan pengguna", "version_check_enabled_description": "Dayakan semakan versi", - "version_check_implications": "Ciri semakan versi bergantung kepada komunikasi berkala dengan github.com", + "version_check_implications": "Ciri semakan versi bergantung kepada komunikasi berkala dengan {server}", "version_check_settings": "Semakan Versi", "version_check_settings_description": "Dayakan/nyahdayakan notifikasi versi baharu", "video_conversion_job": "Transkod video", diff --git a/i18n/nb_NO.json b/i18n/nb_NO.json index 4de7864811..6b2c3862c3 100644 --- a/i18n/nb_NO.json +++ b/i18n/nb_NO.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Bruker {email} har blitt fjernet.", "users_page_description": "Administrer brukere", "version_check_enabled_description": "Aktiver periodiske forespørsler til GitHub for å sjekke etter nye utgivelser", - "version_check_implications": "Versjonssjekkfunksjonen baserer seg på periodisk kommunikasjon med github.com", + "version_check_implications": "Versjonssjekkfunksjonen baserer seg på periodisk kommunikasjon med {server}", "version_check_settings": "Versjonssjekk", "version_check_settings_description": "Aktiver/deaktiver varsel om ny versjon", "video_conversion_job": "Transkod videoer", diff --git a/i18n/nl.json b/i18n/nl.json index 89daa4bee5..e38ef7bd7a 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Gebruiker {email} is succesvol verwijderd.", "users_page_description": "Gebruikers­pagina voor administrators", "version_check_enabled_description": "Versiecontrole inschakelen", - "version_check_implications": "De versiecontrole is afhankelijk van periodieke communicatie met github.com", + "version_check_implications": "De versiecontrole is afhankelijk van periodieke communicatie met {server}", "version_check_settings": "Versiecontrole", "version_check_settings_description": "Melding voor een nieuwe versie in-/uitschakelen", "video_conversion_job": "Transcodeer video's", diff --git a/i18n/pl.json b/i18n/pl.json index d123d17077..507781c79a 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Użytkownik {email} został pomyślnie usunięty.", "users_page_description": "Strona administracyjna do zarządzania użytkownikami", "version_check_enabled_description": "Włącz sprawdzanie wersji", - "version_check_implications": "Funkcja sprawdzania wersji opiera się na okresowej komunikacji z github.com", + "version_check_implications": "Funkcja sprawdzania wersji opiera się na okresowej komunikacji z {server}", "version_check_settings": "Sprawdzenie Wersji", "version_check_settings_description": "Włącz/wyłącz powiadomienia o nowej wersji", "video_conversion_job": "Transkodowanie wideo", diff --git a/i18n/pt.json b/i18n/pt.json index e4822f12ff..f5794b482e 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -441,7 +441,7 @@ "user_successfully_removed": "O utilizador {email} foi removido com sucesso.", "users_page_description": "Página de administador de utilizadores", "version_check_enabled_description": "Ativa verificação de novas versões", - "version_check_implications": "A funcionalidade de verificação da versão necessita de comunicação periódica com o github.com", + "version_check_implications": "A funcionalidade de verificação da versão necessita de comunicação periódica com o {server}", "version_check_settings": "Verificação de versão", "version_check_settings_description": "Ativar/desativar a notificação de nova versão", "video_conversion_job": "Transcodificar vídeos", diff --git a/i18n/pt_BR.json b/i18n/pt_BR.json index b35fa25b4b..cade2bb400 100644 --- a/i18n/pt_BR.json +++ b/i18n/pt_BR.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Usuário {email} foi removido com sucesso.", "users_page_description": "Página de usuários Admin", "version_check_enabled_description": "Ativa a verificação de versão", - "version_check_implications": "A verificação de versão depende de uma comunicação periódica com github.com", + "version_check_implications": "A verificação de versão depende de uma comunicação periódica com {server}", "version_check_settings": "Verificação de versão", "version_check_settings_description": "Ativar/desativar a notificação de nova versão", "video_conversion_job": "Transcodificar vídeos", diff --git a/i18n/ro.json b/i18n/ro.json index 9e097b4d20..947da3de4d 100644 --- a/i18n/ro.json +++ b/i18n/ro.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Utilizatorul {email} a fost șters cu succes.", "users_page_description": "Pagina utilizatorilor administratori", "version_check_enabled_description": "Activează verificarea versiunii", - "version_check_implications": "Funcția de verificare a versiunii se bazează pe comunicarea periodică cu github.com", + "version_check_implications": "Funcția de verificare a versiunii se bazează pe comunicarea periodică cu {server}", "version_check_settings": "Verificare versiune", "version_check_settings_description": "Activeazǎ/dezactiveazǎ notificarea unei noi versiuni", "video_conversion_job": "Transcodați videoclipuri", diff --git a/i18n/ru.json b/i18n/ru.json index d1958d76e6..c5c8b9b39c 100644 --- a/i18n/ru.json +++ b/i18n/ru.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Пользователь {email} успешно удален.", "users_page_description": "Управление пользователями системы", "version_check_enabled_description": "Включить проверку наличия новых версий", - "version_check_implications": "Функция проверки версии периодически обращается к сайту github.com", + "version_check_implications": "Функция проверки версии периодически обращается к сайту {server}", "version_check_settings": "Проверка версии", "version_check_settings_description": "Включить/отключить уведомление о новой версии", "video_conversion_job": "Перекодирование видео", diff --git a/i18n/sk.json b/i18n/sk.json index 6235815c2b..7f25d21b7c 100644 --- a/i18n/sk.json +++ b/i18n/sk.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Používateľ {email} bol úspešne odstránený.", "users_page_description": "Stránka používateľov pre správcu", "version_check_enabled_description": "Povoliť kontrolu verzie", - "version_check_implications": "Funkcia kontroly verzie sa spolieha na pravidelnú komunikáciu s github.com", + "version_check_implications": "Funkcia kontroly verzie sa spolieha na pravidelnú komunikáciu s {server}", "version_check_settings": "Kontrola verzie", "version_check_settings_description": "Povoliť/zakázať upozornenia na novú verziu", "video_conversion_job": "Prekódovať videá", diff --git a/i18n/sl.json b/i18n/sl.json index ce24a71fd3..53452866dc 100644 --- a/i18n/sl.json +++ b/i18n/sl.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Uporabnik {email} je bil uspešno odstranjen.", "users_page_description": "Stran skrbniških uporabnikov", "version_check_enabled_description": "Omogoči preverjanje različice", - "version_check_implications": "Funkcija preverjanja različic se opira na občasno komunikacijo z github.com", + "version_check_implications": "Funkcija preverjanja različic se opira na občasno komunikacijo z {server}", "version_check_settings": "Preverjanje različice", "version_check_settings_description": "Omogoči/onemogoči obvestilo o novi različici", "video_conversion_job": "Prekodiranje videoposnetkov", diff --git a/i18n/sr_Cyrl.json b/i18n/sr_Cyrl.json index 00fc4b3087..7840b1c810 100644 --- a/i18n/sr_Cyrl.json +++ b/i18n/sr_Cyrl.json @@ -370,7 +370,7 @@ "user_settings": "Подешавања корисника", "user_settings_description": "Управљајте корисничким подешавањима", "version_check_enabled_description": "Омогући проверу нових издања", - "version_check_implications": "Функција провере верзије се ослања на периодичну комуникацију са гитхуб.цом", + "version_check_implications": "Функција провере верзије се ослања на периодичну комуникацију са {server}", "version_check_settings": "Провера верзије", "version_check_settings_description": "Омогући/онемогући обавештење о новој верзији", "video_conversion_job": "Транскодирање видео записа", diff --git a/i18n/sr_Latn.json b/i18n/sr_Latn.json index d09e1a1abf..8747fdeb83 100644 --- a/i18n/sr_Latn.json +++ b/i18n/sr_Latn.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Korisnik {email} je uspešno uklonjen.", "users_page_description": "Stranica administratorskih korisnika", "version_check_enabled_description": "Omogućite proveru novih izdanja", - "version_check_implications": "Funkcija provere verzije se oslanja na periodičnu komunikaciju sa github.com", + "version_check_implications": "Funkcija provere verzije se oslanja na periodičnu komunikaciju sa {server}", "version_check_settings": "Provera verzije", "version_check_settings_description": "Omogućite/onemogućite obaveštenje o novoj verziji", "video_conversion_job": "Transkodiranje video zapisa", diff --git a/i18n/sv.json b/i18n/sv.json index 82c2398b02..ab1067529f 100644 --- a/i18n/sv.json +++ b/i18n/sv.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Användaren {email} har tagits bort.", "users_page_description": "Administratörsanvändare", "version_check_enabled_description": "Aktivera versionskontroll", - "version_check_implications": "Funktionen för versionskontroll är beroende av periodisk kommunikation med github.com", + "version_check_implications": "Funktionen för versionskontroll är beroende av periodisk kommunikation med {server}", "version_check_settings": "Versionskontroll", "version_check_settings_description": "Aktivera/inaktivera notis om ny version", "video_conversion_job": "Omkoda videor", diff --git a/i18n/ta.json b/i18n/ta.json index f33c148fd5..1f9b981ff3 100644 --- a/i18n/ta.json +++ b/i18n/ta.json @@ -426,7 +426,7 @@ "user_successfully_removed": "பயனர் {email} வெற்றிகரமாக அகற்றப்பட்டது.", "users_page_description": "நிர்வாக பயனர்கள் பக்கம்", "version_check_enabled_description": "பதிப்பு சரிபார்ப்பு இயக்கவும்", - "version_check_implications": "பதிப்பு சரிபார்ப்பு அம்சம் github .com உடனான அவ்வப்போது தொடர்புகொள்வதை நம்பியுள்ளது", + "version_check_implications": "பதிப்பு சரிபார்ப்பு அம்சம் {server} உடனான அவ்வப்போது தொடர்புகொள்வதை நம்பியுள்ளது", "version_check_settings": "பதிப்பு சோதனை", "version_check_settings_description": "புதிய பதிப்பு அறிவிப்பை இயக்கவும்/முடக்கவும்", "video_conversion_job": "டிரான்ச்கோட் வீடியோக்கள்", diff --git a/i18n/te.json b/i18n/te.json index 18b38069b4..73fbe25ac3 100644 --- a/i18n/te.json +++ b/i18n/te.json @@ -350,7 +350,7 @@ "user_settings": "వాడుకరి సెట్టింగ్‌లు", "user_settings_description": "వాడుకరి సెట్టింగ్‌లను నిర్వహించండి", "version_check_enabled_description": "వర్షన్ తనిఖీని చేయండి", - "version_check_implications": "వర్షన్ తనిఖీ ఫీచర్ github.comతో క్రమానుగత కమ్యూనికేషన్‌పై ఆధారపడుతుంది", + "version_check_implications": "వర్షన్ తనిఖీ ఫీచర్ {server}తో క్రమానుగత కమ్యూనికేషన్‌పై ఆధారపడుతుంది", "version_check_settings": "వర్షన్ తనిఖీ", "version_check_settings_description": "కొత్త వర్షన్ నోటిఫికేషన్‌ను ప్రారంభించండి/ఆపివేయండి", "video_conversion_job": "వీడియోలను ట్రాన్స్‌కోడ్ చేయండి", diff --git a/i18n/th.json b/i18n/th.json index f22c83dfb8..29c0b09628 100644 --- a/i18n/th.json +++ b/i18n/th.json @@ -422,7 +422,7 @@ "user_successfully_removed": "ลบผู้ใช้ {email} เสร็จสมบูรณ์แล้ว", "users_page_description": "หน้าผู้ใช้ผู้ดูแล", "version_check_enabled_description": "เช็ค GitHub เป็นระยะ ๆ เพื่อตรวจสอบรุ่นใหม่", - "version_check_implications": "การตรวจสอบเวอร์ชันใหม่จะต้องติดต่อกับ github.com เป็นระยะ", + "version_check_implications": "การตรวจสอบเวอร์ชันใหม่จะต้องติดต่อกับ {server} เป็นระยะ", "version_check_settings": "ตรวจสอบรุ่น", "version_check_settings_description": "เปิด/ปิดการแจ้งเตือนรุ่นใหม่", "video_conversion_job": "เข้ารหัสวีดีโอ (transcode)", diff --git a/i18n/tr.json b/i18n/tr.json index 66813d7d9d..afafe90647 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Kullanıcı {email} başarıyla kaldırıldı.", "users_page_description": "Yönetici kullanıcılar sayfası", "version_check_enabled_description": "Sürüm kontrolü etkin", - "version_check_implications": "Sürüm kontrol özelliği, github.com ile periyodik iletişime dayanır", + "version_check_implications": "Sürüm kontrol özelliği, {server} ile periyodik iletişime dayanır", "version_check_settings": "Sürüm Kontrolü", "version_check_settings_description": "Yeni sürüm bildirimini etkinleştir/devre dışı bırak", "video_conversion_job": "Videoları dönüştür", diff --git a/i18n/uk.json b/i18n/uk.json index 74647210c2..f1eb027637 100644 --- a/i18n/uk.json +++ b/i18n/uk.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Користувача {email} успішно видалено.", "users_page_description": "Сторінка адміністраторів", "version_check_enabled_description": "Увімкнути перевірку версії", - "version_check_implications": "Функція перевірки версії залежить від періодичної комунікації з github.com", + "version_check_implications": "Функція перевірки версії залежить від періодичної комунікації з {server}", "version_check_settings": "Перевірка версії", "version_check_settings_description": "Увімкнути/вимкнути сповіщення про нову версію", "video_conversion_job": "Перекодувати відео", diff --git a/i18n/vi.json b/i18n/vi.json index e9d5fb4006..06d73b91cf 100644 --- a/i18n/vi.json +++ b/i18n/vi.json @@ -441,7 +441,7 @@ "user_successfully_removed": "Người dùng {email} đã được xóa thành công.", "users_page_description": "Trang quản trị người dùng", "version_check_enabled_description": "Bật kiểm tra phiên bản", - "version_check_implications": "Tính năng kiểm tra phiên bản yêu cầu kết nối thường xuyên đến github.com", + "version_check_implications": "Tính năng kiểm tra phiên bản yêu cầu kết nối thường xuyên đến {server}", "version_check_settings": "Kiểm tra phiên bản", "version_check_settings_description": "Bật/tắt thông báo phiên bản mới", "video_conversion_job": "Chuyển mã video", diff --git a/i18n/zh_Hans.json b/i18n/zh_Hans.json index 2a85e2e3b7..58e41ffe00 100644 --- a/i18n/zh_Hans.json +++ b/i18n/zh_Hans.json @@ -441,7 +441,7 @@ "user_successfully_removed": "用户 {email} 已成功删除。", "users_page_description": "管理用户页面", "version_check_enabled_description": "检查软件新版本", - "version_check_implications": "版本检查功能依赖于与 github.com 的定期通信", + "version_check_implications": "版本检查功能依赖于与 {server} 的定期通信", "version_check_settings": "新版本检查", "version_check_settings_description": "启用/禁用新版本通知", "video_conversion_job": "转码视频", diff --git a/i18n/zh_Hant.json b/i18n/zh_Hant.json index a61b03c28c..4d5c60b583 100644 --- a/i18n/zh_Hant.json +++ b/i18n/zh_Hant.json @@ -441,7 +441,7 @@ "user_successfully_removed": "已成功刪除使用者 {email}。", "users_page_description": "管理使用者頁面", "version_check_enabled_description": "啟用版本檢查", - "version_check_implications": "版本檢查功能仰賴與 github.com 的定期通訊", + "version_check_implications": "版本檢查功能仰賴與 {server} 的定期通訊", "version_check_settings": "版本檢查", "version_check_settings_description": "啟用 / 停用新版本通知", "video_conversion_job": "影片轉碼", diff --git a/server/src/app.module.ts b/server/src/app.module.ts index b59317577f..f2b6a7e805 100644 --- a/server/src/app.module.ts +++ b/server/src/app.module.ts @@ -37,6 +37,7 @@ import { CliService } from 'src/services/cli.service'; import { DatabaseBackupService } from 'src/services/database-backup.service'; import { QueueService } from 'src/services/queue.service'; import { getKyselyConfig } from 'src/utils/database'; +import { configureUserAgent } from 'src/utils/fetch'; const common = [...repositories, ...services, GlobalExceptionFilter]; @@ -60,6 +61,8 @@ const commonImports = [ const bullImports = [BullModule.forRoot(bull.config), BullModule.registerQueue(...bull.queues)]; +configureUserAgent(); + export class BaseModule implements OnModuleInit, OnModuleDestroy { constructor( @Inject(IWorker) private worker: ImmichWorker, diff --git a/server/src/repositories/server-info.repository.ts b/server/src/repositories/server-info.repository.ts index 934706d5e1..b072ccf406 100644 --- a/server/src/repositories/server-info.repository.ts +++ b/server/src/repositories/server-info.repository.ts @@ -17,6 +17,11 @@ export interface GitHubRelease { body: string; } +export interface VersionResponse { + version: string; + published_at: string; +} + export interface ServerBuildVersions { nodejs: string; ffmpeg: string; @@ -59,17 +64,17 @@ export class ServerInfoRepository { this.logger.setContext(ServerInfoRepository.name); } - async getGitHubRelease(): Promise { + async getLatestRelease(): Promise { try { - const response = await fetch('https://api.github.com/repos/immich-app/immich/releases/latest'); + const response = await fetch('https://version.immich.cloud/version'); if (!response.ok) { - throw new Error(`GitHub API request failed with status ${response.status}: ${await response.text()}`); + throw new Error(`Version check request failed with status ${response.status}: ${await response.text()}`); } return response.json(); } catch (error) { - throw new Error('Failed to fetch GitHub release', { cause: error }); + throw new Error('Failed to fetch latest release', { cause: error }); } } diff --git a/server/src/services/version.service.spec.ts b/server/src/services/version.service.spec.ts index eacae928eb..75b6552d09 100644 --- a/server/src/services/version.service.spec.ts +++ b/server/src/services/version.service.spec.ts @@ -8,14 +8,9 @@ import { mockEnvData } from 'test/repositories/config.repository.mock'; import { factory } from 'test/small.factory'; import { newTestService, ServiceMocks } from 'test/utils'; -const mockRelease = (version: string) => ({ - id: 1, - url: 'https://api.github.com/repos/owner/repo/releases/1', - tag_name: version, - name: 'Release 1000', - created_at: DateTime.utc().toISO(), +const mockVersionResponse = (version: string) => ({ + version, published_at: DateTime.utc().toISO(), - body: '', }); describe(VersionService.name, () => { @@ -101,7 +96,7 @@ describe(VersionService.name, () => { }); it('should run if it has been > 60 minutes', async () => { - mocks.serverInfo.getGitHubRelease.mockResolvedValue(mockRelease('v100.0.0')); + mocks.serverInfo.getLatestRelease.mockResolvedValue(mockVersionResponse('v100.0.0')); mocks.systemMetadata.get.mockResolvedValue({ checkedAt: DateTime.utc().minus({ minutes: 65 }).toISO(), releaseVersion: '1.0.0', @@ -113,7 +108,7 @@ describe(VersionService.name, () => { }); it('should not notify if the version is equal', async () => { - mocks.serverInfo.getGitHubRelease.mockResolvedValue(mockRelease(serverVersion.toString())); + mocks.serverInfo.getLatestRelease.mockResolvedValue(mockVersionResponse(serverVersion.toString())); await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Success); expect(mocks.systemMetadata.set).toHaveBeenCalledWith(SystemMetadataKey.VersionCheckState, { checkedAt: expect.any(String), @@ -122,8 +117,8 @@ describe(VersionService.name, () => { expect(mocks.websocket.clientBroadcast).not.toHaveBeenCalled(); }); - it('should handle a github error', async () => { - mocks.serverInfo.getGitHubRelease.mockRejectedValue(new Error('GitHub is down')); + it('should handle a version check error', async () => { + mocks.serverInfo.getLatestRelease.mockRejectedValue(new Error('Version service is down')); await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Failed); expect(mocks.systemMetadata.set).not.toHaveBeenCalled(); expect(mocks.websocket.clientBroadcast).not.toHaveBeenCalled(); diff --git a/server/src/services/version.service.ts b/server/src/services/version.service.ts index fc51481cad..8f0ceb1d87 100644 --- a/server/src/services/version.service.ts +++ b/server/src/services/version.service.ts @@ -91,8 +91,7 @@ export class VersionService extends BaseService { } } - const { tag_name: releaseVersion, published_at: publishedAt } = - await this.serverInfoRepository.getGitHubRelease(); + const { version: releaseVersion, published_at: publishedAt } = await this.serverInfoRepository.getLatestRelease(); const metadata: VersionCheckMetadata = { checkedAt: DateTime.utc().toISO(), releaseVersion }; await this.systemMetadataRepository.set(SystemMetadataKey.VersionCheckState, metadata); diff --git a/server/src/utils/fetch.spec.ts b/server/src/utils/fetch.spec.ts new file mode 100644 index 0000000000..2189e6f626 --- /dev/null +++ b/server/src/utils/fetch.spec.ts @@ -0,0 +1,18 @@ +import { serverVersion } from 'src/constants'; +import { configureUserAgent } from 'src/utils/fetch'; + +describe('fetch', () => { + it('should set the default user-agent header', async () => { + const spy = vi.fn().mockResolvedValue(new Response()); + const original = globalThis.fetch; + globalThis.fetch = spy; + + configureUserAgent(); + await globalThis.fetch('http://test.local'); + + const headers: Headers = spy.mock.calls[0][1].headers; + expect(headers.get('User-Agent')).toBe(`immich-server/${serverVersion}`); + + globalThis.fetch = original; + }); +}); diff --git a/server/src/utils/fetch.ts b/server/src/utils/fetch.ts new file mode 100644 index 0000000000..e753b29725 --- /dev/null +++ b/server/src/utils/fetch.ts @@ -0,0 +1,12 @@ +import { serverVersion } from 'src/constants'; + +export function configureUserAgent() { + const originalFetch = globalThis.fetch; + globalThis.fetch = (input, init) => { + const headers = new Headers(init?.headers); + if (!headers.has('User-Agent')) { + headers.set('User-Agent', `immich-server/${serverVersion}`); + } + return originalFetch(input, { ...init, headers }); + }; +} diff --git a/web/src/lib/components/admin-settings/NewVersionCheckSettings.svelte b/web/src/lib/components/admin-settings/NewVersionCheckSettings.svelte index d8a79d6236..1e791c0b78 100644 --- a/web/src/lib/components/admin-settings/NewVersionCheckSettings.svelte +++ b/web/src/lib/components/admin-settings/NewVersionCheckSettings.svelte @@ -16,7 +16,7 @@
diff --git a/web/src/lib/components/onboarding-page/onboarding-server-privacy.svelte b/web/src/lib/components/onboarding-page/onboarding-server-privacy.svelte index c299d0bc35..e1c4d9765d 100644 --- a/web/src/lib/components/onboarding-page/onboarding-server-privacy.svelte +++ b/web/src/lib/components/onboarding-page/onboarding-server-privacy.svelte @@ -24,7 +24,7 @@ />
From 8e414e42f3f31836eac83169a78c79b76da348ac Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Fri, 3 Apr 2026 01:04:17 +0200 Subject: [PATCH 091/156] chore(web): update translations (#27029) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: -J- Co-authored-by: Aindriú Mac Giolla Eoin Co-authored-by: André Nøbbe Christiansen Co-authored-by: Arif Budiman Co-authored-by: Chao En, Kuo Co-authored-by: Cornelius Christiansen Co-authored-by: David Kurniawan Co-authored-by: DevServs Co-authored-by: Deyan Stamboliev Co-authored-by: Fatah Rokbi Co-authored-by: Felipe Gomes Co-authored-by: Fjuro Co-authored-by: Francesco Miccoli Co-authored-by: Frank Paul Silye Co-authored-by: Gideon Wentink Co-authored-by: HackingAll Co-authored-by: Hakan Co-authored-by: Hans Cats Co-authored-by: Happy <59247878+happy2452354@users.noreply.github.com> Co-authored-by: Hosted Weblate user 85894 Co-authored-by: Hurricane_32 Co-authored-by: Indrek Haav Co-authored-by: Indrek Haav Co-authored-by: Ivan Dimitrov Co-authored-by: Jarek Iwanus Co-authored-by: Jeppe Nellemann Co-authored-by: JiZPaper Co-authored-by: Joseph Co-authored-by: Jozef Gaal Co-authored-by: Link Notig Co-authored-by: Marin Čorkalo Co-authored-by: Marwan Jalaleddine Co-authored-by: Matjaž T. Co-authored-by: Matthias Hirsch Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com> Co-authored-by: Niklas Trautwein Co-authored-by: Olaf Nielsen Co-authored-by: Oleksandr Yurov Co-authored-by: Oscar Guillén Co-authored-by: PigeonPeak Co-authored-by: PontusÖsterlindh Co-authored-by: Psycho Co-authored-by: Roi Gabay Co-authored-by: Runskrift Co-authored-by: Sepehr Behroozi Co-authored-by: Shimul Roy Co-authored-by: Skanda Co-authored-by: Sylvain Pichon Co-authored-by: Szymon Kucharski Co-authored-by: TA Co-authored-by: TV Box Co-authored-by: Tage Lauritsen Co-authored-by: Tim Morley Co-authored-by: UDP Co-authored-by: Vegard Fladby Co-authored-by: Xo Co-authored-by: Yllelder Co-authored-by: anton garcias Co-authored-by: bittin1ddc447d824349b2 Co-authored-by: bural Co-authored-by: chamdim Co-authored-by: dacx910 Co-authored-by: dark fury Co-authored-by: dark&white Co-authored-by: dvbthien Co-authored-by: fabiosequeira Co-authored-by: josu. Co-authored-by: kylo32 Co-authored-by: millallo Co-authored-by: muziqaz Co-authored-by: pcnc Co-authored-by: pyccl Co-authored-by: pythoncontroller Co-authored-by: stefano trubian Co-authored-by: waclaw66 Co-authored-by: walpeDEV Co-authored-by: தமிழ்நேரம் Co-authored-by: 藍焰-0Blue_Yan0 --- i18n/af.json | 13 + i18n/ar.json | 10 +- i18n/bg.json | 23 +- i18n/bn.json | 305 +++++- i18n/ca.json | 23 +- i18n/cs.json | 18 +- i18n/da.json | 24 +- i18n/de.json | 76 +- i18n/el.json | 14 +- i18n/eo.json | 487 +++++++++- i18n/es.json | 22 +- i18n/et.json | 18 +- i18n/eu.json | 45 +- i18n/fa.json | 20 + i18n/fi.json | 4 - i18n/fr.json | 14 +- i18n/ga.json | 18 +- i18n/gl.json | 14 +- i18n/gsw.json | 4 - i18n/he.json | 35 +- i18n/hi.json | 4 - i18n/hr.json | 82 +- i18n/hu.json | 15 +- i18n/id.json | 14 +- i18n/it.json | 11 +- i18n/ja.json | 66 +- i18n/ka.json | 67 +- i18n/kn.json | 464 ++++++++- i18n/ko.json | 4 - i18n/lt.json | 17 +- i18n/lv.json | 4 - i18n/ml.json | 4 - i18n/mr.json | 4 - i18n/ms.json | 6 +- i18n/nb_NO.json | 27 +- i18n/nl.json | 18 +- i18n/pl.json | 26 +- i18n/pt.json | 15 +- i18n/pt_BR.json | 9 +- i18n/ro.json | 11 +- i18n/ru.json | 16 +- i18n/sk.json | 18 +- i18n/sl.json | 14 +- i18n/sr_Cyrl.json | 4 - i18n/sr_Latn.json | 4 - i18n/sv.json | 122 +-- i18n/ta.json | 254 ++++- i18n/te.json | 4 - i18n/th.json | 4 - i18n/tr.json | 25 +- i18n/uk.json | 2311 ++++++++++++++++++++++---------------------- i18n/vi.json | 22 +- i18n/yue_Hant.json | 5 +- i18n/zh_Hans.json | 698 ++++++------- i18n/zh_Hant.json | 48 +- 55 files changed, 3632 insertions(+), 1972 deletions(-) diff --git a/i18n/af.json b/i18n/af.json index e641c07b21..95919bb1dc 100644 --- a/i18n/af.json +++ b/i18n/af.json @@ -178,6 +178,17 @@ "stop_motion_photo": "Stop bewegingsfoto", "stop_photo_sharing": "Staak die deel van u foto’s?", "stop_photo_sharing_description": "{partner} sal nie meer toegang tot u foto’s hê nie.", + "unnamed_share": "Naamlose deelskakel", + "unsaved_change": "Onbewaarde verandering", + "unselect_all": "Ontkies alles", + "unselect_all_duplicates": "Ontkies alle duplikate", + "unselect_all_in": "Ontkies alles in {group}", + "unstack": "Ontstapel", + "unstack_action_prompt": "{count} ongestapel", + "unstacked_assets_count": "{count, plural, one {# item} other {# items}} ontstapel", + "unsupported_field_type": "Onondersteunde veldtipe", + "unsupported_file_type": "Lêer {file} kan nie opgelaai word nie omdat die lêertipe {type} nie ondersteun word nie.", + "untagged": "Sonder etiket", "untitled_workflow": "Naamlose werkvloei", "up_next": "Volgende", "update_location_action_prompt": "Werk die ligging van {count} gekose items by met:", @@ -187,6 +198,7 @@ "upload_concurrency": "Aantal gelyktydige oplaaie", "upload_details": "Oplaaidetails", "upload_dialog_info": "Wil u ’n rugsteun maak van die gekose item(s) op die bediener?", + "upload_dialog_title": "Laai item op", "upload_error_with_count": "Oplaaifout vir {count, plural, one {# item} other {# items}}", "upload_errors": "Oplaai voltooi met {count, plural, one {# fout} other {# foute}}, verfris die blad om die nuwe items te sien.", "upload_finished": "Klaar opgelaai", @@ -257,6 +269,7 @@ "viewer_remove_from_stack": "Verwyder van stapel", "viewer_stack_use_as_main_asset": "Gebruik as hoofitem", "viewer_unstack": "Ontstapel", + "visibility": "Sigbaarheid", "visibility_changed": "Sigbaarheid verander vir {count, plural, one {# mens} other {# mense}}", "visual": "Visueel", "visual_builder": "Visuele bouer", diff --git a/i18n/ar.json b/i18n/ar.json index b9672916eb..801d8a7663 100644 --- a/i18n/ar.json +++ b/i18n/ar.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "تم الاصلاح", "crop_aspect_ratio_free": "حر", "crop_aspect_ratio_original": "اصلي", + "crop_aspect_ratio_square": "مربع", "curated_object_page_title": "أشياء", "current_device": "الجهاز الحالي", "current_pin_code": "رمز PIN الحالي", @@ -880,7 +881,7 @@ "daily_title_text_date": "E ، MMM DD", "daily_title_text_date_year": "E ، MMM DD ، yyyy", "dark": "معتم", - "dark_theme": "تبديل المظهر الداكن", + "dark_theme": "تبديل المظهر إلى الداكن", "date": "تاريخ", "date_after": "التارخ بعد", "date_and_time": "التاريخ و الوقت", @@ -891,10 +892,6 @@ "day": "يوم", "days": "ايام", "deduplicate_all": "إلغاء تكرار الكل", - "deduplication_criteria_1": "حجم الصورة بوحدات البايت", - "deduplication_criteria_2": "عدد بيانات EXIF", - "deduplication_info": "معلومات إلغاء البيانات المكررة", - "deduplication_info_description": "لتحديد الأصول مسبقا تلقائيا وإزالة التكرارات بكميات كبيرة، ننظر إلى:", "delete": "حذف", "delete_action_confirmation_message": "هل انت متأكد من حذف هذا الملف؟ هذا سؤدي الى نقل الملف الى سلة مهملات الخادم وسيتم اشعارك ان كنت تريد حذفه على الجهاز", "delete_action_prompt": "تم حذف {count}", @@ -970,7 +967,7 @@ "downloading_media": "تنزيل الوسائط", "drop_files_to_upload": "قم بإسقاط الملفات في أي مكان لرفعها", "duplicates": "التكرارات", - "duplicates_description": "قم بحل كل مجموعة من خلال الإشارة إلى التكرارات، إن وجدت", + "duplicates_description": "قم بحل كل مجموعة من خلال الإشارة إلى التكرارات، إن وجدت.", "duration": "المدة", "edit": "تعديل", "edit_album": "تعديل الألبوم", @@ -1651,6 +1648,7 @@ "only_favorites": "المفضلة فقط", "open": "فتح", "open_calendar": "افتح الرزنامة", + "open_in_browser": "فتح في متصفح", "open_in_map_view": "فتح في عرض الخريطة", "open_in_openstreetmap": "فتح في OpenStreetMap", "open_the_search_filters": "افتح مرشحات البحث", diff --git a/i18n/bg.json b/i18n/bg.json index 2a832c5bd7..60b91cee64 100644 --- a/i18n/bg.json +++ b/i18n/bg.json @@ -333,7 +333,7 @@ "storage_template_migration_description": "Прилагане на текущия {template} към предишно качените файлове", "storage_template_migration_info": "Шаблона ще преобразува всички разширения на имената на файловете в долен регистър. Промените в шаблоните ще се прилагат само за нови елементи. За да приложите принудително шаблона към вече качени елементи, изпълнете {job}.", "storage_template_migration_job": "Задача за миграция на шаблона за съхранение", - "storage_template_more_details": "За повече подробности относно тази функция се обърнете към шаблона Storage Template и неговите последствия ", + "storage_template_more_details": "За повече подробности относно тази функция се обърнете към шаблона Storage Template и неговите последствия", "storage_template_onboarding_description_v2": "Когато е разрешена, тази функция ще организира автоматично файловете, според шаблон, дефиниран от потребителя. За допълнителна информация, моля вижте документацията.", "storage_template_path_length": "Ограничение на дължината на пътя: {length, number}/{limit, number}", "storage_template_settings": "Шаблон за съхранение", @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Фиксиран", "crop_aspect_ratio_free": "Свободен", "crop_aspect_ratio_original": "Оригинален", + "crop_aspect_ratio_square": "Квадрат", "curated_object_page_title": "Неща", "current_device": "Текущо устройство", "current_pin_code": "Сегашен PIN код", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM yyyy", "dark": "Тъмен", - "dark_theme": "Тъмна тема", + "dark_theme": "Премини към тъмна тема", "date": "Дата", "date_after": "Дата след", "date_and_time": "Дата и час", @@ -891,10 +892,8 @@ "day": "Ден", "days": "Дни", "deduplicate_all": "Дедупликиране на всички", - "deduplication_criteria_1": "Размер на снимката в байтове", - "deduplication_criteria_2": "Брой EXIF данни", - "deduplication_info": "Информация за дедупликацията", - "deduplication_info_description": "За автоматично предварително избиране на ресурси и премахване на дубликати на едро, разглеждаме:", + "default_locale": "Език по подразбиране", + "default_locale_description": "Формат на дата и числа според езиковата настройка на браузъра", "delete": "Изтрий", "delete_action_confirmation_message": "Сигурни ли сте, че искате да изтриете този обект? Следва преместване на обекта в коша за отпадъци на сървъра и ще получите предложение обекта да бъде изтрит локално", "delete_action_prompt": "{count} са изтрити", @@ -970,7 +969,7 @@ "downloading_media": "Изтегляне на медия", "drop_files_to_upload": "Пуснете файловете, за да ги качите", "duplicates": "Дубликати", - "duplicates_description": "Изберете всяка група, като посочите кои, ако има такива, са дубликати", + "duplicates_description": "Изберете всяка група, като посочите кои, ако има такива, са дубликати.", "duration": "Продължителност", "edit": "Редактиране", "edit_album": "Редактиране на албум", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Заглавие на албума", "licenses": "Лицензи", "light": "Светло", + "light_theme": "Премини към светла тема", "like": "Харесайте", "like_deleted": "Като изтрит", "link_motion_video": "Линк към видео", + "link_to_docs": "За повече информация вижте документацията.", "link_to_oauth": "Линк към OAuth", "linked_oauth_account": "Свързан OAuth акаунт", "list": "Лист", @@ -1651,13 +1652,14 @@ "only_favorites": "Само любими", "open": "Отвори", "open_calendar": "Отвори календар", + "open_in_browser": "Отвори в браузър", "open_in_map_view": "Отвори изглед на карта", "open_in_openstreetmap": "Отвори в OpenStreetMap", "open_the_search_filters": "Отвари филтрите за търсене", "options": "Настройки", "or": "или", - "organize_into_albums": "Organitzar per àlbums", - "organize_into_albums_description": "Posar les fotos existents dins dels àlbums fent servir la configuració de sincronització", + "organize_into_albums": "Подредете в албуми", + "organize_into_albums_description": "Добавете наличните снимки в албуми, като използвате текущите настройки за синхронизиране", "organize_your_library": "Организиране на вашата библиотека", "original": "оригинал", "other": "Други", @@ -1805,7 +1807,7 @@ "purchase_server_description_2": "Статус на поддръжник", "purchase_server_title": "Сървър", "purchase_settings_server_activated": "Продуктовият ключ на сървъра се управлява от администратора", - "query_asset_id": "Buscar item per ID", + "query_asset_id": "Търсене на елемент по ID", "queue_status": "В опашка {count} от {total}", "rate_asset": "Задаване на рейтинг", "rating": "Оценка със звезди", @@ -2393,6 +2395,7 @@ "viewer_remove_from_stack": "Премахване от опашката", "viewer_stack_use_as_main_asset": "Използвай като основен", "viewer_unstack": "Премахни от опашката", + "visibility": "Видимост", "visibility_changed": "Видимостта е променена за {count, plural, one {# човек} other {# човека}}", "visual": "Визуален", "visual_builder": "Визуален конструктор", diff --git a/i18n/bn.json b/i18n/bn.json index 4580ca5551..dcc6834323 100644 --- a/i18n/bn.json +++ b/i18n/bn.json @@ -231,6 +231,8 @@ "metadata_settings_description": "মেটাডেটা সেটিংস পরিচালনা করুন (Manage metadata settings)", "migration_job": "মাইগ্রেশন (Migration)", "migration_job_description": "অ্যাসেট এবং ফেস থাম্বনেইলগুলোকে সর্বশেষ ফোল্ডার স্ট্রাকচারে মাইগ্রেট করুন। (Migrate thumbnails for assets and faces to the latest folder structure)", + "nightly_tasks_cluster_faces_setting_description": "নতুন শনাক্ত হওয়া মুখগুলিতে ফেসিয়াল রিকগনিশন চালান", + "nightly_tasks_cluster_new_faces_setting": "নতুন মুখগুলোর গুচ্ছ", "nightly_tasks_database_cleanup_setting": "ডেটাবেস ক্লিনআপ টাস্কসমূহ (Database cleanup tasks)", "nightly_tasks_database_cleanup_setting_description": "ডেটাবেস থেকে পুরোনো এবং মেয়াদোত্তীর্ণ ডেটা মুছে ফেলুন", "nightly_tasks_generate_memories_setting": "মেমোরিজ তৈরি করুন (Generate memories)", @@ -257,6 +259,20 @@ "notification_email_secure": "SMTPS (স্মার্ট মেইল ট্রান্সফার প্রোটোকল সিকিউর)", "notification_email_secure_description": "SMTPS (SMTP over TLS) ব্যবহার করুন", "notification_email_sent_test_email_button": "টেস্ট ইমেল পাঠান এবং সেভ করুন", + "notification_email_setting_description": "ইমেল নোটিফিকেশন পাঠানোর সেটিংস", + "notification_email_test_email": "পরীক্ষামূলক ইমেইল পাঠান", + "notification_email_test_email_failed": "পরীক্ষামূলক ইমেল পাঠানো সম্ভব হয়নি, আপনার সেটিংস যাচাই করুন", + "notification_email_test_email_sent": "{email}-এ একটি পরীক্ষামূলক ইমেল পাঠানো হয়েছে। অনুগ্রহ করে আপনার ইনবক্স দেখুন।", + "notification_email_username_description": "ইমেল সার্ভারে ভেরিফিকেসনের জন্য ব্যবহৃত ইউজারনেম", + "notification_enable_email_notifications": "ইমেল নোটিফিকেসন সক্রিয় করুন", + "notification_settings": "নোটিফিকেসন সেটিংস", + "notification_settings_description": "ইমেইল সহ নোটিফিকেশন সেটিংস পরিচালনা করুন", + "oauth_auto_launch": "অটো লঞ্চ", + "oauth_auto_launch_description": "লগইন পেজে প্রবেশ করার সাথে সাথে OAuth লগইন প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে শুরু করুন", + "oauth_auto_register": "সয়ংক্রিয়ভাবে রেজিস্টার করুন", + "oauth_auto_register_description": "OAuth দিয়ে সাইন ইন করার পর নতুন ব্যবহারকারীদের স্বয়ংক্রিয়ভাবে নিবন্ধন করুন", + "oauth_button_text": "বাটন টেক্সট", + "oauth_client_secret_description": "গোপনীয় ক্লায়েন্টের জন্য প্রয়োজন, অথবা যদি পাবলিক ক্লায়েন্টের জন্য PKCE (Proof Key for Code Exchange) সমর্থিত না হয়।", "oauth_enable_description": "OAuth-এর মাধ্যমে লগইন করুন", "oauth_mobile_redirect_uri": "মোবাইল রিডাইরেক্ট ইউআরআই (URI)", "oauth_mobile_redirect_uri_override": "মোবাইল রিডাইরেক্ট ইউআরআই (URI) ওভাররাইড", @@ -323,6 +339,20 @@ "storage_template_settings": "স্টোরেজ টেমপ্লেট (Storage Template)", "storage_template_settings_description": "আপলোড করা অ্যাসেটের ফোল্ডার স্ট্রাকচার এবং ফাইল নেম ম্যানেজ করুন", "storage_template_user_label": "{label} হলো ব্যবহারকারীর স্টোরেজ লেবেল (Storage Label)", + "system_settings": "সিস্টেম সেটিংস", + "tag_cleanup_job": "ট্যাগ মুছে ফেলা", + "template_email_available_tags": "আপনি আপনার টেমপ্লেটে নিম্নলিখিত ভেরিয়েবলগুলো ব্যবহার করতে পারেন: {tags}", + "template_email_if_empty": "টেমপ্লেটটি খালি থাকলে ডিফল্ট ইমেল ব্যবহার করা হবে।", + "template_email_invite_album": "ইনভাইট অ্যালবাম টেমপ্লেট", + "template_email_preview": "প্রিভিউ", + "template_email_settings": "ইমেইল টেমপ্লেট", + "template_email_update_album": "অ্যালবাম টেমপ্লেট আপডেট করুন", + "template_email_welcome": "স্বাগতম ইমেইল টেমপ্লেট", + "template_settings": "নোটিফিকেশন টেমপ্লেট", + "template_settings_description": "নোটিফিকেশনের জন্য কাস্টম টেমপ্লেট পরিচালনা করুন", + "theme_custom_css_settings": "কাস্টম CSS", + "theme_custom_css_settings_description": "ক্যাসকেডিং স্টাইল শীট ব্যবহার করে Immich এর ডিজাইন কাস্টমাইজ করা যায়।", + "theme_settings": "থীম সেটিংস", "theme_settings_description": "ইমিচ (Immich) ওয়েব ইন্টারফেসের কাস্টমাইজেশন ম্যানেজ করুন", "thumbnail_generation_job": "থাম্বনেইল তৈরি করুন (Generate Thumbnails)", "thumbnail_generation_job_description": "প্রতিটি অ্যাসেটের জন্য বড়, ছোট এবং ব্লার (অস্পষ্ট) থাম্বনেইল তৈরি করুন, সেই সাথে প্রতিটি ব্যক্তির জন্যও থাম্বনেইল তৈরি করুন।", @@ -334,8 +364,281 @@ "transcoding_acceleration_vaapi": "VA-API (ভিডিও অ্যাক্সিলারেশন এপিআই)", "transcoding_accepted_audio_codecs": "গ্রহণযোগ্য অডিও কোডেকসমূহ (Accepted audio codecs)", "transcoding_accepted_audio_codecs_description": "কোন অডিও কোডেকগুলো ট্রানসকোড করার প্রয়োজন নেই তা নির্বাচন করুন। এটি শুধুমাত্র নির্দিষ্ট ট্রানসকোড পলিসির (transcode policies) জন্য ব্যবহৃত হয়।", - "transcoding_accepted_containers": "গ্রহণযোগ্য কন্টেইনারসমূহ (Accepted containers)" + "transcoding_accepted_containers": "গ্রহণযোগ্য কন্টেইনারসমূহ (Accepted containers)", + "transcoding_accepted_containers_description": "কোন কন্টেইনার ফরম্যাটগুলোকে MP4-এ রিমুক্স করার প্রয়োজন নেই তা নির্বাচন করুন। শুধুমাত্র নির্দিষ্ট ট্রান্সকোড পলিসির জন্য ব্যবহৃত হয়।", + "transcoding_accepted_video_codecs": "সমর্থিত ভিডিও কোডেকগুলো", + "transcoding_accepted_video_codecs_description": "কোন ভিডিও কোডেকগুলো ট্রান্সকোড করার প্রয়োজন নেই তা নির্বাচন করুন। শুধুমাত্র নির্দিষ্ট ট্রান্সকোড নীতির জন্য ব্যবহৃত হয়।", + "transcoding_advanced_options_description": "বেশিরভাগ ব্যবহারকারীর পরিবর্তন করার প্রয়োজন নেই এমন অপশনসমূহ", + "transcoding_audio_codec": "অডিও কোডেক", + "transcoding_audio_codec_description": "Opus সর্বোচ্চ মানের অপশন, তবে পুরোনো ডিভাইস বা সফটওয়্যারের সাথে এর সামঞ্জস্য কম।", + "transcoding_bitrate_description": "সর্বোচ্চ বিটরেটের চেয়ে বেশি বা সমর্থিত ফরম্যাটে নয় এমন ভিডিও", + "transcoding_codecs_learn_more": "এখানে ব্যবহৃত পরিভাষা সম্পর্কে আরও জানতে FFmpeg ডকুমেন্টেশন দেখুন, H.264 কোডেক, HEVC কোডেক এবং VP9 কোডেক।", + "transcoding_constant_quality_mode": "নির্দিষ্ট মান মোড", + "transcoding_constant_quality_mode_description": "ICQ, CQP-এর চেয়ে ভালো মান দেয়, কিন্তু সব হার্ডওয়্যার অ্যাক্সেলারেশন ডিভাইসে কাজ করে না। এই অপশন চালু থাকলে কোয়ালিটি-ভিত্তিক এনকোডিংয়ে এটি প্রাধান্য পাবে। NVENC এটি সমর্থন করে না, তাই এটি উপেক্ষা করা হবে।", + "transcoding_constant_rate_factor": "নির্দিষ্ট রেট ফ্যাক্টর (-crf)", + "transcoding_constant_rate_factor_description": "ভিডিওর গুণমানের স্তর। সাধারণ মানগুলো হলো H.264-এর জন্য ২৩, HEVC-এর জন্য ২৮, VP9-এর জন্য ৩১ এবং AV1-এর জন্য ৩৫। মান যত কম হবে, ভিডিওর গুণমান তত উন্নত হবে, তবে ফাইলের আকার তত বড় হবে।", + "transcoding_disabled_description": "কোনো ভিডিও ট্রান্সকোড করবেন না, এতে কিছু ক্লায়েন্টে প্লেব্যাক নষ্ট হতে পারে", + "transcoding_encoding_options": "এনকোডিং এর অপশনগুলি", + "transcoding_encoding_options_description": "এনকোড করা ভিডিওগুলির জন্য কোডেক, রেজোলিউশন, কোয়ালিটি এবং অন্যান্য অপশন সেট করুন", + "transcoding_hardware_acceleration": "হার্ডওয়্যার এক্সিলারেসন (Acceleration)", + "transcoding_hardware_acceleration_description": "পরীক্ষামূলক: দ্রুততর ট্রান্সকোডিং, কিন্তু একই বিটরেটে গুণমান হ্রাস পেতে পারে", + "transcoding_hardware_decoding": "হার্ডওয়্যার ডিকোডিং", + "transcoding_hardware_decoding_setting_description": "শুধু এনকোডিং অ্যাক্সিলারেশন করার পরিবর্তে এটি এন্ড-টু-এন্ড অ্যাক্সিলারেশন সক্ষম করে। সব ভিডিওতে কাজ নাও করতে পারে।", + "transcoding_max_b_frames": "সর্বোচ্চ বি-ফ্রেম (B-frames)", + "transcoding_max_b_frames_description": "মান যত বেশি হবে, কমপ্রেশন তত ভালো হবে কিন্তু এনকোডিং ধীরে চলবে। পুরোনো ডিভাইসে হার্ডওয়্যার অ্যাক্সেলারেশন কাজ নাও করতে পারে। ০ দিলে B-frames বন্ধ থাকবে, -১ দিলে এটি নিজে থেকেই ঠিক হবে।", + "transcoding_max_bitrate": "সর্বোচ্চ বিটরেট", + "transcoding_max_bitrate_description": "সর্বোচ্চ বিটরেট নির্ধারণ করলে ফাইলের আকার আরও অনুমানযোগ্য হতে পারে, তবে এর ফলে কোয়ালিটির কিছুটা অবনতি ঘটে। 720p-তে, VP9 বা HEVC-এর জন্য সাধারণ মান হলো 2600 kbit/s, অথবা H.264-এর জন্য 4500 kbit/s।এর মান 0 সেট করা হলে এটি বন্ধ থাকে। যখন কোনো একক নির্দিষ্ট করা থাকে না, তখন k (kbit/s-এর জন্য) ধরে নেওয়া হয়; তাই 5000, 5000k, এবং 5M (Mbit/s-এর জন্য) সমতুল্য।", + "transcoding_max_keyframe_interval": "সর্বোচ্চ কীফ্রেম ব্যবধান", + "transcoding_max_keyframe_interval_description": "কীফ্রেমের মধ্যে সর্বোচ্চ ফ্রেম দূরত্ব নির্ধারণ করে। মান কম হলে কমপ্রেশন দক্ষতা কমে, তবে ভিডিওতে খুঁজে বের করা দ্রুত হয় এবং দ্রুত চলমান দৃশ্যে মানও কিছুটা ভালো হতে পারে। ০ দিলে এই মান স্বয়ংক্রিয়ভাবে নির্ধারিত হয়।", + "transcoding_optimal_description": "নির্দিষ্ট রেজোলিউশনের চেয়ে বড় বা সমর্থিত ফরম্যাটে নয় এমন ভিডিও", + "transcoding_policy": "ট্রান্সকোড নীতি", + "transcoding_policy_description": "ভিডিও কখন ট্রান্সকোড করা হবে তা সেট করুন", + "transcoding_preferred_hardware_device": "পছন্দের হার্ডওয়্যার ডিভাইস", + "transcoding_preferred_hardware_device_description": "শুধুমাত্র VAAPI এবং QSV-এর ক্ষেত্রে প্রযোজ্য। হার্ডওয়্যার ট্রান্সকোডিংয়ের জন্য ব্যবহৃত dri নোড নির্ধারণ করে।", + "transcoding_preset_preset": "প্রিসেট (-preset)", + "transcoding_preset_preset_description": "কম্প্রেশন স্পিড। ধীরগতির প্রিসেটগুলো ছোট ফাইল তৈরি করে এবং একটি নির্দিষ্ট বিটরেট লক্ষ্য করার সময় গুণমান বৃদ্ধি করে। VP9 'faster'-এর চেয়ে বেশি গতি উপেক্ষা করে।", + "transcoding_reference_frames": "রেফারেন্স ফ্রেম", + "transcoding_reference_frames_description": "একটি ফ্রেম কম্প্রেস করার সময় কতটি ফ্রেমকে রেফারেন্স হিসেবে নেওয়া হবে। মান যত বেশি হবে, কমপ্রেশন দক্ষতা তত ভালো হবে, তবে এনকোডিং ধীর হবে। ০ দিলে এই মান স্বয়ংক্রিয়ভাবে নির্ধারিত হবে।", + "transcoding_required_description": "শুধুমাত্র অনুমোদিত ফরম্যাটে নেই এমন ভিডিও", + "transcoding_settings": "ভিডিও ট্রান্সকোডিং সেটিংস", + "transcoding_settings_description": "নির্ধারণ করুন কোন ভিডিওগুলোকে ট্রান্সকোড করতে হবে এবং কিভাবে প্রক্রিয়া করতে হবে", + "transcoding_target_resolution": "টার্গেট রেজোলিউশন", + "transcoding_target_resolution_description": "উচ্চ রেজোলিউশন বেশি বিস্তারিত রাখে, কিন্তু এনকোডিং ধীরে হয়, ফাইল বড় হয়, এবং অ্যাপ ধীর প্রতিক্রিয়া করতে পারে।", + "transcoding_temporal_aq": "টেম্পোরাল AQ", + "transcoding_temporal_aq_description": "শুধুমাত্র NVENC-এর ক্ষেত্রে প্রযোজ্য। টেম্পোরাল অ্যাডাপটিভ কোয়ান্টাইজেশন (Adaptive Quantization) উচ্চ-বিস্তারিত ও স্বল্প-গতির দৃশ্যের মান বৃদ্ধি করে। পুরোনো ডিভাইসগুলোর সাথে সামঞ্জস্যপূর্ণ নাও হতে পারে।", + "transcoding_threads": "থ্রেড", + "transcoding_threads_description": "উচ্চ মানে এনকোডিং দ্রুত হয়, কিন্তু সার্ভার কম কাজ করতে পারে। CPU কোরের বেশি মান দেওয়া উচিত নয়। ০ দিলে সর্বাধিক ব্যবহার হবে।", + "transcoding_tone_mapping": "টোন-ম্যাপিং", + "transcoding_tone_mapping_description": "এইচডিআর (HDR) ভিডিওকে এসডিআর (SDR)-এ রূপান্তর করার সময় এর বাহ্যিক রূপ অক্ষুণ্ণ রাখার চেষ্টা করা হয়। প্রতিটি অ্যালগরিদম রঙ, ডিটেইল এবং উজ্জ্বলতার জন্য ভিন্ন ভিন্ন সমন্বয় করে। হেবল ডিটেইল, মোবিয়াস রঙ এবং রাইনহার্ড উজ্জ্বলতা অক্ষুণ্ণ রাখে।", + "transcoding_transcode_policy": "ট্রান্সকোড নীতি", + "transcoding_transcode_policy_description": "কখন একটি ভিডিও ট্রান্সকোড করা হবে তার নীতিমালা। HDR ভিডিও এবং YUV 4:2:0 ব্যতীত অন্য পিক্সেল ফরম্যাটের ভিডিও সর্বদা ট্রান্সকোড করা হবে (যদি না ট্রান্সকোডিং বন্ধ করা থাকে)।", + "transcoding_two_pass_encoding": "টু-পাস এনকোডিং", + "transcoding_two_pass_encoding_setting_description": "আরও উন্নত মানের এনকোডেড ভিডিও তৈরি করতে দুই ধাপে ট্রান্সকোড করুন। যখন সর্বোচ্চ বিটরেট সক্রিয় করা হয় (যা H.264 এবং HEVC-এর সাথে কাজ করার জন্য আবশ্যক), তখন এই মোডটি সর্বোচ্চ বিটরেটের উপর ভিত্তি করে একটি বিটরেট রেঞ্জ ব্যবহার করে এবং CRF উপেক্ষা করে। VP9-এর ক্ষেত্রে, সর্বোচ্চ বিটরেট নিষ্ক্রিয় থাকলেও CRF ব্যবহার করা যেতে পারে।", + "transcoding_video_codec": "ভিডিও কোডেক", + "transcoding_video_codec_description": "VP9 উচ্চ কর্মদক্ষতা সম্পন্ন এবং ওয়েবের সাথে সামঞ্জস্যপূর্ণ, কিন্তু ট্রান্সকোড করতে বেশি সময় লাগে। HEVC-এর কর্মক্ষমতাও প্রায় একই রকম, কিন্তু এর ওয়েব সামঞ্জস্যতা কম। H.264 ব্যাপকভাবে সামঞ্জস্যপূর্ণ এবং দ্রুত ট্রান্সকোড করা যায়, কিন্তু এটি অনেক বড় ফাইল তৈরি করে। AV1 সবচেয়ে কর্মদক্ষ কোডেক, কিন্তু পুরোনো ডিভাইসগুলোতে এর সমর্থন নেই।", + "trash_enabled_description": "ট্র্যাশ ফিচার চালু করুন", + "trash_number_of_days": "দিনের সংখ্যা", + "trash_number_of_days_description": "ট্র্যাশে থাকা অ্যাসেটগুলো স্থায়ীভাবে মুছে ফেলার আগে রাখার দিন সংখ্যা", + "trash_settings": "ট্র্যাশ সেটিংস", + "trash_settings_description": "ট্র্যাশ সেটিংস পরিচালনা করুন", + "unlink_all_oauth_accounts": "সকল OAuth অ্যাকাউন্ট আনলিঙ্ক করুন", + "unlink_all_oauth_accounts_description": "নতুন প্রোভাইডারে মাইগ্রেট করার আগে সব OAuth অ্যাকাউন্ট আনলিঙ্ক করুন।", + "unlink_all_oauth_accounts_prompt": "আপনি কি সব OAuth অ্যাকাউন্ট আনলিঙ্ক করতে নিশ্চিত? এটি প্রতিটি ব্যবহারকারীর OAuth আইডি রিসেট করে দেবে এবং এটি আর পূর্বাবস্থায় ফেরানো যাবে না।", + "user_cleanup_job": "ইউজার ক্লিনআপ", + "user_delete_delay": "{user}-এর অ্যাকাউন্ট এবং অ্যাসেট {delay, plural, one {# day} other {# days}} পর স্থায়ীভাবে মুছে ফেলার জন্য নির্ধারিত হবে।", + "user_delete_delay_settings": "মুছে ফেলার সময় বিলম্ব", + "user_delete_delay_settings_description": "অ্যাকাউন্ট এবং অ্যাসেট মুছে ফেলার পর কত দিনের মধ্যে স্থায়ীভাবে মুছে ফেলা হবে। ব্যবহারকারী মুছে ফেলার কাজ মধ্যরাতে চালানো হয় এবং দেখা হয় কোন ব্যবহারকারী স্থায়ীভাবে মুছে ফেলার জন্য প্রস্তুত। এই সেটিং পরিবর্তন করলে পরবর্তী এক্সিকিউশনের সময় তা প্রযোজ্য হবে।", + "user_delete_immediately": "{user}-এর অ্যাকাউন্ট এবং অ্যাসেট স্থায়ীভাবে মুছে ফেলার জন্য immediately কিউতে অন্তর্ভুক্ত করা হবে।", + "user_delete_immediately_checkbox": "ব্যবহারকারী ও অ্যাসেট তৎক্ষণাৎ মুছে ফেলার জন্য কিউ", + "user_details": "ব্যবহারকারী তথ্য", + "user_management": "ব্যবহারকারী ম্যানেজমেন্ট", + "user_password_has_been_reset": "ব্যবহারকারীর পাসওয়ার্ড রিসেট করা হয়েছে:", + "user_password_reset_description": "দয়া করে ব্যবহারকারীর জন্য সাময়িক পাসওয়ার্ড দিন এবং জানিয়ে দিন যে তারা পরবর্তী লগইনে পাসওয়ার্ড পরিবর্তন করবেন।", + "user_restore_description": "{user} এর অ্যাকাউন্ট পুনরুদ্ধার করা হবে।", + "user_restore_scheduled_removal": "ব্যবহারকারী পুনরুদ্ধার করুন - মুছে ফেলার জন্য নির্ধারিত তারিখ:{date, date, long}", + "user_settings": "ব্যবহারকারী সেটিংস", + "user_settings_description": "ব্যবহারকারী সেটিংস ম্যানেজ করুন", + "user_successfully_removed": "সফলভাবে ইউজার {email}-কে সরিয়ে দেওয়া হয়েছে।", + "version_check_enabled_description": "ভার্সন যাচাই চালু করুন", + "version_check_implications": "ভার্সন চেক ফিচারটি github.com-এর সঙ্গে নিয়মিত সংযোগের ওপর নির্ভরশীল", + "version_check_settings": "ভার্সন যাচাই", + "version_check_settings_description": "নতুন ভার্সনের নোটিফিকেশন চালু/বন্ধ করুন", + "video_conversion_job": "ভিডিও ট্রান্সকোড করুন", + "video_conversion_job_description": "ব্রাউজার এবং ডিভাইসে আরও ভালোভাবে চলার জন্য ভিডিও ট্রান্সকোড করুন" }, + "admin_email": "অ্যাডমিনের ইমেইল", + "admin_password": "অ্যাডমিনের পাসওয়ার্ড", + "administration": "অ্যাডমিন", + "advanced": "অ্যাডভান্সড", + "age_months": "বয়স {months, plural, one {# month} other {# months}}", + "age_year_months": "বয়স ১ বছর, {months, plural, one {# month} other {# months}}", + "album_added": "অ্যালবাম যুক্ত করা হয়েছে", + "album_added_notification_setting_description": "শেয়ার করা অ্যালবামে যুক্ত হলে ইমেইল নোটিফিকেশন পান", + "album_cover_updated": "অ্যালবামের কভার আপডেট হয়েছে", + "album_delete_confirmation": "আপনি কি সত্যিই অ্যালবাম {album} মুছে ফেলতে চান?", + "album_delete_confirmation_description": "অ্যালবামটি শেয়ার করা থাকলেও অন্য ব্যবহারকারীরা আর এটি অ্যাক্সেস করতে পারবেন না।", + "album_info_updated": "অ্যালবামের তথ্য আপডেট করা হয়েছে", + "album_leave": "অ্যালবাম থেকে বেরিয়ে যেতে চান ?", + "album_leave_confirmation": "আপনি কি নিশ্চিত যে আপনি {album} ছেড়ে যেতে চান?", + "album_name": "অ্যালবামের নাম", + "album_options": "অ্যালবামের অপশনসমূহ", + "album_remove_user": "ব্যবহারকারী সরাতে চান?", + "album_remove_user_confirmation": "আপনি কি নিশ্চিত যে আপনি {user}-কে সরাতে চান?", + "album_share_no_users": "এই অ্যালবামটি সব ব্যবহারকারীর সঙ্গে শেয়ার করা হয়েছে, বা শেয়ার করার জন্য কোনো ব্যবহারকারী নেই।", + "album_updated": "অ্যালবাম আপডেট করা হয়েছে", + "album_updated_setting_description": "নতুন অ্যাসেট যুক্ত হলে শেয়ার করা অ্যালবামের জন্য ইমেইল নোটিফিকেশন পান", + "album_user_left": "বাম {album}", + "album_user_removed": "{user} কে সরানো হয়েছে", + "album_with_link_access": "লিঙ্ক থাকা যে কেউ এই অ্যালবামের ছবি ও মানুষজনকে দেখতে পারবে।", + "albums": "অ্যালবামসমূহ", + "all": "সব", + "all_albums": "সকল অ্যালবামসমূহ", + "all_people": "সব ব্যবহারকারী", + "all_videos": "সব ভিডিও", + "allow_dark_mode": "ডার্ক মোড চালু করুন", + "allow_edits": "এডিটের অনুমতি দিন", + "allow_public_user_to_download": "সাধারণ ব্যবহারকারী ডাউনলোড করতে পারবে", + "allow_public_user_to_upload": "সাধারণ ব্যবহারকারী আপলোড করতে পারবে", + "anti_clockwise": "বিপরীত দিক", + "api_key": "API কী", + "api_key_description": "এই মান একবারই দেখানো হবে। উইন্ডো বন্ধ করার আগে অবশ্যই এটি কপি করুন।", + "api_key_empty": "API কী-এর নাম খালি রাখা যাবে না", + "api_keys": "API কী সমূহ", + "app_settings": "অ্যাপ সেটিংস", + "appears_in": "v1.106.4 থেকে, অ্যাসেট সাইডবারে ব্যবহার হয় ‘[albums]-এ উপস্থিত’ বোঝাতে", + "archive": "আর্কাইভ", + "archive_or_unarchive_photo": "ফটো আর্কাইভ অথবা আনআর্কাইভ করুন", + "archive_size": "আর্কাইভ সাইজ", + "archive_size_description": "ডাউনলোডের আর্কাইভ সাইজ নির্ধারণ করুন (GiB)", + "are_these_the_same_person": "এরা কি একই ব্যক্তি?", + "are_you_sure_to_do_this": "আপনি কি নিশ্চিত যে আপনি এটি করতে চান?", + "asset_added_to_album": "অ্যালবামে যুক্ত করা হয়েছে", + "asset_adding_to_album": "অ্যালবামে যুক্ত করা হচ্ছে…", + "asset_description_updated": "অ্যাসেটের বিবরণ আপডেট করা হয়েছে", + "asset_filename_is_offline": "{filename} অ্যাসেটটি বর্তমানে অফলাইন", + "asset_has_unassigned_faces": "অ্যাসেটটির কিছু মুখ অনির্ধারিত ফেস রয়েছে", + "asset_hashing": "হ্যাশিং চলছে…", + "asset_offline": "অ্যাসেট বর্তমানে অফলাইন", + "asset_offline_description": "এই এক্সটার্নাল অ্যাসেটটি এখন ডিস্কে নেই। সহায়তার জন্য Immich অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।", + "asset_skipped": "এড়ানো হয়েছে", + "asset_skipped_in_trash": "ট্র্যাশে", + "asset_uploaded": "আপলোড সম্পন্ন", + "asset_uploading": "আপলোড চলছে…", + "assets": "অ্যাসেটসমূহ", + "assets_added_to_album_count": "অ্যালবামে {count, plural, one {# asset} other {# assets}} যুক্ত করা হয়েছে", + "assets_moved_to_trash_count": "{count, plural, one {# asset} other {# assets}} ট্র্যাশে সরানো হয়েছে", + "assets_permanently_deleted_count": "{count, plural, one {# asset} other {# assets}} স্থায়ীভাবে মুছে ফেলা হয়েছে", + "assets_removed_count": "{count, plural, one {# asset} other {# assets}} সরানো হয়েছে", + "assets_restore_confirmation": "আপনি কি সত্যিই আপনার সব ট্র্যাশ করা অ্যাসেট পুনরুদ্ধার করতে চান? এটি পূর্বাবস্থায় ফিরানো যাবে না। তবে অফলাইন অ্যাসেট এইভাবে পুনরুদ্ধার হবে না।", + "assets_restored_count": "{count, plural, one {# asset} other {# assets}} পুনরুদ্ধার করা হয়েছে", + "assets_trashed_count": "{count, plural, one {# asset} other {# assets}} ট্র্যাশে পাঠানো হয়েছে", + "assets_were_part_of_album_count": "{count, plural, one {Asset was} other {Assets were}} আগেই অ্যালবামে যুক্ত ছিল", + "authorized_devices": "অনুমোদিত ডিভাইস", + "back": "ফিরে যান", + "back_close_deselect": "ফিরে যান, বন্ধ করুন বা নির্বাচন বাতিল করুন", + "backward": "পিছনে", + "birthdate_saved": "জন্ম তারিখ সংরক্ষণ সম্পন্ন", + "birthdate_set_description": "একটি ছবির সময়ে ব্যক্তির বয়স গণনার জন্য জন্ম তারিখ ব্যবহার করা হয়।", + "blurred_background": "ব্লারড ব্যাকগ্রাউন্ড", + "bugs_and_feature_requests": "বাগ ও ফিচার রিকোয়েস্ট", + "build": "বিল্ড", + "build_image": "বিল্ড ইমেজ", + "bulk_delete_duplicates_confirmation": "আপনি কি সত্যিই {count, plural, one {# duplicate asset} other {# duplicate assets}} একসাথে মুছে ফেলতে চান? প্রতিটি গ্রুপের সবচেয়ে বড় অ্যাসেট রাখা হবে, বাকিগুলো স্থায়ীভাবে মুছে যাবে। এটি পূর্বাবস্থায় ফিরানো যাবে না!", + "bulk_keep_duplicates_confirmation": "আপনি কি সত্যিই {count, plural, one {# duplicate asset} other {# duplicate assets}} রাখতে চান? সব ডুপ্লিকেট গ্রুপ ঠিক করা হবে, কোনো কিছু মুছে ফেলা হবে না।", + "bulk_trash_duplicates_confirmation": "আপনি কি সত্যিই {count, plural, one {# duplicate asset} other {# duplicate assets}} একসাথে ট্র্যাশ করতে চান? প্রতিটি গ্রুপের সবচেয়ে বড় অ্যাসেট রাখা হবে, বাকিগুলো ট্র্যাশে যাবে।", + "buy": "Immich ক্রয় করুন", + "camera": "ক্যামেরা", + "camera_brand": "ক্যামেরা ব্র্যান্ড", + "camera_model": "ক্যামেরা মডেল", + "cancel": "বাতিল", + "cancel_search": "সার্চ বন্ধ করুন", + "cannot_merge_people": "ব্যক্তিদের একত্র করা সম্ভব নয়", + "cannot_undo_this_action": "এই কাজ পূর্বাবস্থায় ফেরানো যাবে না!", + "cannot_update_the_description": "বিবরণ পরিবর্তন সম্ভব নয়", + "change_date": "তারিখ পরিবর্তন", + "change_expiration_time": "মেয়াদ শেষের সময় পরিবর্তন", + "change_location": "লোকেশন পরিবর্তন", + "change_name": "নাম পরিবর্তন করুন", + "change_name_successfully": "নাম সফলভাবে পরিবর্তন হয়েছে", + "change_password": "পাসওয়ার্ড পরিবর্তন করুন", + "change_password_description": "আপনি হয়তো প্রথমবার লগইন করছেন বা পাসওয়ার্ড পরিবর্তনের অনুরোধ করেছেন। নিচে নতুন পাসওয়ার্ড দিন।", + "change_your_password": "আপনার পাসওয়ার্ড পরিবর্তন করুন", + "changed_visibility_successfully": "ভিসিবিলিটি সফলভাবে পরিবর্তন হয়েছে", + "check_logs": "লগ দেখুন", + "choose_matching_people_to_merge": "একত্র করার জন্য মিল থাকা ব্যক্তিদের নির্বাচন করুন", + "city": "শহর", + "clear": "মুছুন", + "clear_all": "সব মুছুন", + "clear_all_recent_searches": "সাম্প্রতিক সব অনুসন্ধান পরিষ্কার করুন", + "clear_message": "মেসেজ পরিষ্কার করুন", + "clear_value": "ভ্যালু মুছুন", + "clockwise": "ঘড়ির কাঁটার দিকে", + "close": "বন্ধ", + "collapse": "সংকুচিত করুন", + "collapse_all": "সব সংকুচিত", + "color": "রং", + "color_theme": "কালার থিম", + "comment_deleted": "মন্তব্য মুছে ফেলা হয়েছে", + "comment_options": "মন্তব্য অপশন", + "comments_and_likes": "মন্তব্য ও লাইক", + "comments_are_disabled": "মন্তব্য বন্ধ করা হয়েছে", + "confirm": "নিশ্চিত", + "confirm_admin_password": "অ্যাডমিন পাসওয়ার্ড পুনরায় লিখুন", + "confirm_delete_shared_link": "আপনি কি নিশ্চিত যে আপনি এই শেয়ার করা লিঙ্কটি মুছে ফেলতে চান?", + "confirm_keep_this_delete_others": "স্ট্যাকের এই অ্যাসেট ছাড়া সব অন্যান্য অ্যাসেট মুছে যাবে। আপনি কি নিশ্চিত যে আপনি চালিয়ে যেতে চান?", + "confirm_password": "পাসওয়ার্ড পুনরায় লিখুন", + "contain": "মাপমত", + "context": "প্রসঙ্গ", + "continue": "এগিয়ে যান", + "copied_image_to_clipboard": "ছবি ক্লিপবোর্ডে কপি হয়েছে।", + "copied_to_clipboard": "ক্লিপবোর্ডে কপি হয়েছে!", + "copy_error": "Error-টি কপি করুন", + "copy_file_path": "ফাইল পাথ কপি", + "copy_image": "ছবি কপি", + "copy_link": "লিঙ্ক কপি", + "copy_link_to_clipboard": "ক্লিপবোর্ডে লিঙ্ক কপি করুন", + "copy_password": "পাসওয়ার্ড কপি করুন", + "copy_to_clipboard": "ক্লিপবোর্ডে কপি করুন", + "country": "দেশ", + "cover": "সম্পূর্ণভাবে", + "covers": "কভারস", + "create": "তৈরি করুন", + "create_album": "অ্যালবাম তৈরি", + "create_library": "লাইব্রেরি তৈরি", + "create_link": "লিঙ্ক তৈরি", + "create_link_to_share": "শেয়ার লিঙ্ক তৈরি", + "create_link_to_share_description": "লিঙ্কের মাধ্যমে সবাই নির্বাচিত ছবি দেখতে পারবে", + "create_new_person": "নতুন ব্যক্তি যোগ করুন", + "create_new_person_hint": "নির্বাচিত অ্যাসেট নতুন ব্যক্তির সঙ্গে যুক্ত করুন", + "create_new_user": "নতুন ব্যবহারকারী যোগ করুন", + "create_tag": "ট্যাগ তৈরি", + "create_tag_description": "নতুন ট্যাগ তৈরি করুন। নেস্টেড ট্যাগের ক্ষেত্রে সম্পূর্ণ পাথ - ফরওয়ার্ড স্ল্যাশসহ দিন।", + "create_user": "ব্যবহারকারী যোগ করুন", + "created": "যোগ করা হয়েছে", + "current_device": "চলতি ডিভাইস", + "custom_locale": "কাস্টম লোকেল", + "custom_locale_description": "নির্বাচিত ভাষা এবং অঞ্চলের ভিত্তিতে তারিখ, সময় এবং সংখ্যা ফরম্যাট করুন", + "dark": "ডার্ক", + "date_after": "এর পরের তারিখ", + "date_and_time": "তারিখ এবং সময়", + "date_before": "এর আগের তারিখ", + "date_of_birth_saved": "জন্ম তারিখ সফলভাবে সংরক্ষণ করা হয়েছে", + "delete": "মুছুন", + "delete_album": "অ্যালবাম মুছুন", + "delete_api_key_prompt": "আপনি কি সত্যিই এই API key মুছে ফেলতে চান?", + "delete_duplicates_confirmation": "আপনি কি সত্যিই এই ডুপ্লিকেটগুলো স্থায়ীভাবে মুছতে চান?", + "delete_key": "key মুছুন", + "delete_library": "লাইব্রেরি মুছুন", + "delete_link": "লিঙ্ক মুছুন", + "delete_others": "বাকিগুলো মুছুন", + "delete_shared_link": "শেয়ার করা লিঙ্ক মুছুন", + "delete_tag": "ট্যাগ মুছুন", + "delete_tag_confirmation_prompt": "আপনি কি নিশ্চিতভাবে {tagName} ট্যাগটি মুছতে চান?", + "delete_user": "ইউজার মুছুন", + "deleted_shared_link": "শেয়ার করা লিঙ্কটি মুছুন", + "deletes_missing_assets": "ডিস্ক থেকে হারানো অ্যাসেটগুলো মুছে", + "description": "বিবরন", + "details": "বিস্তারিত", + "direction": "দিকনির্দেশনা", + "disabled": "নিষ্ক্রিয়", + "disallow_edits": "সম্পাদনা করার অনুমতি দেবেন না", + "discord": "ডিসকর্ড", + "discover": "ডিসকভার", + "dismiss_all_errors": "সব ত্রুটি বাতিল করুন", + "dismiss_error": "ত্রুটি বাতিল করুন", + "display_options": "ডিসপ্লে অপশন", + "display_order": "ডিসপ্লে অর্ডার", + "display_original_photos": "অরিজিনাল ছবি দেখান", + "display_original_photos_setting_description": "অরিজিনাল অ্যাসেটটি ওয়েব-সামঞ্জস্যপূর্ণ (web-compatible) হলে অ্যাসেট দেখার সময় থাম্বনেইলের পরিবর্তে মূল ফটোটি প্রদর্শন করতে অগ্রাধিকার দিন। এর ফলে ফটো প্রদর্শনের গতি কিছুটা ধীর হতে পারে।", + "do_not_show_again": "এই মেসেজটি আর দেখাবেন না", + "documentation": "সহায়ক নির্দেশিকা", + "done": "সম্পন্ন", + "download": "ডাউনলোড", + "download_include_embedded_motion_videos": "এমবেডেড ভিডিও", + "download_include_embedded_motion_videos_description": "মোশন ফটোর (motion photos) মধ্যে থাকা ভিডিওগুলোকে আলাদা ফাইল হিসেবে অন্তর্ভুক্ত করুন", + "download_settings": "ডাউনলোড", + "download_settings_description": "অ্যাসেট ডাউনলোডের সেটিংস পরিচালনা করুন", + "open_in_browser": "ব্রাউজারে ওপেন করুন", "user_usage_stats": "অ্যাকাউন্ট ব্যবহারের পরিসংখ্যান", "user_usage_stats_description": "অ্যাকাউন্ট ব্যবহারের পরিসংখ্যান দেখুন", "yes": "হ্যাঁ", diff --git a/i18n/ca.json b/i18n/ca.json index 99af12e01b..5b5c0592e4 100644 --- a/i18n/ca.json +++ b/i18n/ca.json @@ -372,7 +372,7 @@ "transcoding_audio_codec": "Còdec d'àudio", "transcoding_audio_codec_description": "Opus és l'opció de màxima qualitat, però té menor compatibilitat amb dispositius o programari antics.", "transcoding_bitrate_description": "Vídeos superiors a la taxa de bits màxima o que no tenen un format acceptat", - "transcoding_codecs_learn_more": "Per obtenir més informació sobre la terminologia utilitzada, consulteu la documentació de FFmpeg per al còdec H.264, còdec HEVC i còdec VP9.", + "transcoding_codecs_learn_more": "Per obtenir més informació sobre la terminologia utilitzada, consulteu la documentació de FFmpeg per al còdec H.264, còdec HEVC i còdec VP9.", "transcoding_constant_quality_mode": "Mode de qualitat constant", "transcoding_constant_quality_mode_description": "ICQ és millor que CQP, però alguns dispositius d'acceleració de maquinari no admeten aquest mode. Establir aquesta opció preferirà el mode especificat quan utilitzeu la codificació basada en la qualitat. Ignorat per NVENC perquè no és compatible amb ICQ.", "transcoding_constant_rate_factor": "Factor de taxa constant (-crf)", @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Fixat", "crop_aspect_ratio_free": "Lliure", "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Quadrat", "curated_object_page_title": "Coses", "current_device": "Dispositiu actual", "current_pin_code": "Codi PIN actual", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM, yyyy", "dark": "Fosc", - "dark_theme": "Canviar a tema fosc", + "dark_theme": "Canvia a tema fosc", "date": "Data", "date_after": "Data posterior a", "date_and_time": "Data i hora", @@ -891,10 +892,8 @@ "day": "Dia", "days": "Dies", "deduplicate_all": "Desduplica-ho tot", - "deduplication_criteria_1": "Mida d'imatge en bytes", - "deduplication_criteria_2": "Quantitat de dades EXIF", - "deduplication_info": "Informació de deduplicació", - "deduplication_info_description": "Per preseleccionar recursos automàticament i eliminar els duplicats de manera massiva, ens fixem en:", + "default_locale": "Configuració regional predeterminada", + "default_locale_description": "Format de dades i números en funció de la configuració local", "delete": "Esborrar", "delete_action_confirmation_message": "Segur que vols eliminar aquest recurs? Aquesta acció el mourà a la paperera del servidor, i et preguntarà si el vols eliminar localment", "delete_action_prompt": "{count} eliminats", @@ -970,7 +969,7 @@ "downloading_media": "Descàrrega multimèdia", "drop_files_to_upload": "Deixeu els fitxers a qualsevol lloc per pujar-los", "duplicates": "Duplicats", - "duplicates_description": "Resol cada grup indicant, si n'hi ha, quins són duplicats", + "duplicates_description": "Resol cada grup indicant, si n'hi ha, quins són duplicats.", "duration": "Durada", "edit": "Editar", "edit_album": "Edita l'àlbum", @@ -992,7 +991,7 @@ "edit_location_dialog_title": "Ubicació", "edit_name": "Edita el nom", "edit_people": "Edita la gent", - "edit_tag": "Editar etiqueta", + "edit_tag": "Edita etiqueta", "edit_title": "Edita títol", "edit_user": "Edita l'usuari", "edit_workflow": "Edita el flux de treball", @@ -1007,6 +1006,8 @@ "editor_edits_applied_success": "Les modificacions s'han aplicat correctament", "editor_flip_horizontal": "Capgira horitzontalment", "editor_flip_vertical": "Capgira verticalment", + "editor_handle_corner": "{corner, select, top_left {Top-left} top_right {Top-right} bottom_left {Bottom-left} bottom_right {Bottom-right} other {A}} cantó per agafar", + "editor_handle_edge": "{edge, select, top {Top} bottom {Bottom} left {Left} right {Right} other {An}} cantó per agafar", "editor_orientation": "Orientació", "editor_reset_all_changes": "Reiniciar canvis", "editor_rotate_left": "Rota 90º al contrari de les agulles", @@ -1168,7 +1169,7 @@ "exif_bottom_sheet_description_error": "No s'ha pogut actualitzar la descripció", "exif_bottom_sheet_details": "DETALLS", "exif_bottom_sheet_location": "UBICACIÓ", - "exif_bottom_sheet_no_description": "Sense descrioció", + "exif_bottom_sheet_no_description": "Sense descripció", "exif_bottom_sheet_people": "PERSONES", "exif_bottom_sheet_person_add_person": "Afegir nom", "exit_slideshow": "Surt de la presentació de diapositives", @@ -1385,9 +1386,11 @@ "library_page_sort_title": "Títol de l'àlbum", "licenses": "Llicències", "light": "Llum", + "light_theme": "Canviar a tema clar", "like": "M'agrada", "like_deleted": "M'agrada suprimit", "link_motion_video": "Enllaçar vídeo en moviment", + "link_to_docs": "Per més informació, mirar la documentation.", "link_to_oauth": "Enllaç a OAuth", "linked_oauth_account": "Compte OAuth enllaçat", "list": "Llista", @@ -1649,6 +1652,7 @@ "only_favorites": "Només preferits", "open": "Obrir", "open_calendar": "Obrir el calendari", + "open_in_browser": "Obre al navegador", "open_in_map_view": "Obrir a la vista del mapa", "open_in_openstreetmap": "Obre a OpenStreetMap", "open_the_search_filters": "Obriu els filtres de cerca", @@ -2391,6 +2395,7 @@ "viewer_remove_from_stack": "Elimina de la pila", "viewer_stack_use_as_main_asset": "Fes servir com a element principal", "viewer_unstack": "Desapila", + "visibility": "Visibilitat", "visibility_changed": "La visibilitat ha canviat per {count, plural, one {# persona} other {# persones}}", "visual": "Visual", "visual_builder": "Constructor visual", diff --git a/i18n/cs.json b/i18n/cs.json index f23100b582..0c333532f3 100644 --- a/i18n/cs.json +++ b/i18n/cs.json @@ -849,9 +849,12 @@ "create_link_to_share": "Vytvořit odkaz pro sdílení", "create_link_to_share_description": "Umožnit každému, kdo má odkaz, zobrazit vybrané fotografie", "create_new": "VYTVOŘIT NOVÉ", + "create_new_face": "Vytvořit nový obličej", "create_new_person": "Vytvořit novou osobu", "create_new_person_hint": "Přiřadit vybrané položky nové osobě", "create_new_user": "Vytvořit nového uživatele", + "create_person": "Vytvořit osobu", + "create_person_subtitle": "Přidejte jméno ke zvolenému obličeji pro vytvoření a označení nové osoby", "create_shared_album_page_share_add_assets": "PŘIDAT POLOŽKY", "create_shared_album_page_share_select_photos": "Vybrat fotografie", "create_shared_link": "Vytvořit sdílený odkaz", @@ -866,6 +869,7 @@ "crop_aspect_ratio_fixed": "Pevný", "crop_aspect_ratio_free": "Volný", "crop_aspect_ratio_original": "Původní", + "crop_aspect_ratio_square": "Čtverec", "curated_object_page_title": "Věci", "current_device": "Současné zařízení", "current_pin_code": "Aktuální PIN kód", @@ -880,7 +884,7 @@ "daily_title_text_date": "EEEE, d. MMMM", "daily_title_text_date_year": "EEEE, d. MMMM y", "dark": "Tmavý", - "dark_theme": "Přepnout tmavý motiv", + "dark_theme": "Přepnout na tmavý motiv", "date": "Datum", "date_after": "Datum po", "date_and_time": "Datum a čas", @@ -891,10 +895,8 @@ "day": "Den", "days": "Dnů", "deduplicate_all": "Odstranit všechny duplicity", - "deduplication_criteria_1": "Velikost obrázku v bajtech", - "deduplication_criteria_2": "Počet EXIF dat", - "deduplication_info": "Informace o deduplikaci", - "deduplication_info_description": "Pro automatický předvýběr položek a hromadné odstranění duplicit se zohledňuje:", + "default_locale": "Výchozí národní prostředí", + "default_locale_description": "Formátování datumu a čísel podle místního nastavení prohlížeče", "delete": "Smazat", "delete_action_confirmation_message": "Opravdu chcete odstranit tuto položku? Tato akce přesune položku do serverového koše a zeptá se vás, zda ji chcete odstranit lokálně", "delete_action_prompt": "{count} smazáno", @@ -970,7 +972,7 @@ "downloading_media": "Stahování média", "drop_files_to_upload": "Pro nahrání sem přetáhněte soubory", "duplicates": "Duplicity", - "duplicates_description": "Vyřešte každou skupinu tak, že uvedete, které skupiny jsou duplicitní", + "duplicates_description": "Vyřešte každou skupinu tak, že uvedete, které skupiny jsou duplicitní.", "duration": "Doba trvání", "edit": "Upravit", "edit_album": "Upravit album", @@ -1387,9 +1389,11 @@ "library_page_sort_title": "Podle názvu alba", "licenses": "Licence", "light": "Světlý", + "light_theme": "Přepnout na světlý motiv", "like": "Líbí se mi", "like_deleted": "Oblíbení smazáno", "link_motion_video": "Připojit pohyblivé video", + "link_to_docs": "Další informace najdete v dokumentaci.", "link_to_oauth": "Propojit s OAuth", "linked_oauth_account": "Propojený OAuth účet", "list": "Seznam", @@ -2213,6 +2217,7 @@ "tag": "Značka", "tag_assets": "Přiřadit značku", "tag_created": "Vytvořena značka: {tag}", + "tag_face": "Označit obličej", "tag_feature_description": "Procházení fotografií a videí seskupených podle témat logických značek", "tag_not_found_question": "Nemůžete najít značku? Vytvořte novou.", "tag_people": "Označit lidi", @@ -2394,6 +2399,7 @@ "viewer_remove_from_stack": "Odstranit ze seskupení", "viewer_stack_use_as_main_asset": "Použít jako hlavní položku", "viewer_unstack": "Zrušit seskupení", + "visibility": "Viditelnost", "visibility_changed": "Viditelnost změněna u {count, plural, one {# osoby} few {# osob} other {# lidí}}", "visual": "Vizuální", "visual_builder": "Vizuální návrhář", diff --git a/i18n/da.json b/i18n/da.json index b234deb2fb..ba186826fd 100644 --- a/i18n/da.json +++ b/i18n/da.json @@ -863,9 +863,10 @@ "created_at": "Oprettet", "creating_linked_albums": "Opretter sammenkædede albums...", "crop": "Beskær", - "crop_aspect_ratio_fixed": "Fikset", - "crop_aspect_ratio_free": "Gratis", + "crop_aspect_ratio_fixed": "Fast", + "crop_aspect_ratio_free": "Fri", "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Kvadrat", "curated_object_page_title": "Ting", "current_device": "Nuværende enhed", "current_pin_code": "Nuværende PIN kode", @@ -890,11 +891,8 @@ "date_range": "Datointerval", "day": "Dag", "days": "Dage", - "deduplicate_all": "Kopier alle", - "deduplication_criteria_1": "Billedstørrelse i bytes", - "deduplication_criteria_2": "Antal EXIF-data", - "deduplication_info": "Deduplikerings info", - "deduplication_info_description": "For automatisk at forudvælge emner og fjerne dubletter i bulk ser vi på:", + "deduplicate_all": "Dedubliker alle", + "default_locale_description": "Formatér datoer og tal baseret på din browsers landestandard", "delete": "Slet", "delete_action_confirmation_message": "Er du sikker på, at du vil slette dette objekt? Denne handling vil flytte objektet til serverens papirkurv, og vil spørge dig, om du vil slette den lokalt", "delete_action_prompt": "{count} slettet", @@ -970,7 +968,7 @@ "downloading_media": "Download medier", "drop_files_to_upload": "Slip filer hvor som helst for at uploade dem", "duplicates": "Duplikater", - "duplicates_description": "Løs hver gruppe ved at angive, hvilke, hvis nogen, er dubletter", + "duplicates_description": "Løs hver gruppe ved at angive hvilke, hvis nogen, er dubletter", "duration": "Varighed", "edit": "Rediger", "edit_album": "Redigér album", @@ -1007,6 +1005,8 @@ "editor_edits_applied_success": "Redigeringer gemt", "editor_flip_horizontal": "Vend horisontalt", "editor_flip_vertical": "Flip vertikal", + "editor_handle_corner": "{corner, select, top_left {Øverst venstre} top_right {Øverst højre} bottom_left {Nederst venstre} bottom_right {Nederst højre} other {A}} hjørnehåndtag", + "editor_handle_edge": "{edge, select, top {Øverst} bottom {Nederst} left {Venstre} right {Højre} other {Et}} kanthåndtag", "editor_orientation": "Orientering", "editor_reset_all_changes": "Nulstil ændringer", "editor_rotate_left": "Rotér 90° mod uret", @@ -1017,7 +1017,7 @@ "empty_trash": "Tøm papirkurv", "empty_trash_confirmation": "Er du sikker på, at du vil tømme papirkurven? Dette vil fjerne alle objekter i papirkurven permanent fra Immich.\nDu kan ikke fortryde denne handling!", "enable": "Aktivér", - "enable_backup": "Aktiver backup", + "enable_backup": "Aktivér backup", "enable_biometric_auth_description": "Indtast din PIN kode for at slå biometrisk adgangskontrol til", "enabled": "Aktiveret", "end_date": "Slutdato", @@ -1072,7 +1072,7 @@ "failed_to_update_notification_status": "Kunne ikke uploade notifikations status", "incorrect_email_or_password": "Forkert email eller kodeord", "library_folder_already_exists": "Denne import sti findes allerede.", - "page_not_found": "Siden blev ikke fundet :/", + "page_not_found": "Siden blev ikke fundet", "paths_validation_failed": "{paths, plural, one {# sti} other {# stier}} slog fejl ved validering", "profile_picture_transparent_pixels": "Profilbilleder kan ikke have gennemsigtige pixels. Zoom venligst ind og/eller flyt billedet.", "quota_higher_than_disk_size": "Du har sat en kvote der er større end disken", @@ -1385,9 +1385,11 @@ "library_page_sort_title": "Albumtitel", "licenses": "Licenser", "light": "Lys", + "light_theme": "Skift til lyst tema", "like": "Synes om", "like_deleted": "Ligesom slettet", "link_motion_video": "Link bevægelsesvideo", + "link_to_docs": "For yderligere information, se dokumentationen.", "link_to_oauth": "Link til OAuth", "linked_oauth_account": "Tilsluttet OAuth-konto", "list": "Liste", @@ -1649,6 +1651,7 @@ "only_favorites": "Kun favoritter", "open": "Åben", "open_calendar": "Åbn kalender", + "open_in_browser": "Åbn i browser", "open_in_map_view": "Åben i kortvisning", "open_in_openstreetmap": "Åben i OpenStreetMap", "open_the_search_filters": "Åbn søgefiltre", @@ -2391,6 +2394,7 @@ "viewer_remove_from_stack": "Fjern fra stak", "viewer_stack_use_as_main_asset": "Brug som hovedelement", "viewer_unstack": "Fjern fra stak", + "visibility": "Synlighed", "visibility_changed": "Synlighed ændret for {count, plural, one {# person} other {# personer}}", "visual": "Visuel", "visual_builder": "Visuel builder", diff --git a/i18n/de.json b/i18n/de.json index 10f920a788..e611431730 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -1,5 +1,5 @@ { - "about": "Über Immich", + "about": "Über", "account": "Konto", "account_settings": "Kontoeinstellungen", "acknowledge": "Verstanden", @@ -8,7 +8,7 @@ "action_description": "Eine Reihe von Aktionen, die an den gefilterten Assets ausgeführt werden sollen", "actions": "Aktionen", "active": "Aktiv", - "active_count": "Aktive:{count}", + "active_count": "Aktive: {count}", "activity": "Aktivität", "activity_changed": "Aktivität ist {enabled, select, true {aktiviert} other {deaktiviert}}", "add": "Hinzufügen", @@ -59,7 +59,7 @@ "backup_database_enable_description": "Datenbank regelmäßig sichern", "backup_keep_last_amount": "Anzahl der aufzubewahrenden früheren Sicherungen", "backup_onboarding_1_description": "Offsite-Kopie in der Cloud oder an einem anderen physischen Ort.", - "backup_onboarding_2_description": "lokale Kopien auf verschiedenen Geräten. Dazu gehören die Hauptdateien und eine lokale Sicherung dieser Dateien.", + "backup_onboarding_2_description": "Lokale Kopien auf verschiedenen Geräten. Dazu gehören die Hauptdateien und eine lokale Sicherung dieser Dateien.", "backup_onboarding_3_description": "Kopien deiner Daten inklusive Originaldateien. Dies umfasst 1 Kopie an einem anderen Ort und 2 lokale Kopien.", "backup_onboarding_description": "Eine 3-2-1 Sicherungsstrategie wird empfohlen, um deine Daten zu schützen. Du solltest sowohl Kopien deiner hochgeladenen Fotos/Videos als auch der Immich-Datenbank aufbewahren, um eine umfassende Sicherungslösung zu haben.", "backup_onboarding_footer": "Weitere Informationen zum Sichern von Immich findest du in der Dokumentation.", @@ -309,7 +309,7 @@ "reset_settings_to_recent_saved": "Einstellungen auf die zuletzt gespeicherten Einstellungen zurücksetzen", "scanning_library": "Bibliothek scannen", "search_jobs": "Suchaufgaben…", - "send_welcome_email": "Begrüssungsmail senden", + "send_welcome_email": "Begrüßungsmail senden", "server_external_domain_settings": "Externe Domain", "server_external_domain_settings_description": "Für externe Links verwendete Domäne", "server_public_users": "Öffentliche Benutzer", @@ -472,7 +472,7 @@ "advanced_settings_troubleshooting_title": "Fehlersuche", "age_months": "Alter {months, plural, one {# Monat} other {# Monate}}", "age_year_months": "Alter 1 Jahr, {months, plural, one {# Monat} other {# Monate}}", - "age_years": "Alter {years, plural, one {# Jahr} other {# Jahre}}", + "age_years": "{years, plural, other {Alter #}}", "album": "Album", "album_added": "Album hinzugefügt", "album_added_notification_setting_description": "Erhalte eine E-Mail-Benachrichtigung, wenn du zu einem freigegebenen Album hinzugefügt wurdest", @@ -580,7 +580,7 @@ "asset_restored_successfully": "Datei erfolgreich wiederhergestellt", "asset_skipped": "Übersprungen", "asset_skipped_in_trash": "Im Papierkorb", - "asset_trashed": "Datei Gelöscht", + "asset_trashed": "Datei gelöscht", "asset_troubleshoot": "Datei Fehlerbehebung", "asset_uploaded": "Hochgeladen", "asset_uploading": "Hochladen…", @@ -610,14 +610,14 @@ "assets_were_part_of_album_count": "{count, plural, one {# Datei ist} other {# Dateien sind}} bereits im Album vorhanden", "assets_were_part_of_albums_count": "{count, plural, one {Datei war} other {Dateien waren}} bereits in den Alben", "authorized_devices": "Verwendete Geräte", - "automatic_endpoint_switching_subtitle": "Verbinden Sie sich lokal über ein bestimmtes WiFi, wenn es verfügbar ist, und verwenden Sie andere Verbindungsmöglichkeiten", + "automatic_endpoint_switching_subtitle": "Verbinden Sie sich lokal über ein bestimmtes WLAN-Netz, wenn es verfügbar ist, und verwenden Sie ansonsten andere Verbindungsmöglichkeiten", "automatic_endpoint_switching_title": "Automatische URL-Umschaltung", "autoplay_slideshow": "Automatische Diashow", "back": "Zurück", "back_close_deselect": "Zurück, Schließen oder Abwählen", "background_backup_running_error": "Sicherung läuft im Hintergrund. Manuelle Sicherung kann nicht gestartet werden", "background_location_permission": "Hintergrund Standortfreigabe", - "background_location_permission_content": "Um im Hintergrund zwischen den Netzwerken wechseln zu können, muss Immich *immer* Zugriff auf den genauen Standort haben, damit die App den Namen des WiFi-Netzwerks ermitteln kann", + "background_location_permission_content": "Um im Hintergrund zwischen den Netzwerken wechseln zu können, muss Immich *immer* Zugriff auf den genauen Standort haben, damit die App den Namen des WLAN-Netzwerks ermitteln kann", "background_options": "Hintergrund Optionen", "backup": "Sicherung", "backup_album_selection_page_albums_device": "Alben auf dem Gerät ({count})", @@ -652,7 +652,7 @@ "backup_controller_page_background_is_on": "Automatische Sicherung im Hintergrund ist aktiviert", "backup_controller_page_background_turn_off": "Hintergrundservice ausschalten", "backup_controller_page_background_turn_on": "Hintergrundservice einschalten", - "backup_controller_page_background_wifi": "Nur im WiFi", + "backup_controller_page_background_wifi": "Nur im WLAN", "backup_controller_page_backup": "Sicherung", "backup_controller_page_backup_selected": "Ausgewählt: ", "backup_controller_page_backup_sub": "Gesicherte Fotos und Videos", @@ -687,7 +687,7 @@ "backup_options_page_title": "Sicherungsoptionen", "backup_setting_subtitle": "Verwaltung der Upload-Einstellungen im Hintergrund und im Vordergrund", "backup_settings_subtitle": "Upload-Einstellungen verwalten", - "backup_upload_details_page_more_details": "Tippen für weitere Details", + "backup_upload_details_page_more_details": "Tippe für weitere Details", "backward": "Rückwärts", "biometric_auth_enabled": "Biometrische Authentifizierung aktiviert", "biometric_locked_out": "Du bist von der biometrischen Authentifizierung ausgeschlossen", @@ -697,8 +697,8 @@ "birthdate_set_description": "Das Geburtsdatum wird verwendet, um das Alter dieser Person zum Zeitpunkt eines Fotos zu berechnen.", "blurred_background": "Unscharfer Hintergrund", "bugs_and_feature_requests": "Fehler & Verbesserungsvorschläge", - "build": "Erstelle", - "build_image": "Bild erstellen", + "build": "Build", + "build_image": "Abbildversion", "bulk_delete_duplicates_confirmation": "Bist du sicher, dass du {count, plural, one {# duplizierte Datei} other {# duplizierte Dateien gemeinsam}} löschen möchtest? Dabei wird die größte Datei jeder Gruppe behalten und alle anderen Duplikate endgültig gelöscht. Diese Aktion kann nicht rückgängig gemacht werden!", "bulk_keep_duplicates_confirmation": "Bist du sicher, dass du {count, plural, one {# duplizierte Datei} other {# duplizierte Dateien}} behalten möchtest? Dies wird alle Duplikat-Gruppen auflösen ohne etwas zu löschen.", "bulk_trash_duplicates_confirmation": "Bist du sicher, dass du {count, plural, one {# duplizierte Datei} other {# duplizierte Dateien gemeinsam}} in den Papierkorb verschieben möchtest? Dies wird die größte Datei jeder Gruppe behalten und alle anderen Duplikate in den Papierkorb verschieben.", @@ -728,7 +728,7 @@ "cannot_undo_this_action": "Diese Aktion kann nicht rückgängig gemacht werden!", "cannot_update_the_description": "Beschreibung kann nicht aktualisiert werden", "cast": "Übertragen", - "cast_description": "Konfiguration verfügbarer Ziele", + "cast_description": "Verfügbare Cast-Ziele konfigurieren", "change_date": "Datum ändern", "change_description": "Beschreibung anpassen", "change_display_order": "Anzeigereihenfolge ändern", @@ -739,7 +739,7 @@ "change_password": "Passwort ändern", "change_password_description": "Dies ist entweder das erste Mal, dass du dich im System anmeldest, oder es wurde eine Anfrage zur Änderung deines Passworts gestellt. Bitte gib unten dein neues Passwort ein.", "change_password_form_confirm_password": "Passwort bestätigen", - "change_password_form_description": "Hallo {name}\n\nDas ist entweder das erste Mal dass du dich einloggst oder es wurde eine Anfrage zur Änderung deines Passwortes gestellt. Bitte gib das neue Passwort ein.", + "change_password_form_description": "Hallo {name}\n\nDas ist entweder das erste Mal, dass du dich einloggst oder es wurde eine Anfrage zur Änderung deines Passwortes gestellt. Bitte gib das neue Passwort ein.", "change_password_form_log_out": "Von allen Geräte abmelden", "change_password_form_log_out_description": "Es wird empfohlen, alle anderen Geräte abzumelden", "change_password_form_new_password": "Neues Passwort", @@ -754,7 +754,7 @@ "charging_requirement_mobile_backup": "Backup im Hintergrund erfordert Aufladen des Geräts", "check_corrupt_asset_backup": "Auf beschädigte Asset-Backups überprüfen", "check_corrupt_asset_backup_button": "Überprüfung durchführen", - "check_corrupt_asset_backup_description": "Führe diese Prüfung nur mit aktivierten WiFi durch, nachdem alle Dateien gesichert worden sind. Dieser Vorgang kann ein paar Minuten dauern.", + "check_corrupt_asset_backup_description": "Führe diese Prüfung nur mit aktivierten WLAN durch, nachdem alle Dateien gesichert worden sind. Dieser Vorgang kann ein paar Minuten dauern.", "check_logs": "Logs prüfen", "checksum": "Prüfsumme", "choose_matching_people_to_merge": "Wähle passende Personen zum Zusammenführen", @@ -807,7 +807,7 @@ "completed": "Abgeschlossen", "confirm": "Bestätigen", "confirm_admin_password": "Administrator Passwort bestätigen", - "confirm_delete_face": "Bist du sicher dass du das Gesicht von {name} aus der Datei entfernen willst?", + "confirm_delete_face": "Bist du sicher, dass du das Gesicht von {name} aus der Datei entfernen willst?", "confirm_delete_shared_link": "Bist du sicher, dass du diesen geteilten Link löschen willst?", "confirm_keep_this_delete_others": "Alle anderen Dateien im Stapel bis auf diese werden gelöscht. Bist du sicher, dass du fortfahren möchten?", "confirm_new_pin_code": "Neuen PIN-Code bestätigen", @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Fixiert", "crop_aspect_ratio_free": "Frei", "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Quadratisch", "curated_object_page_title": "Dinge", "current_device": "Aktuelles Gerät", "current_pin_code": "Aktueller PIN-Code", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM, yyyy", "dark": "Dunkel", - "dark_theme": "Dunkle Ansicht umschalten", + "dark_theme": "Auf dunkle Ansicht umschalten", "date": "Datum", "date_after": "Datum nach", "date_and_time": "Datum und Zeit", @@ -891,10 +892,8 @@ "day": "Tag", "days": "Tage", "deduplicate_all": "Alle Duplikate entfernen", - "deduplication_criteria_1": "Bildgröße in Bytes", - "deduplication_criteria_2": "Anzahl der EXIF-Daten", - "deduplication_info": "Deduplizierungsinformationen", - "deduplication_info_description": "Für die automatische Datei-Vorauswahl und das Deduplizieren aller Dateien berücksichtigen wir:", + "default_locale": "Standardgebietsschema", + "default_locale_description": "Datumsangaben und Zahlen werden entsprechend Ihrer Browsereinstellungen formatiert", "delete": "Löschen", "delete_action_confirmation_message": "Bist du sicher, dass du dieses Objekt löschen willst? Diese Aktion wird das Objekt in den Papierkorb des Servers verschieben und fragen, ob du es lokal löschen willst", "delete_action_prompt": "{count} gelöscht", @@ -970,7 +969,7 @@ "downloading_media": "Medien werden heruntergeladen", "drop_files_to_upload": "Lade Dateien hoch, indem du sie hierhin ziehst", "duplicates": "Duplikate", - "duplicates_description": "Löse jede Gruppe auf, indem du angibst, welche, wenn überhaupt, Duplikate sind", + "duplicates_description": "Löse jede Gruppe auf, indem du angibst, welche, wenn überhaupt, Duplikate sind.", "duration": "Dauer", "edit": "Bearbeiten", "edit_album": "Album bearbeiten", @@ -1024,7 +1023,7 @@ "enabled": "Aktiviert", "end_date": "Enddatum", "enqueued": "Eingereiht", - "enter_wifi_name": "WiFi-Name eingeben", + "enter_wifi_name": "WLAN-Name eingeben", "enter_your_pin_code": "PIN-Code eingeben", "enter_your_pin_code_subtitle": "Gib deinen PIN-Code ein, um auf den gesperrten Ordner zuzugreifen", "error": "Fehler", @@ -1081,9 +1080,9 @@ "something_went_wrong": "Ein Fehler ist eingetreten", "unable_to_add_album_users": "Benutzer konnten nicht zum Album hinzugefügt werden", "unable_to_add_assets_to_shared_link": "Datei konnte nicht zum geteilten Link hinzugefügt werden", - "unable_to_add_comment": "Es kann kein Kommentar hinzufügt werden", + "unable_to_add_comment": "Es kann kein Kommentar hinzugefügt werden", "unable_to_add_exclusion_pattern": "Ausschlussmuster konnte nicht hinzugefügt werden", - "unable_to_add_partners": "Es können keine Partner hinzufügt werden", + "unable_to_add_partners": "Es können keine Partner hinzugefügt werden", "unable_to_add_remove_archive": "Datei konnte nicht {archived, select, true {aus dem Archiv entfernt} other {zum Archiv hinzugefügt}} werden", "unable_to_add_remove_favorites": "Datei konnte nicht {favorite, select, true {von den Favoriten entfernt} other {zu den Favoriten hinzugefügt}} werden", "unable_to_archive_unarchive": "Konnte nicht {archived, select, true {archivieren} other {entarchivieren}}", @@ -1240,7 +1239,7 @@ "geolocation_instruction_location": "Klicke auf eine Datei mit GPS Koordinaten um diesen Standort zu verwenden oder wähle einen Standort direkt auf der Karte", "get_help": "Hilfe erhalten", "get_people_error": "Fehler beim Laden der Personen", - "get_wifiname_error": "WiFi-Name konnte nicht ermittelt werden. Vergewissere dich, dass die erforderlichen Berechtigungen erteilt wurden und du mit einem WiFi-Netzwerk verbunden bist", + "get_wifiname_error": "Das WLAN-Netz konnte nicht ermittelt werden. Vergewissere dich, dass die erforderlichen Berechtigungen erteilt wurden und du mit einem WLAN-Netzwerk verbunden bist", "getting_started": "Erste Schritte", "go_back": "Zurück", "go_to_folder": "Gehe zu Ordner", @@ -1279,7 +1278,7 @@ "home_page_add_to_album_err_local": "Es können lokale Elemente noch nicht zu Alben hinzugefügt werden, überspringen", "home_page_add_to_album_success": "{added} Elemente zu {album} hinzugefügt.", "home_page_album_err_partner": "Inhalte von Partnern können derzeit nicht zu Alben hinzugefügt werden", - "home_page_archive_err_local": "Kann lokale Elemente nicht archvieren, überspringen", + "home_page_archive_err_local": "Kann lokale Elemente nicht archivieren, überspringen", "home_page_archive_err_partner": "Inhalte von Partnern können nicht archiviert werden", "home_page_building_timeline": "Zeitachse wird erstellt", "home_page_delete_err_partner": "Inhalte von Partnern können nicht gelöscht werden, überspringe", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Titel des Albums", "licenses": "Lizenzen", "light": "Hell", + "light_theme": "Auf helle Ansicht umschalten", "like": "Gefällt mir", "like_deleted": "Like gelöscht", "link_motion_video": "Bewegungsvideo verknüpfen", + "link_to_docs": "Weitere Informationen finden Sie in der Dokumentation.", "link_to_oauth": "Mit OAuth verknüpfen", "linked_oauth_account": "Verknüpftes OAuth-Konto", "list": "Liste", @@ -1404,7 +1405,7 @@ "local_network_sheet_info": "Die App stellt über diese URL eine Verbindung zum Server her, wenn sie das angegebene WLAN-Netzwerk verwendet", "location": "Standort", "location_permission": "Standort Genehmigung", - "location_permission_content": "Um die automatische Umschaltfunktion nutzen zu können, benötigt Immich genaue Standortberechtigung, damit es den Namen des aktuellen WiFi-Netzwerks ermitteln kann", + "location_permission_content": "Um die automatische Umschaltfunktion nutzen zu können, benötigt Immich genaue Standortberechtigung, damit es den Namen des aktuellen WLAN-Netzwerks ermitteln kann", "location_picker_choose_on_map": "Auf der Karte auswählen", "location_picker_latitude_error": "Gültigen Breitengrad eingeben", "location_picker_latitude_hint": "Breitengrad eingeben", @@ -1562,7 +1563,7 @@ "name_or_nickname": "Name oder Nickname", "name_required": "Name ist erforderlich", "navigate": "Navigation", - "navigate_to_time": "Navigiere zu Zeit", + "navigate_to_time": "Zu Zeitpunkt navigieren", "network_requirement_photos_upload": "Mobile Daten verwenden, um Fotos zu sichern", "network_requirement_videos_upload": "Mobile Daten verwenden, um Videos zu sichern", "network_requirements": "Anforderungen ans Netzwerk", @@ -1665,7 +1666,7 @@ "other_devices": "Andere Geräte", "other_entities": "Andere Entitäten", "other_variables": "Sonstige Variablen", - "owned": "Eigenes", + "owned": "Eigene", "owner": "Besitzer", "page": "Seite", "partner": "Partner", @@ -1872,7 +1873,7 @@ "repair": "Reparatur", "repair_no_results_message": "Nicht auffindbare und fehlende Dateien werden hier angezeigt", "replace_with_upload": "Durch Upload ersetzen", - "repository": "Repositorium", + "repository": "Repository", "require_password": "Passwort erforderlich", "require_user_to_change_password_on_first_login": "Benutzer muss das Passwort beim ersten Login ändern", "rescan": "Erneut scannen", @@ -2011,7 +2012,7 @@ "selected_count": "{count, plural, other {# ausgewählt}}", "selected_gps_coordinates": "Ausgewählte GPS-Koordinaten", "send_message": "Nachricht senden", - "send_welcome_email": "Begrüssungsmail senden", + "send_welcome_email": "Begrüßungsmail senden", "server_endpoint": "Server-Endpunkt", "server_info_box_app_version": "App-Version", "server_info_box_server_url": "Server-URL", @@ -2171,7 +2172,7 @@ "sort_people_by_similarity": "Personen nach Ähnlichkeit sortieren", "sort_recent": "Neuestes Foto", "sort_title": "Titel", - "source": "Quellcode", + "source": "Quelle", "stack": "Stapel", "stack_action_prompt": "{count} gestapelt", "stack_duplicates": "Duplikate stapeln", @@ -2316,7 +2317,7 @@ "untagged": "Ohne Tag", "untitled_workflow": "Unbenannter Workflow", "up_next": "Weiter", - "update_location_action_prompt": "Aktualsiere den Ort von {count} ausgewählten Dateien mit:", + "update_location_action_prompt": "Aktualisiere den Ort von {count} ausgewählten Dateien mit:", "updated_at": "Aktualisiert", "updated_password": "Passwort aktualisiert", "upload": "Hochladen", @@ -2339,7 +2340,7 @@ "url": "URL", "usage": "Verwendung", "use_biometric": "Biometrie verwenden", - "use_browser_locale": "Benutze lokalen Browser", + "use_browser_locale": "Gebietsschema des Browsers verwenden", "use_browser_locale_description": "Datum, Uhrzeit und Zahlen werden entsprechend den Einstellungen Ihres Browsers formatiert", "use_current_connection": "Aktuelle Verbindung verwenden", "use_custom_date_range": "Stattdessen einen benutzerdefinierten Datumsbereich verwenden", @@ -2394,6 +2395,7 @@ "viewer_remove_from_stack": "Aus Stapel entfernen", "viewer_stack_use_as_main_asset": "An Stapelanfang", "viewer_unstack": "Stapel aufheben", + "visibility": "Sichtbarkeit", "visibility_changed": "Sichtbarkeit für {count, plural, one {# Person} other {# Personen}} geändert", "visual": "Visuell", "visual_builder": "Visueller Editor", @@ -2404,7 +2406,7 @@ "welcome": "Willkommen", "welcome_to_immich": "Willkommen bei Immich", "width": "Breite", - "wifi_name": "WiFi-Name", + "wifi_name": "WLAN-Netzwerk", "workflow_delete_prompt": "Bist du sicher, dass du diesen Workflow löschen willst?", "workflow_deleted": "Workflow gelöscht", "workflow_description": "Workflow-Beschreibung", @@ -2423,7 +2425,7 @@ "years_ago": "Vor {years, plural, one {einem Jahr} other {# Jahren}}", "yes": "Ja", "you_dont_have_any_shared_links": "Du hast keine geteilten Links", - "your_wifi_name": "Dein WiFi-Name", + "your_wifi_name": "Dein WLAN-Netzwerk", "zero_to_clear_rating": "drücke 0 um die Dateibewertung zurückzusetzen", "zoom_image": "Bild vergrößern", "zoom_to_bounds": "Auf Grenzen zoomen" diff --git a/i18n/el.json b/i18n/el.json index a991151155..bb25e0e811 100644 --- a/i18n/el.json +++ b/i18n/el.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Διορθώθηκε", "crop_aspect_ratio_free": "Ελεύθερο", "crop_aspect_ratio_original": "Αυθεντικό", + "crop_aspect_ratio_square": "Τετράγωνο", "curated_object_page_title": "Πράγματα", "current_device": "Τρέχουσα συσκευή", "current_pin_code": "Τρέχων κωδικός PIN", @@ -880,7 +881,7 @@ "daily_title_text_date": "Ε, MMM dd", "daily_title_text_date_year": "Ε, MMM dd, yyyy", "dark": "Σκούρο", - "dark_theme": "Εναλλαγή σκοτεινής εμφάνισης", + "dark_theme": "Μετάβαση σε σκοτεινό θέμα", "date": "Ημερομηνία", "date_after": "Ημερομηνία μετά", "date_and_time": "Ημερομηνία και ώρα", @@ -891,10 +892,8 @@ "day": "Ημέρα", "days": "Ημέρες", "deduplicate_all": "Αφαίρεση όλων των διπλότυπων", - "deduplication_criteria_1": "Μέγεθος εικόνας σε byte", - "deduplication_criteria_2": "Αριθμός δεδομένων EXIF", - "deduplication_info": "Πληροφορίες Αφαίρεσης Διπλοτύπων", - "deduplication_info_description": "Για να προεπιλέξουμε αυτόματα τα αρχεία και να αφαιρέσουμε τα διπλότυπα σε μαζική επεξεργασία, εξετάζουμε σε:", + "default_locale": "Προεπιλεγμένη γλώσσα", + "default_locale_description": "Μορφοποίηση ημερομηνιών και αριθμών, βάση της γλώσσας του προγράμματος περιήγησης", "delete": "Διαγραφή", "delete_action_confirmation_message": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το αρχείο; Αυτή η ενέργεια θα το μετακινήσει στον κάδο απορριμμάτων του διακομιστή και θα εμφανιστεί μήνυμα για το αν θέλετε να το διαγράψετε και τοπικά", "delete_action_prompt": "{count} διαγράφηκαν", @@ -970,7 +969,7 @@ "downloading_media": "Λήψη πολυμέσων", "drop_files_to_upload": "Σύρετε αρχεία εδώ για να τα ανεβάσετε", "duplicates": "Διπλότυπα", - "duplicates_description": "Επιλύστε κάθε ομάδα υποδεικνύοντας ποιες είναι διπλότυπες, εάν υπάρχουν", + "duplicates_description": "Επιλύστε κάθε ομάδα υποδεικνύοντας ποιες, εάν υπάρχουν, είναι διπλότυπες.", "duration": "Διάρκεια", "edit": "Επεξεργασία", "edit_album": "Επεξεργασία άλμπουμ", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Τίτλος άλμπουμ", "licenses": "Άδειες", "light": "Φωτεινό", + "light_theme": "Μετάβαση σε φωτεινό θέμα", "like": "Μου αρέσει", "like_deleted": "Το \"μου αρέσει\" διαγράφηκε", "link_motion_video": "Σύνδεσε βίντεο κίνησης", + "link_to_docs": "Για περισσότερες πληροφορίες, ανατρέξτε στην τεκμηρίωση.", "link_to_oauth": "Σύνδεση στον OAuth", "linked_oauth_account": "Ο OAuth λογαριασμός συνδέθηκε", "list": "Λίστα", @@ -2394,6 +2395,7 @@ "viewer_remove_from_stack": "Κατάργηση από τη Στοίβα", "viewer_stack_use_as_main_asset": "Χρήση ως Κύριο Στοιχείο", "viewer_unstack": "Αποστοίβαξε", + "visibility": "Ορατότητα", "visibility_changed": "Η ορατότητα άλλαξε για {count, plural, one {# άτομο} other {# άτομα}}", "visual": "Οπτικό", "visual_builder": "Οπτικός δημιουργός", diff --git a/i18n/eo.json b/i18n/eo.json index 310962fc48..087b2dcc5e 100644 --- a/i18n/eo.json +++ b/i18n/eo.json @@ -59,12 +59,12 @@ "backup_database_enable_description": "Ebligi kreon de kopioj de datumbazo", "backup_keep_last_amount": "Nombro de antaŭaj kopioj konservendaj", "backup_onboarding_1_description": "fora kopio, ĉu en nubo ĉu en alia fizika loko.", - "backup_onboarding_2_description": "lokaj kopioj ĉe diversaj aparatoj, inkluzive ĉefajn dosierojn kaj lokan sekurkopion de tiuj dosieroj.", + "backup_onboarding_2_description": "lokaj kopioj ĉe diversaj aparatoj, inkluzive ĉefajn dosierojn kaj lokan savkopion de tiuj dosieroj.", "backup_onboarding_3_description": "suma nombro de kopioj de viaj datumoj, inkluzive la originajn dosierojn, t.e. 1 fora kopio kaj 2 lokaj kopioj.", - "backup_onboarding_description": "Ni rekomendas strategion de 3-2-1 por protekti viajn datumojn. Vi devus havi sekurkopiojn kaj de viaj fotoj/videoj kaj de la datumbazo de Immich por esti plene sekura.", - "backup_onboarding_footer": "Por pli da informoj pri sekurkopioj kun Immich, bonvolu legi la dokumentaron.", + "backup_onboarding_description": "Ni rekomendas strategion de 3-2-1 por protekti viajn datumojn. Vi devus havi savkopiojn kaj de viaj fotoj/videoj kaj de la datumbazo de Immich por esti plene sekura.", + "backup_onboarding_footer": "Por pli da informoj pri savkopioj kun Immich, bonvolu legi la dokumentaron.", "backup_onboarding_parts_title": "Sekur-kopioj laŭ strategio 3-2-1 inkluzivas:", - "backup_onboarding_title": "Sekurkopioj", + "backup_onboarding_title": "Savkopioj", "backup_settings": "Agordaĵoj de kopiado de datumbazo", "backup_settings_description": "Administri agordojn pri datumbazo-nekropsio.", "cleared_jobs": "Taskoj forigitaj por: {job}", @@ -192,19 +192,19 @@ "machine_learning_url_description": "La URL-o de la maŝin-lerna servilo. Se vi donas pli ol unu URL-o, la sistemo provos ĉiun servilon unu post la alia ĝis kiam unu sukcese respondas, de la unua ĝis la lasta. Serviloj, kiuj ne respondas, estos dumtempe ignoritaj.", "maintenance_delete_backup": "Forigi savkopion", "maintenance_delete_backup_description": "La dosiero estos por ĉiam forigita.", - "maintenance_delete_error": "Malsukcesis forigi sekurkopion.", + "maintenance_delete_error": "Malsukcesis forigi savkopion.", "maintenance_restore_backup": "Restaŭri savkopion", - "maintenance_restore_backup_description": "Immich estos forigita kaj reinstalita de la elektita sekurkopio. Nova sekurkopio estos kreita antaŭe.", - "maintenance_restore_backup_different_version": "Tiu ĉi sekurkopio estis kreita per alia versio de Immich!", - "maintenance_restore_backup_unknown_version": "Ne eblis ektrovi version de la sekurkopio.", - "maintenance_restore_database_backup": "Restaŭri datumbazon el sekurkopio", - "maintenance_restore_database_backup_description": "Reveni al antaŭa stato de datumbazo pere de sekurkopio", + "maintenance_restore_backup_description": "Immich estos forigita kaj reinstalita de la elektita savkopio. Nova savkopio estos kreita antaŭe.", + "maintenance_restore_backup_different_version": "Tiu ĉi savkopio estis kreita per alia versio de Immich!", + "maintenance_restore_backup_unknown_version": "Ne eblis ektrovi version de la savkopio.", + "maintenance_restore_database_backup": "Restaŭri datumbazon el savkopio", + "maintenance_restore_database_backup_description": "Reveni al antaŭa stato de datumbazo pere de savkopio", "maintenance_settings": "Funkcitenado", "maintenance_settings_description": "Ŝalti la funkcitenadan reĝimon de Immich.", "maintenance_start": "Ŝanĝi al funkci-tenada reĝimo", "maintenance_start_error": "Malsukcesis ŝalti funkci-tenadan reĝimon.", - "maintenance_upload_backup": "Alŝuti dosieron de sekurkopio de datumbazo", - "maintenance_upload_backup_error": "Malsukcesis alŝuti sekurkopion, ĉu ĝi havas formaton .sql aŭ .sql.gz?", + "maintenance_upload_backup": "Alŝuti dosieron de savkopio de datumbazo", + "maintenance_upload_backup_error": "Malsukcesis alŝuti savkopion, ĉu ĝi havas formaton .sql aŭ .sql.gz?", "manage_concurrency": "Administri samtempajn taskojn", "manage_concurrency_description": "Vizitu la paĝon Taskoj por agordi la nombron de samtempaj taskoj", "manage_log_settings": "Administri agordojn pri protokolado", @@ -259,14 +259,14 @@ "notification_email_secure": "SMTPS", "notification_email_secure_description": "Uzi SMTPS (SMTP pere de TLS)", "notification_email_sent_test_email_button": "Sendi testmesaĝon kaj konservi", - "notification_email_setting_description": "Agordoj pri atentigoj per retmesaĝoj", + "notification_email_setting_description": "Agordoj pri sciigoj per retmesaĝoj", "notification_email_test_email": "Sendi testmesaĝon", "notification_email_test_email_failed": "Malsukcesis sendi testmesaĝon, kontrolu la agordaĵojn", "notification_email_test_email_sent": "Testmesaĝo estas sendita al {email}. Bonvolu kontroli ĉu ĝi bone alvenis.", "notification_email_username_description": "Uzantonomo por uzi kun la retmesaĝa servilo", - "notification_enable_email_notifications": "Ŝalti retmesaĝajn atentigilojn", - "notification_settings": "Agordoj pri atentigiloj", - "notification_settings_description": "Administri agordojn pri atentigiloj, inkluzive tiujn per retmesaĝoj", + "notification_enable_email_notifications": "Ŝalti sciigojn per retmesaĝo", + "notification_settings": "Agordoj pri sciigoj", + "notification_settings_description": "Administri agordojn pri sciigoj, inkluzive tiujn per retmesaĝoj", "oauth_auto_launch": "Startigi aŭtomate", "oauth_auto_launch_description": "Aŭtomate startigi la OAuth-procezon tuj ĉe la ensaluta paĝo", "oauth_auto_register": "Registri aŭtomate", @@ -348,8 +348,8 @@ "template_email_settings": "Ŝablonoj de retmesaĝoj", "template_email_update_album": "Ŝablono por retmesaĝo por ĝisdatigi albumon", "template_email_welcome": "Ŝablono de bonvena retmesaĝo", - "template_settings": "Ŝablonoj de atentigiloj", - "template_settings_description": "Administri tajloritajn skemojn por atentigiloj", + "template_settings": "Ŝablonoj de sciigoj", + "template_settings_description": "Administri tajloritajn skemojn por sciigoj", "theme_custom_css_settings": "Tajlorita CSS", "theme_custom_css_settings_description": "Vi povas ŝanĝi la vidan aspekton de Immich per CSS.", "theme_settings": "Agordoj de la etoso", @@ -443,7 +443,7 @@ "version_check_enabled_description": "Ebligi kontrolon de versio", "version_check_implications": "La funkcio de kontrolado de versio bezonas de temp' al tempan komunikadon kun {server}", "version_check_settings": "Kontrolo de versio", - "version_check_settings_description": "Ŝalti/malŝalti atentigilon pri novaj versioj", + "version_check_settings_description": "Ŝalti/malŝalti sciigojn pri novaj versioj", "video_conversion_job": "Transkodado de videoj", "video_conversion_job_description": "Transkodi videojn por pli vasta kongruo kun retumiloj kaj aparatoj" }, @@ -451,8 +451,8 @@ "admin_password": "Pasvorto de administranto", "administration": "Administrado", "advanced": "Altnivelaj agordoj", - "advanced_settings_clear_image_cache": "Malplenigi kaŝmemoron de bildoj", - "advanced_settings_clear_image_cache_error": "Malsukcesis malplenigi kaŝmemoron", + "advanced_settings_clear_image_cache": "Forviŝi kaŝmemoron de bildoj", + "advanced_settings_clear_image_cache_error": "Malsukcesis forviŝi kaŝmemoron", "advanced_settings_clear_image_cache_success": "Sukcesis liberigi {size}", "advanced_settings_enable_alternate_media_filter_subtitle": "Uzu tiun ĉi agordon por filtri elementojn dum sinkronigo laŭ alternativaj kriterioj. Uzu tion ĉi nur se vi vidas, ke la apo ne sukcesas trovi ĉiujn albumojn.", "advanced_settings_enable_alternate_media_filter_title": "[TESTATA] Uzi alternativan filtrilon por sinkronigi albumojn", @@ -527,7 +527,7 @@ "alt_text_qr_code": "Bildo de QR-kodo", "always_keep": "Ĉiam konservi", "always_keep_photos_hint": "La funkcio 'Liberigi spacon' konservos ĉiujn fotojn en tiu ĉi aparato.", - "always_keep_videos_hint": "La funkcio 'Liberigi spacon\" konservos ĉiujn videojn en tiu ĉi aparato.", + "always_keep_videos_hint": "La funkcio 'Liberigi spacon' konservos ĉiujn videojn en tiu ĉi aparato.", "anti_clockwise": "Kontraŭ-horloĝdirekte", "api_key": "API-ŝlosilo", "api_key_description": "Tio ĉi montriĝos nur unufoje. Certiĝu, ke vi kopiis ĝin antaŭ ol fermi la fenestron.", @@ -547,7 +547,7 @@ "archive_action_prompt": "{count} aldonita(j) al arĥivo", "archive_or_unarchive_photo": "Enarĥivigi aŭ elarĥivigi foton", "archive_page_no_archived_assets": "Neniuj elementoj trovitaj en arĥivo", - "archive_page_title": "Arĥivo ({count})", + "archive_page_title": "Arĥivigi ({count})", "archive_size": "Grandeco de arĥivo", "archive_size_description": "Agordu la grandecon de arĥivaj dosieroj por elŝuti (en GiB)", "archived": "Enarĥivigita(j)", @@ -615,11 +615,11 @@ "autoplay_slideshow": "Aŭtomate vidigi bildserion", "back": "Malantaŭen", "back_close_deselect": "Malantaŭen, fermi, aŭ malelekti", - "background_backup_running_error": "Sekurkopiado jam estas fone okazanta, do ne eblas nun lanĉi alian sekurkopiadon", + "background_backup_running_error": "Savkopiado jam estas fone okazanta, do ne eblas nun lanĉi alian savkopiadon", "background_location_permission": "Rajtigo fone uzi geografian lokon", "background_location_permission_content": "Por ŝanĝi retaliron dum fona funkciado, Immich devas *ĉiam* havi atingorajton al lokiga informo, por povi legi nomojn de vifiaj retoj", "background_options": "Agordoj pri fonaj funkcioj", - "backup": "Sekurkopio", + "backup": "Savkopio", "backup_album_selection_page_albums_device": "Albumoj en la aparato ({count})", "backup_album_selection_page_albums_tap": "Tuŝeti por inkluzivi, duoble tuŝeti por ekskludi", "backup_album_selection_page_assets_scatter": "Foje elementoj troviĝas disĵetitaj al pluraj albumoj, do albumoj povas esti inkluzivitaj aŭ ekskluzivitaj de la savkopiado.", @@ -675,23 +675,421 @@ "backup_controller_page_total_sub": "Ĉiuj unikaj fotoj kaj videoj el elektitaj albumoj", "backup_controller_page_turn_off": "Malŝalti malfonan savkopiadon", "backup_controller_page_turn_on": "Ŝalti malfonan savkopiadon", + "backup_controller_page_uploading_file_info": "Alŝutiĝas informoj pri dosiero", + "backup_err_only_album": "Ne eblas forigi la solan albumon", + "backup_error_sync_failed": "Sinkronigo malsukcesis.", + "backup_info_card_assets": "elementoj", + "backup_manual_cancelled": "Nuligita", + "backup_manual_in_progress": "Alŝuto jam progresas. Provu poste", + "backup_manual_success": "Sukceso", + "backup_manual_title": "Statuso de alŝuto", + "backup_options": "Agordoj pri savkopioj", + "backup_options_page_title": "Agordoj pri savkopioj", "backup_setting_subtitle": "Administri agordojn pri fona kaj malfona alŝutado", "backup_settings_subtitle": "Administri agordojn pri alŝutado", + "backup_upload_details_page_more_details": "Tuŝu ĉi tie por pli da detaloj", + "backward": "Malantaŭen", + "biometric_auth_enabled": "Biometria ensaluto ŝaltita", + "biometric_locked_out": "Via biometria ensalutkapablo estas blokita", + "biometric_no_options": "Neniuj biometriaj ebloj estas disponeblaj", + "biometric_not_available": "Tiu ĉi aparato ne havas funkcion por biometria ensaluto", + "birthdate_saved": "Naskiĝdato ŝukcese konservita", + "birthdate_set_description": "La naskiĝdato estas uzita por kalkuli la aĝon de la homo je la momento de iu foto.", + "blurred_background": "Malklarigita fono", + "bugs_and_feature_requests": "Cimoj kaj petoj por novaj funkcioj", + "build": "Versio", + "build_image": "Bildo de la versio", + "bulk_delete_duplicates_confirmation": "Ĉu vi certas, ke vi volas amase forigi {count, plural, one {# duoblaĵon} other {# duoblaĵojn}}? Tiel, vi konservos la plej grandan elementon el ĉiu grupo kaj porĉiame forigos duoblaĵojn. Ne eblas malfari tion!", + "bulk_keep_duplicates_confirmation": "Ĉu vi certas, ke vi volas konservi {count, plural, one {# duoblaĵon} other {# duoblaĵojn}}? Tio solvos ĉiujn duoblajn grupojn sen forigi ion ajn.", + "bulk_trash_duplicates_confirmation": "Ĉu vi certas, ke vi volas amase forigi {count, plural, one {# duoblaĵon} other {# duoblaĵojn}}? Tiel, vi konservos la plej grandan elementon el ĉiu grupo kaj porĉiame forigos duoblaĵojn.", + "buy": "Aĉeti Immich", + "cache_settings_clear_cache_button": "Forviŝi kaŝmemoron", + "cache_settings_clear_cache_button_title": "Forviŝas la kaŝmemoron de la apo. Tio malrapidigos la apon ĝis kiam ĝi finos rekonstrui la kaŝon.", + "cache_settings_duplicated_assets_clear_button": "FORVIŜI", + "cache_settings_duplicated_assets_subtitle": "Fotoj kaj videoj ignoritaj de la apo", + "cache_settings_duplicated_assets_title": "Duoblaĵoj ({count})", + "cache_settings_statistics_album": "Bildetoj de la biblioteko", + "cache_settings_statistics_full": "Plenaj bildoj", + "cache_settings_statistics_shared": "Bildetoj de dividitaj albumoj", + "cache_settings_statistics_thumbnail": "Bildetoj", + "cache_settings_statistics_title": "Uzo de kaŝmemoro", + "cache_settings_subtitle": "Regas la uzadon de kaŝmemoro fare de la apo", + "cache_settings_tile_subtitle": "Regas konduton pri loka stokado", + "cache_settings_tile_title": "Loka stokado", + "cache_settings_title": "Agordoj pri kaŝmemoro", + "camera": "Fotilo", + "camera_brand": "Fabrikanto de fotilo", + "camera_model": "Modelo de fotilo", + "cancel": "Nuligi", + "cancel_search": "Nuligi serĉon", + "canceled": "Nuligita", + "canceling": "Nuligado", + "cannot_merge_people": "Ne eblas kunfandi tiujn homojn", + "cannot_undo_this_action": "Ne eblas malfari tion!", + "cannot_update_the_description": "Ne eblas ĝisdatigi la priskribon", + "cast": "Elsendi", + "cast_description": "Agordi disponeblajn celojn por elsendoj", + "change_date": "Ŝanĝi daton", + "change_description": "Ŝanĝi priskribon", + "change_display_order": "Ŝanĝi vicordon de vidigo", + "change_expiration_time": "Ŝanĝi horon de eksvalidiĝo", + "change_location": "Ŝanĝi lokon", + "change_name": "Ŝanĝi nomon", + "change_name_successfully": "Nomo sukcese ŝanĝita", + "change_password": "Ŝanĝi pasvorton", + "change_password_description": "Aŭ tio ĉi estas via unua ensaluto, aŭ la sistemo ricevis peton ŝanĝigi vian pasvorton. Bonvolu tajpi novan pasvorton ĉi-sube.", + "change_password_form_confirm_password": "Konfirmu pasvorton", + "change_password_form_description": "Saluton {name},\n\nAŭ tio ĉi estas via unua ensaluto, aŭ la sistemo ricevis peton ŝanĝigi vian pasvorton. Bonvolu tajpi novan pasvorton ĉi-sube.", + "change_password_form_log_out": "Elsalutu ĉe ĉiuj aliaj aparatoj", + "change_password_form_log_out_description": "Oni rekomendas elsaluti ĉe ĉiuj aliaj aparatoj", + "change_password_form_new_password": "Nova pasvorto", + "change_password_form_password_mismatch": "Pasvortoj ne kongruas", + "change_password_form_reenter_new_password": "Re-tajpu novan pasvorton", + "change_pin_code": "Ŝanĝi PIN-kodon", + "change_trigger": "Ŝanĝi ekagilon", + "change_trigger_prompt": "Ĉu vi certas, ke vi volas ŝanĝi la ekagilon? Tio forigos ĉiujn ekzistantajn agojn kaj filtrilojn.", + "change_your_password": "Ŝanĝi vian pasvorton", + "changed_visibility_successfully": "Sukcese ŝanĝis videblecon", + "charging": "Ŝargado", + "charging_requirement_mobile_backup": "Por fona savkopiado, vi devas konekti la aparaton al ŝargilo", + "check_corrupt_asset_backup": "Kontroli por koruptitaj savkopioj de elementoj", + "check_corrupt_asset_backup_button": "Kontroli", + "check_corrupt_asset_backup_description": "Fari tiun ĉi kontrolon nur per vifio kaj post kiam ĉiuj elementoj havas savkopion. La kontrolo povas daŭri kelkajn minutojn.", + "check_logs": "Kontroli protokolojn", + "checksum": "Kontrolsumo", + "choose_matching_people_to_merge": "Elekti duobligitajn homojn por kunfandi", + "city": "Urbo", + "cleanup_confirm_description": "Immich trovis savkopion en la servilo de {count} elementoj (kreitajn antaŭ {date}). Ĉu vi volas forigi la kopiojn de el tiu ĉi aparato?", + "cleanup_confirm_prompt_title": "Forigi el tiu ĉi aparato?", + "cleanup_deleted_assets": "Movis {count} elementojn al la rubujo de la aparato", + "cleanup_deleting": "Movado al rubujo...", + "cleanup_found_assets": "Trovis {count} elementojn kun savkopio", + "cleanup_found_assets_with_size": "Trovis {count} elementojn kun savkopio ({size})", "cleanup_icloud_shared_albums_excluded": "Dividitaj albumoj ĉe iCloud estas ekskluditaj de la analizado", - "cleanup_step3_description": "Serĉi fotojn kaj videojn kun sekurkopio ĉe la servilo, laŭ la elektita limdato kaj filtriloj.", + "cleanup_no_assets_found": "Neniuj elementoj trovitaj per la ĉi-supraj kriterioj. La funkcio 'Liberigi spacon' forigas nur elementojn, kiuj havas savkopion ĉe la servilo", + "cleanup_preview_title": "Forigotaj elementoj ({count})", + "cleanup_step3_description": "Serĉi fotojn kaj videojn kun savkopio ĉe la servilo, laŭ la elektita limdato kaj filtriloj.", + "cleanup_step4_summary": "{count} elementoj (kreitaj antaŭ {date}) forigotaj de via aparato. Fotoj restos disponeblaj (pere de la servilo) en la apo Immich.", + "cleanup_trash_hint": "Por povi reuzi la liberigitan spacon, malfermu la 'galeria' apo de via aparato kaj malplenigu la rubujon", + "clear": "Forviŝi", + "clear_all": "Forviŝi ĉiujn kampojn", + "clear_all_recent_searches": "Forviŝi ĉiujn lastatempajn serĉojn", + "clear_file_cache": "Forviŝi dosier-kaŝon", + "clear_message": "Forviŝi mesaĝon", + "clear_value": "Forviŝi valoron", + "client_cert_dialog_msg_confirm": "Bone", + "client_cert_enter_password": "Tajpu pasvorton", + "client_cert_import": "Importi", + "client_cert_import_success_msg": "Atestilo sukcese importita", + "client_cert_invalid_msg": "Nevalida atestilo-dosiero, aŭ malĝusta pasvorto", + "client_cert_password_message": "Tajpu la pasvorton por tiu ĉi atestilo", + "client_cert_password_title": "Pasvorto de atestilo", + "client_cert_remove_msg": "Klient-atestilo forigita", + "client_cert_subtitle": "Nur la formato PKCS12 (.p12, .pfx) estas akceptita. Eblas importi/forigi atestilon nur antaŭ ol ensaluti", + "client_cert_title": "Klient-atestilo SSL [EKSPERIMENTA]", + "clockwise": "Horloĝdirekte", + "close": "Fermi", + "collapse": "Maletendi", + "collapse_all": "Maletendi ĉiujn", + "color": "Koloro", + "color_theme": "Kolor-temo", + "command": "Komando", + "command_palette_prompt": "Rapide trovi paĝojn, agojn aŭ komandojn", + "command_palette_to_close": "por fermi", + "command_palette_to_navigate": "por eniri", + "command_palette_to_select": "por elekti", + "command_palette_to_show_all": "por ĉion montri", + "comment_deleted": "Komento forigita", + "comment_options": "Agoj pri komento", + "comments_and_likes": "Komentoj kaj ŝatoj", + "comments_are_disabled": "Komentoj estas malebligitaj", + "common_create_new_album": "Krei novan albumon", + "completed": "Finfarita", + "confirm": "Konfirmi", + "confirm_admin_password": "Konfirmi administran pasvorton", + "confirm_delete_face": "Ĉu vi certas ke vi volas forigi la vizaĝon de {name} de tiu elemento?", + "confirm_delete_shared_link": "Ĉu vi certas, ke vi volas forigi tiun ligilon?", + "confirm_keep_this_delete_others": "Ĉiuj elementoj en la stako krom tiu ĉi estos forigitaj. Ĉu vi certas, ke vi volas tion?", + "confirm_new_pin_code": "Konfirmi novan PIN-kodon", + "confirm_password": "Konfirmi pasvorton", + "confirm_tag_face": "Ĉu vi volas etikedi tiun ĉi vizaĝon kiel {name}?", + "confirm_tag_face_unnamed": "Ĉu vi volas etikedi tiun ĉi vizaĝon?", + "connected_device": "Konektita aparato", + "connected_to": "Konektita al", + "contain": "Alĝustigi", + "context": "Kunteksto", + "continue": "Daŭrigi", + "control_bottom_app_bar_create_new_album": "Krei novan albumon", + "control_bottom_app_bar_delete_from_immich": "Forigi el Immich", + "control_bottom_app_bar_delete_from_local": "Forigi el aparato", + "control_bottom_app_bar_edit_location": "Redakti lokon", + "control_bottom_app_bar_edit_time": "Redakti daton kaj horon", + "control_bottom_app_bar_share_link": "Dividi ligilon", + "control_bottom_app_bar_share_to": "Dividi al", + "control_bottom_app_bar_trash_from_immich": "Movi al rubujo", + "copied_image_to_clipboard": "Bildo kopiita al tondujo.", + "copied_to_clipboard": "Kopiita al tondujo!", + "copy_error": "Kopii eraron", + "copy_file_path": "Kopii dosiervojon", + "copy_image": "Kopii bildon", + "copy_link": "Kopii ligilon", + "copy_link_to_clipboard": "Kopii ligilon al tondujo", + "copy_password": "Kopii pasvorton", + "copy_to_clipboard": "Kopii al tondujo", + "country": "Lando", + "cover": "Kovri", + "covers": "Kovriloj", + "create": "Krei", + "create_album": "Krei albumon", + "create_album_page_untitled": "Sen titolo", + "create_api_key": "Krei API-ŝlosilon", + "create_first_workflow": "Krei unuan laborfluon", + "create_library": "Krei bibliotekon", + "create_link": "Krei ligilon", + "create_link_to_share": "Krei ligilon por dividi", + "create_link_to_share_description": "Permesi, ke iu ajn kun la ligilo povu vidi la elektita(j)n foto(j)n", + "create_new": "KREI NOVAN", + "create_new_person": "Krei novan homon", + "create_new_person_hint": "Atribui elektitajn elementojn al nova homo", + "create_new_user": "Krei novan uzanton", + "create_shared_album_page_share_add_assets": "ALDONI ELEMENTOJN", + "create_shared_album_page_share_select_photos": "Elekti fotojn", + "create_shared_link": "Krei dividitan ligilon", + "create_tag": "Krei etikedon", + "create_tag_description": "Krei novan etikedon. Por ingitaj etikedoj, bonvolu tajpi la plenan vojon de la etikedo, inkluzive suprenstrekoj (\"/\").", + "create_user": "Krei uzanton", + "create_workflow": "Krei laborfluon", + "created": "Kreita", + "created_at": "Kreita", + "creating_linked_albums": "Kreado de ligitaj albumoj...", + "crop": "Stuci", + "crop_aspect_ratio_fixed": "Fiksita", + "crop_aspect_ratio_free": "Libera", + "crop_aspect_ratio_original": "Originala", + "crop_aspect_ratio_square": "Kvadrata", + "curated_object_page_title": "Objektoj", + "current_device": "Aktuala aparato", + "current_pin_code": "Aktuala PIN-kodo", + "current_server_address": "Aktuala adreso de servilo", + "custom_date": "Elekti propran daton", + "custom_locale": "Propra lokaĵaro", + "custom_locale_description": "Prezenti datojn, horojn kaj numerojn laŭ la elektita lingvo kaj regiono", + "custom_url": "Propra URL", + "cutoff_date_description": "Konservi fotojn el la lastaj…", + "cutoff_day": "{count, plural, one {tago} other {tagoj}}", + "cutoff_year": "{count, plural, one {jaro} other {jaroj}}", + "daily_title_text_date": "E, dd MMM", + "daily_title_text_date_year": "E, dd MMM, yyyy", + "dark": "Malhela", + "dark_theme": "Ŝanĝi al hela reĝimo", + "date": "Dato", + "date_after": "Dato post", + "date_and_time": "Dato kaj horo", + "date_before": "Dato antaŭ", + "date_format": "E, LLL d, y • h:mm a", + "date_of_birth_saved": "Naskiĝdato sukcese registrita", + "date_range": "Dato-intervalo", + "day": "Tago", + "days": "Tagoj", + "deduplicate_all": "Senduoblaĵigi ĉion", + "default_locale": "Defaŭlta lokaĵaro", + "default_locale_description": "Prezenti datojn kaj numerojn laŭ la lokaĵaro de via retumilo", + "delete": "Forigi", + "delete_action_confirmation_message": "Ĉu vi certas, ke vi volas forigi tiun ĉi elementon? Tiu ago movos ĝin al la rubujo ĉe la servilo, kaj demandos ĉu vi volas forigi ĝin de via aparato", + "delete_action_prompt": "{count} forigita(j)", + "delete_album": "Forigi albumon", + "delete_api_key_prompt": "Ĉu vi certas, ke vi volas forigi tiu ĉi API-ŝlosilon?", + "delete_dialog_alert": "Tiuj elementoj estos porĉiame forigitaj de Immich kaj de via aparato", + "delete_dialog_alert_local": "Tiuj ĉi elementoj estos forigitaj de via aparato, sed restos disponeblaj ĉe la servilo de Immich", + "delete_dialog_alert_local_non_backed_up": "Kelkaj el tiuj elementoj ne havas savkopion ĉe Immich kaj estos porĉiame forigitaj de via aparato", + "delete_dialog_alert_remote": "Tiuj elementoj estos porĉiame forigitaj de la Immich-servilo", + "delete_dialog_ok_force": "Forigi ĉiuokaze", + "delete_dialog_title": "Forigi por ĉiam", + "delete_duplicates_confirmation": "Ĉu vi certas, ke vi volas porĉiame forigi tiujn ĉi duoblaĵojn?", + "delete_face": "Forigi vizaĝon", + "delete_key": "Forigi ŝlosilon", + "delete_library": "Forigi bibliotekon", + "delete_link": "Forigi ligilon", + "delete_local_action_prompt": "{count} loke forigita(j)", + "delete_local_dialog_ok_backed_up_only": "Forigi nur elementojn, kiuj havas savkopiojn", + "delete_local_dialog_ok_force": "Forigi ĉiuokaze", + "delete_others": "Forigi la aliajn", + "delete_permanently": "Forigi por ĉiam", + "delete_permanently_action_prompt": "{count} forigita(j) por ĉiam", + "delete_shared_link": "Forigi dividitan ligilon", + "delete_shared_link_dialog_title": "Forigi dividitan ligilon", + "delete_tag": "Forigi etikedon", + "delete_tag_confirmation_prompt": "Ĉu vi certas, ke vi volas forigi la etikedon {tagName}?", + "delete_user": "Forigi uzanton", + "deleted_shared_link": "Dividita ligilo nun forigita", + "deletes_missing_assets": "Forigas elementojn, kiuj mankas ĉe la disko", + "description": "Priskribo", + "description_input_hint_text": "Aldoni priskribon...", + "description_input_submit_error": "Eraro okazis dum ĝisdatigo de priskribo. Kontrolu protokolon por pli da detaloj", + "deselect_all": "Malelekti ĉion", + "details": "Detaloj", + "direction": "Direkto", + "disable": "Malebligi", + "disabled": "Malebligita", + "disallow_edits": "Malpermesi redaktojn", + "discord": "Discord", + "discover": "Malkovri", + "discovered_devices": "Malkovritaj aparatoj", + "dismiss_all_errors": "Ignori ĉiujn erarojn", + "dismiss_error": "Ignori eraron", + "display_options": "Vidigi tiajn elementojn", + "display_order": "Vicordo de vidigo", + "display_original_photos": "Montri originalajn fotojn", + "display_original_photos_setting_description": "Prefere montri originalan foton anstataŭ bildeton se la originalo havas retumil-kongruan formaton. Tio povas malrapidigi vidigon de elementoj.", + "do_not_show_again": "Ne plu montri tiun ĉi mesaĝon", + "documentation": "Dokumentaro", + "done": "Finite", + "download": "Elŝuti", + "download_action_prompt": "Elŝutado de {count} elementoj", + "download_canceled": "Elŝuto nuligita", + "download_complete": "Elŝuto finita", + "download_enqueue": "Elŝuto en atendovico", + "download_error": "Eraro de elŝuto", + "download_failed": "Elŝuto malsukcesis", + "download_finished": "Elŝuto finiĝis", + "download_include_embedded_motion_videos": "Enkorpigitaj videoj", + "download_include_embedded_motion_videos_description": "Inkluzivi videon, enkorpigitan en mov-fotoj, kiel apartan dosieron", + "download_notfound": "Elŝuto ne trovita", + "download_original": "Elŝuti originalon", + "download_paused": "Elŝuto paŭzita", + "download_settings": "Elŝutado", "download_settings_description": "Administri agordojn pri elŝutado de elementoj", + "download_started": "Elŝuto komenciĝis", + "download_sucess": "Elŝuto sukcesis", + "download_sucess_android": "La elemento estas elŝutita al DCIM/Immich", + "download_waiting_to_retry": "Baldaŭ reprovos elŝuton", + "downloading": "Elŝutado", + "downloading_asset_filename": "Elŝutado de elemento {filename}", + "downloading_from_icloud": "Elŝutado el iCloud", + "downloading_media": "Elŝutado de elementoj", + "drop_files_to_upload": "Demetu dosierojn ĉi tien por alŝuti", + "duplicates": "Duoblaĵoj", + "duplicates_description": "Solvu ĉiun grupon indikante tiujn, kiuj estas eventualaj duoblaĵoj.", + "duration": "Daŭro", + "edit": "Redakti", + "edit_album": "Redakti albumon", + "edit_avatar": "Redakti profilbildon", + "edit_birthday": "Redakti naskiĝtagon", + "edit_date": "Redakti daton", + "edit_date_and_time": "Redakti daton kaj horon", + "edit_date_and_time_action_prompt": "{count} datoj kaj horoj redaktitaj", + "edit_date_and_time_by_offset": "Deŝovi daton", + "edit_date_and_time_by_offset_interval": "Nova intervalo: de {from} ĝis {to}", + "edit_description": "Redakti priskribon", + "edit_description_prompt": "Bonvolu elekti novan priskribon:", "edit_exclusion_pattern": "Redakti skemon de ekskludo", + "edit_faces": "Redakti vizaĝojn", + "edit_key": "Redakti ŝlosilon", + "edit_link": "Redakti ligilon", + "edit_location": "Redakti lokon", + "edit_location_action_prompt": "{count} loko(j) redaktita(j)", + "edit_location_dialog_title": "Loko", + "edit_name": "Redakti nomon", + "edit_people": "Redakti homojn", + "edit_tag": "Redakti etikedon", + "edit_title": "Redakti titolon", + "edit_user": "Redakti uzanton", + "edit_workflow": "Redakti laborfluon", + "editor": "Redaktilo", + "editor_close_without_save_prompt": "La ŝanĝoj ne konserviĝos", + "editor_close_without_save_title": "Ĉu fermi redaktilon?", + "editor_confirm_reset_all_changes": "Ĉu vi certas, ke vi volas forĵeti ĉiujn ŝanĝojn?", + "editor_discard_edits_confirm": "Forĵeti ŝanĝojn", + "editor_discard_edits_prompt": "Vi havas nekonservitajn ŝanĝojn. Ĉu vi certas, ke vi volas forigi ilin?", + "editor_discard_edits_title": "Forĵeti ŝanĝojn?", + "editor_edits_applied_error": "Malsukcesis apliki redaktojn", + "editor_edits_applied_success": "Redaktoj sukcese aplikiĝis", + "editor_flip_horizontal": "Inversigi horizontale", + "editor_flip_vertical": "Inversigi vertikale", + "editor_handle_corner": "{corner, select, top_left {Supra-maldekstra} top_right {Supra-dekstra} bottom_left {Suba-maldekstra} bottom_right {Suba-dekstra} other {Ajna}} angula tenilo", + "editor_handle_edge": "{edge, select, top {Supra} bottom {Suba} left {Maldekstra} right {Dekstra} other {Ajna}} randa tenilo", + "editor_orientation": "Orientiĝo", + "editor_reset_all_changes": "Forviŝi ŝanĝojn", + "editor_rotate_left": "Turni 90º kontraŭ-horloĝdirekte", + "editor_rotate_right": "Turni 90º horloĝdirekte", + "email": "Retadreso", + "email_notifications": "Sciigoj per retmesaĝo", + "empty_folder": "Tiu ĉi dosierujo estas malplena", + "empty_trash": "Malplenigi rubujon", + "empty_trash_confirmation": "Ĉu vi certas, ke vi volas malplenigi la rubujon? Ĉiuj elementoj en la rubujo estas por ĉiam forigitaj de Immich.\nNe eblas malfari tion!", + "enable": "Ŝalti", + "enable_backup": "Ŝalti savkopiadon", + "enable_biometric_auth_description": "Tajpu vian PIN-kodon por ŝalti biometrian ensalutadon", + "enabled": "Ŝaltita", + "end_date": "Fina dato", + "enqueued": "En atendovico", + "enter_wifi_name": "Tajpu nomon de vifio", + "enter_your_pin_code": "Tajpu vian PIN-kodon", + "enter_your_pin_code_subtitle": "Tajpu vian PIN-kodon por atingi la ŝlositan dosierujon", + "error": "Eraro", + "error_change_sort_album": "Malsukcesis ŝanĝi vicordon de album-elementoj", + "error_delete_face": "Eraro dum forigo de vizaĝo el elemento", + "error_getting_places": "Eraro dum serĉo de lokoj", + "error_loading_albums": "Eraro dum ŝargado de albumoj", + "error_loading_image": "Eraro dum ŝargado de bildo", + "error_loading_partners": "Eraro dum ŝargado de partneroj: {error}", + "error_retrieving_asset_information": "Eraro dum ŝargado de informoj pri elemento", + "error_saving_image": "Eraro: {error}", + "error_tag_face_bounding_box": "Eraro dum etikedado de vizaĝo - ne eblis trovi koordinatojn de kadro", + "error_title": "Eraro - io misis", + "error_while_navigating": "Eraro dum navigado al elemento", "errors": { + "cannot_navigate_next_asset": "Ne eblis navigi al sekva elemento", + "cannot_navigate_previous_asset": "Ne eblas navigi al antaŭa elemento", + "cant_apply_changes": "Ne eblas apliki ŝanĝojn", + "cant_change_activity": "Ne eblas {enabled, select, true {malŝalti} other {ŝalti}} tiun agon", + "cant_change_asset_favorite": "Ne eblas ŝanĝi preferaton por tiu elemento", + "cant_change_metadata_assets_count": "Ne eblas ŝanĝi metadatumojn de {count, plural, one {# elemento} other {# elementoj}}", + "cant_get_faces": "Ne eblas trovi vizaĝojn", + "cant_get_number_of_comments": "Ne eblas trovi nombron da komentoj", + "cant_search_people": "Ne eblas serĉi homojn", + "cant_search_places": "Ne eblas serĉi lokojn", + "error_adding_assets_to_album": "Eraro dum ŝargado de elementoj al albumo", + "error_adding_users_to_album": "Eraro dum aldono de uzantoj al albumo", + "error_deleting_shared_user": "Eraro dum forigo de dividita uzanto", + "error_downloading": "Eraro dum elŝuto de {filename}", + "error_hiding_buy_button": "Eraro dum kaŝado de butono 'aĉeti'", + "error_removing_assets_from_album": "Eraro dum forigo de elementoj el albumo; kontrolu konzolon por detaloj", + "error_selecting_all_assets": "Eraro dum elekto de ĉiuj elementoj", "exclusion_pattern_already_exists": "Tiu ĉi skemo de ekskludo jam ekzistas.", + "failed_to_create_album": "Malsukcesis krei albumon", + "failed_to_create_shared_link": "Malsukcesis krei dividitan ligilon", + "failed_to_edit_shared_link": "Malsukcesis redakti dividitan ligilon", + "failed_to_get_people": "Malsukcesis trovi homojn", + "failed_to_keep_this_delete_others": "Malsukcesis konservi tiun ĉi elementon kaj forigi la aliajn", + "failed_to_load_asset": "Malsukcesis ŝargi elementon", + "failed_to_load_assets": "Malsukcesis ŝargi elementojn", + "failed_to_load_notifications": "Malsukcesis ŝargi sciigojn", + "failed_to_load_people": "Malsukcesis ŝargi homojn", + "failed_to_remove_product_key": "Malsukcesis forigi var-ŝalosilon", + "failed_to_reset_pin_code": "Malsukcesis restarigi PIN-kodon", + "failed_to_stack_assets": "Malsukcesis staki elementojn", + "failed_to_unstack_assets": "Malsukcesis malstaki elementojn", + "failed_to_update_notification_status": "Malsukcesis ĝisdatigi statuson de sciigoj", + "incorrect_email_or_password": "Neĝusta retadreso aŭ pasvorto", + "library_folder_already_exists": "Tiu ĉi import-vojo jam ekzistas.", + "page_not_found": "Paĝo ne trovita", "unable_to_add_exclusion_pattern": "Ne eblas aldoni skemon de ekskludo", + "unable_to_create": "Ne eblis krei laborfluon", "unable_to_delete_exclusion_pattern": "Ne eblas forigi skemon de ekskludo", + "unable_to_delete_workflow": "Ne eblis forigi laborfluon", "unable_to_edit_exclusion_pattern": "Ne eblas redakti skemon de ekskludo", "unable_to_scan_libraries": "Ne eblas analizi biblitekojn", - "unable_to_scan_library": "Ne eblas analizi biblitekon" + "unable_to_scan_library": "Ne eblas analizi biblitekon", + "unable_to_update_workflow": "Ne eblis ĝisdatigi laborfluon" }, "exclusion_pattern": "Skemo de ekskludo", + "expand": "Etendi", + "expand_all": "Etendi ĉiujn", "explore": "Esplori", "explorer": "Foliumilo", + "free_up_space": "Liberigi spacon", + "free_up_space_description": "Vi forigos fotojn kaj/aŭ videojn, kiuj havas savkopiojn en la servilo, por liberigi spacon en via aparato. La kopioj en la servilo restos.", "general": "Ĝeneralaj", "manage_media_access_settings": "Malfermi agordaĵaron", "manage_the_app_settings": "Agordi la apon", @@ -699,12 +1097,26 @@ "networking_subtitle": "Administri agordojn pri finpunktoj de la servilo", "no_devices": "Neniuj aprobitaj aparatoj", "no_explore_results_message": "Alŝutu pli da fotoj por esplori vian kolekton.", + "no_notifications": "Neniuj sciigoj", "no_results_description": "Provu sinonimon aŭ pli ĝeneralan ŝlosilvorton", + "notification_permission_dialog_content": "Por ŝalti sciigojn, iru al Agordoj kaj elektu 'permesi'.", + "notification_permission_list_tile_content": "Donu permeson por ŝalti sciigojn.", + "notification_permission_list_tile_enable_button": "Ŝalti sciigojn", + "notification_permission_list_tile_title": "Permeso pri sciigoj", + "notification_toggle_setting_description": "Ŝalti sciigojn per retmesaĝo", + "notifications": "Sciigoj", + "notifications_setting_description": "Administri sciigojn", "preferences_settings_subtitle": "Administri agordojn pri la apo", "purchase_settings_server_activated": "La administranto respondecas pri la ŝlosilo de aŭtentikeco por la servilo", + "rating_clear": "Forviŝi pritakson", "refresh": "Denove", "rescan": "Reanalizi", "reset": "Restartigi", + "reset_sqlite_clear_app_data": "Forviŝi datumojn", + "reset_sqlite_confirmation": "Ĉu vi certas, ke vi volas forviŝi la datumojn de la apo? Tio forigos ĉiujn agordojn kaj elsalutigos vin.", + "reset_sqlite_confirmation_note": "Noto: vi devos relanĉi la apon por la forviŝo.", + "reset_sqlite_done": "Datumoj de la apo estas forviŝitaj. Bonvolu relanĉi Immich kaj ensalutu denove.", + "scaffold_body_error_unrecoverable": "Neriparebla eraro okazis. Bonvolu sendi al ni la eraron kaj la stakspuron per Discord aŭ per Github por ke ni povu helpi. Vi povas forviŝi la ĉi-subajn datumojn de la apo se vi volas.", "scan": "Analizi", "scan_all_libraries": "Analizi ĉiujn bibliotekojn", "scan_library": "Analizi", @@ -712,12 +1124,31 @@ "scanning": "Analizado", "scanning_for_album": "Serĉado de albumo...", "search_suggestion_list_smart_search_hint_1": "Inteligenta serĉado defaŭlte estas ŝaltita. Por serĉi metadatumojn, uzu sintakson tiel ", + "setting_notifications_subtitle": "Redakti viajn preferojn pri sciigoj", + "start_date": "Komenca dato", + "start_date_before_end_date": "Komenca dato devas esti antaŭ fina dato", + "trigger_description": "Evento, kiu ekfunkciigas la laborfluon", + "untitled_workflow": "Sentitola laborfluo", "upload_concurrency": "Nombro da samtempaj alŝutoj", "user_pin_code_settings_description": "Administri vian PIN-kodon", "user_purchase_settings_description": "Administri vian aĉeton", "view_links": "Vidi ligilojn", "week": "Semajno", "wifi_name": "Nomo de Vifireto", + "workflow_delete_prompt": "Ĉu vi certas, ke vi volas forigi tiun ĉi laborfluon?", + "workflow_deleted": "Laborfluo forigita", + "workflow_description": "Priskribo de laborfluo", + "workflow_info": "Informoj pri laborfluo", + "workflow_json": "JSON de laborfluo", + "workflow_json_help": "Redakti la agordojn pri la laborfluo per formato JSON. La ŝanĝoj sinkroniĝos al la vidiga konstruilo.", + "workflow_name": "Nomo de laborfluo", + "workflow_navigation_prompt": "Ĉu vi certas, ke vi volas foriri sen konservi viajn ŝanĝojn?", + "workflow_summary": "Resumo de laborfluo", + "workflow_update_success": "Laborfluo sukcese ĝisdatigita", + "workflow_updated": "Laborfluo ĝisdatigita", + "workflows": "Laborfluoj", + "workflows_help_text": "Laborfluo aŭtomatigas agojn pri elementoj, laŭ ekigiloj kaj filtriloj", "year": "Jaro", - "yes": "Jes" + "yes": "Jes", + "zero_to_clear_rating": "tuŝu 0 por forviŝi la pritakson de la elemento" } diff --git a/i18n/es.json b/i18n/es.json index a9a9194941..63c7e72081 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -17,13 +17,13 @@ "add_a_name": "Añadir un nombre", "add_a_title": "Añadir título", "add_action": "Añadir acción", - "add_action_description": "Haga clic para añadir una acción a realizar", + "add_action_description": "Haz clic para añadir una acción a realizar", "add_assets": "Añadir recursos", "add_birthday": "Añadir un cumpleaños", "add_endpoint": "Añadir punto final", "add_exclusion_pattern": "Añadir patrón de exclusión", "add_filter": "Añadir filtro", - "add_filter_description": "Haga clic para añadir una condición de filtro", + "add_filter_description": "Haz clic para añadir una condición de filtro", "add_location": "Añadir ubicación", "add_more_users": "Añadir más usuarios", "add_partner": "Añadir miembro", @@ -372,7 +372,7 @@ "transcoding_audio_codec": "Codec de audio", "transcoding_audio_codec_description": "Opus es la opción de mayor calidad, pero tiene menor compatibilidad con dispositivos o software antiguos.", "transcoding_bitrate_description": "Vídeos con una tasa de bits superior a la máxima o que no están en un formato aceptado", - "transcoding_codecs_learn_more": "Para obtener más información sobre la terminología utilizada aquí, consulte la documentación de FFmpeg sobre el códec H.264, el códec HEVC y el códec VP9.", + "transcoding_codecs_learn_more": "Para obtener más información sobre la terminología utilizada aquí, consulta la documentación de FFmpeg sobre el códec H.264, el códec HEVC y el códec VP9.", "transcoding_constant_quality_mode": "Modo de calidad constante", "transcoding_constant_quality_mode_description": "ICQ es mejor que CQP, pero algunos dispositivos de aceleración de hardware no admiten este modo. Al configurar esta opción, se preferirá el modo especificado cuando se utilice codificación basada en calidad. NVENC lo ignora porque no es compatible con ICQ.", "transcoding_constant_rate_factor": "Factor de tasa constante (-crf)", @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Fijado", "crop_aspect_ratio_free": "Libre", "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Cuadrado", "curated_object_page_title": "Objetos", "current_device": "Dispositivo actual", "current_pin_code": "PIN actual", @@ -880,7 +881,7 @@ "daily_title_text_date": "E dd, MMM", "daily_title_text_date_year": "E dd de MMM, yyyy", "dark": "Oscuro", - "dark_theme": "Alternar tema oscuro", + "dark_theme": "Cambiar a tema oscuro", "date": "Fecha", "date_after": "Fecha posterior", "date_and_time": "Fecha y hora", @@ -891,10 +892,8 @@ "day": "Día", "days": "Días", "deduplicate_all": "Deduplicar todo", - "deduplication_criteria_1": "Tamaño de imagen en bytes", - "deduplication_criteria_2": "Conteo de datos EXIF", - "deduplication_info": "Información de Deduplicación", - "deduplication_info_description": "Para automáticamente preseleccionar recursos y eliminar duplicados en conjunto, nosotros consideramos lo siguiente:", + "default_locale": "Configuración regional predeterminada", + "default_locale_description": "Formatear fechas y números según la configuración regional del navegador", "delete": "Eliminar", "delete_action_confirmation_message": "¿Está seguro que desea eliminar este recurso? Esta acción lo moverá a la papelera del servidor y le preguntará si desea eliminarlo localmente", "delete_action_prompt": "{count} eliminados", @@ -970,7 +969,7 @@ "downloading_media": "Descargando medios", "drop_files_to_upload": "Suelta los archivos en cualquier lugar para subirlos", "duplicates": "Duplicados", - "duplicates_description": "Resuelva cada grupo indicando, en cada caso, cuales están duplicados", + "duplicates_description": "Resuelve cada grupo indicando cuáles son duplicados, si los hay.", "duration": "Duración", "edit": "Editar", "edit_album": "Editar álbum", @@ -1165,7 +1164,7 @@ }, "errors_text": "Errores", "exclusion_pattern": "Patrón de exclusión", - "exif": "EXIF", + "exif": "Exif", "exif_bottom_sheet_description": "Añadir descripción…", "exif_bottom_sheet_description_error": "Error al actualizar la descripción", "exif_bottom_sheet_details": "DETALLES", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Título del álbum", "licenses": "Licencias", "light": "Claro", + "light_theme": "Cambiar a tema claro", "like": "Me gusta", "like_deleted": "Me gusta eliminado", "link_motion_video": "Enlazar vídeo en movimiento", + "link_to_docs": "Para más información, consulta la documentación.", "link_to_oauth": "Enlace a OAuth", "linked_oauth_account": "Cuenta OAuth vinculada", "list": "Lista", @@ -2394,6 +2395,7 @@ "viewer_remove_from_stack": "Quitar de la pila", "viewer_stack_use_as_main_asset": "Usar como recurso principal", "viewer_unstack": "Desapilar", + "visibility": "Visibilidad", "visibility_changed": "Visibilidad cambiada para {count, plural, one {# persona} other {# personas}}", "visual": "Visual", "visual_builder": "Constructor visual", diff --git a/i18n/et.json b/i18n/et.json index 12265a4e97..201b341d15 100644 --- a/i18n/et.json +++ b/i18n/et.json @@ -849,9 +849,12 @@ "create_link_to_share": "Lisa jagamiseks link", "create_link_to_share_description": "Luba kõigil, kellel on link, valitud pilte näha", "create_new": "LISA UUS", + "create_new_face": "Lisa uus nägu", "create_new_person": "Lisa uus isik", "create_new_person_hint": "Seosta valitud üksused uue isikuga", "create_new_user": "Lisa uus kasutaja", + "create_person": "Lisa isik", + "create_person_subtitle": "Lisa valitud näole nimi, et uus isik lisada ja sildistada", "create_shared_album_page_share_add_assets": "LISA ÜKSUSEID", "create_shared_album_page_share_select_photos": "Vali fotod", "create_shared_link": "Loo jagatud link", @@ -866,6 +869,7 @@ "crop_aspect_ratio_fixed": "Fikseeritud", "crop_aspect_ratio_free": "Vaba", "crop_aspect_ratio_original": "Originaalne", + "crop_aspect_ratio_square": "Ruut", "curated_object_page_title": "Asjad", "current_device": "Praegune seade", "current_pin_code": "Praegune PIN-kood", @@ -880,7 +884,7 @@ "daily_title_text_date": "d. MMMM", "daily_title_text_date_year": "d. MMMM yyyy", "dark": "Tume", - "dark_theme": "Lülita tume teema", + "dark_theme": "Vali tume teema", "date": "Kuupäev", "date_after": "Kuupäev pärast", "date_and_time": "Kuupäev ja kellaaeg", @@ -891,10 +895,8 @@ "day": "Päev", "days": "Päeva", "deduplicate_all": "Dedubleeri kõik", - "deduplication_criteria_1": "Pildi suurus baitides", - "deduplication_criteria_2": "EXIF andmete hulk", - "deduplication_info": "Dedubleerimise info", - "deduplication_info_description": "Üksuste automaatsel eelvalimisel ja duplikaatide eemaldamisel võetakse arvesse:", + "default_locale": "Vaikimisi lokaat", + "default_locale_description": "Vorminda kuupäevad ja arvud vastavalt brauseri lokaadile", "delete": "Kustuta", "delete_action_confirmation_message": "Kas oled kindel, et soovid selle üksuse kustutada? See toiming liigutab üksuse serveri prügikasti ja küsib, kas soovid selle lokaalselt kustutada", "delete_action_prompt": "{count} kustutatud", @@ -970,7 +972,7 @@ "downloading_media": "Üksuste allalaadimine", "drop_files_to_upload": "Failide üleslaadimiseks sikuta need ükskõik kuhu", "duplicates": "Duplikaadid", - "duplicates_description": "Lahenda iga grupp, valides duplikaadid, kui neid on", + "duplicates_description": "Lahenda iga grupp, valides duplikaadid, kui neid on.", "duration": "Kestus", "edit": "Muuda", "edit_album": "Muuda albumit", @@ -1387,9 +1389,11 @@ "library_page_sort_title": "Albumi pealkiri", "licenses": "Litsentsid", "light": "Hele", + "light_theme": "Vali hele teema", "like": "Meeldib", "like_deleted": "Meeldimine kustutatud", "link_motion_video": "Lingi liikuv video", + "link_to_docs": "Rohkema info saamiseks vaata dokumentatsiooni.", "link_to_oauth": "Ühenda OAuth", "linked_oauth_account": "OAuth konto ühendatud", "list": "Loend", @@ -2213,6 +2217,7 @@ "tag": "Silt", "tag_assets": "Sildista üksuseid", "tag_created": "Lisatud silt: {tag}", + "tag_face": "Sildista nägu", "tag_feature_description": "Fotode ja videote lehitsemine siltide kaupa grupeeritult", "tag_not_found_question": "Ei leia silti? Lisa uus silt.", "tag_people": "Sildista inimesi", @@ -2394,6 +2399,7 @@ "viewer_remove_from_stack": "Eemalda virnast", "viewer_stack_use_as_main_asset": "Kasuta peamise üksusena", "viewer_unstack": "Eralda", + "visibility": "Nähtavus", "visibility_changed": "{count, plural, one {# isiku} other {# isiku}} nähtavus muudetud", "visual": "Visuaalne", "visual_builder": "Visuaalne koostaja", diff --git a/i18n/eu.json b/i18n/eu.json index 04443a14f8..2ac0bc6e32 100644 --- a/i18n/eu.json +++ b/i18n/eu.json @@ -5,8 +5,10 @@ "acknowledge": "Onartu", "action": "Ekintza", "action_common_update": "Eguneratu", + "action_description": "Ekintza multzoa iragazitako aktiboetan aplikatzeko", "actions": "Ekintzak", "active": "Aktibo", + "active_count": "Aktibo: {count}", "activity": "Jarduera", "activity_changed": "Jarduera {enabled, select, true {ezarrita dago} other {ez dago ezarrita}}", "add": "Gehitu", @@ -20,6 +22,8 @@ "add_birthday": "Urtebetetzea gehitu", "add_endpoint": "Endpoint-a gehitu", "add_exclusion_pattern": "Bazterketa eredua gehitu", + "add_filter": "Gehitu iragazkia", + "add_filter_description": "Klik egin iragazki baldintza bat gehitzeko", "add_location": "Kokapena gehitu", "add_more_users": "Erabiltzaile gehiago gehitu", "add_partner": "Kidea gehitu", @@ -30,41 +34,78 @@ "add_to_album": "Albumera gehitu", "add_to_album_bottom_sheet_added": "{album} -(e)ra gehitu", "add_to_album_bottom_sheet_already_exists": "Dagoeneko {album} albumenean", + "add_to_album_bottom_sheet_some_local_assets": "Aktibo lokal batzuk ezin izan dira albumera gehitu", + "add_to_album_toggle": "Txandakatu aukeraketa {album}-arentzat", "add_to_albums": "Albumetara gehitu", "add_to_albums_count": "Albumetara gehitu ({count})", + "add_to_bottom_bar": "Gehitu hona", "add_to_shared_album": "Gehitu partekatutako albumera", + "add_upload_to_stack": "Gehitu karga pilara", "add_url": "URL-a gehitu", + "add_workflow_step": "Gehitu fluxu pausoa", "added_to_archive": "Artxibategira gehituta", - "added_to_favorites": "Faboritoetara gehituta", - "added_to_favorites_count": "{count, number} faboritoetara gehituta", + "added_to_favorites": "Gogokoetara gehituta", + "added_to_favorites_count": "{count, number} gogokoetara gehituta", "admin": { "add_exclusion_pattern_description": "Gehitu baztertze patroiak. *, ** eta ? karakterak erabil ditzazkezu (globbing). Adibideak: \"Raw\" izeneko edozein direktorioko fitxategi guztiak baztertzeko, erabili \"**/Raw/**\". \".tif\" amaitzen diren fitxategi guztiak baztertzeko, erabili \"**/*.tif\". Bide absolutu bat baztertzeko, erabili \"/baztertu/beharreko/bidea/**\".", "admin_user": "Administradore erabiltzailea", + "asset_offline_description": "Kanpo-liburutegiko aktibo hau es da diskoan aurkitu eta zaborrontzira mugitu da. Fitxategia liburutegian bertan mugitu bada, bilatu denbora lerroan dagokion aktibo berria. Aktiboa berreskuratzeko, mesedez ziurtatu fitxategiaren helbidea Immich-ek eskuratu dezakela eta eskaneatu liburutegia.", "authentication_settings": "Segurtasun Ezarpenak", "authentication_settings_description": "Kudeatu pasahitza, OAuth edo beste segurtasun konfigurazio bat", "authentication_settings_disable_all": "Seguru zaude saioa hasteko modu guztiak desgaitu nahi dituzula? Saioa hastea guztiz desgaitua izango da.", "authentication_settings_reenable": "Berriro gaitzeko, erabili Server Command.", "background_task_job": "Atzealdeko Lanak", + "backup_database": "Sortu datubasearen dump-a", + "backup_database_enable_description": "Gaitu datu base dump-ak", + "backup_keep_last_amount": "Mantendu beharreko dump kopurua", + "backup_onboarding_1_description": "kanpo kopia hodeiean edo beste kokaleku fisiko batean.", + "backup_onboarding_2_description": "kopia lokalak gailu ezberdinetan. Honek fitxategi nagusiak eta fitxategi horien babeskopia lokalak barneratzen ditu.", + "backup_onboarding_3_description": "datuen kopiak guztira, fitxategi originalak barne. Honek kanpo kopia 1 eta 2 kopia lokal barne ditu.", + "backup_onboarding_description": "3-2-1 babeskopia estrategia gomendatzen da zure datuak babesteko. Babeskopia soluzio osoa lortzeko, kargatutako irudien/bideoen kopiak gorde beharko zenituzke. Immich datu-basearena baita ere.", "backup_onboarding_footer": "Immich-en babes kopiei buruzko informazio gehiago nahi baduzu, mesedez irakurri dokumentazioa.", + "backup_onboarding_parts_title": "3-2-1 babes-kopia batek barne hartzen du:", "backup_onboarding_title": "Babes Kopiak", + "backup_settings": "Datu-base Dump-aren Ezarpenak", + "backup_settings_description": "Datu-base dump-aren ezarpenak kudeatu.", + "cleared_jobs": "Garbitutako lanak honentzak: {job}", + "config_set_by_file": "Konfigurazioa konfigurazio-fitxategi baten bidez dago ezarria", "confirm_delete_library": "Seguru zaude {library} ezabatu nahi duzula?", "confirm_email_below": "Konfirmatzeko, idatzi \"{email}\" azpian", "confirm_reprocess_all_faces": "Seguru zaude aurpegi guztiak berriro prozesatu nahi dituzula? Erabakiak jendearen izenak ere borratuko ditu.", "confirm_user_password_reset": "Seguru zaude {user}-ren pasahitza berrezarri nahi duzula?", "confirm_user_pin_code_reset": "Seguru zaude {user}-ren PIN kodea berrezarri nahi duzula?", + "copy_config_to_clipboard_description": "Kopiatu momentuko sistema-konfigurazioa JSON objetu formatuan arbelean", "create_job": "Gehitu zeregina", + "cron_expression": "Cron adierazpena", + "cron_expression_description": "Ezarri eskaneatzeko tartea cron formatua erabiliz. Informazio gehiago lortzeko, jo mesedez Crontab Guru adibidera", + "cron_expression_presets": "Cron adierazpenaren aurrezarpenak", "disable_login": "Desgaitu saio hastea", + "duplicate_detection_job_description": "Exekutatu ikasketa automatikoa aktiboetan antzeko irudiak detektatzeko. Bilaketa Adimendunean oinarritzen da", + "export_config_as_json_description": "Deskargatu momentuko sistema konfigurazioa JSON fitxategi moduan", + "external_libraries_page_description": "Administratzailearen kanpo liburutegi orrialdea", "face_detection": "Aurpegi detekzioa", "failed_job_command": "{command} komandoak hutsegin du {job} zereginerako", "image_format": "Formatua", "image_format_description": "WebP ereduak JPEG baino fitxategi txikiagoak sortzen ditu, baina motelagoa da kodifikatzen.", + "image_prefer_embedded_preview": "Nahiago aurrebista txertatua", + "image_prefer_wide_gamut": "Nahiago gamut zabala", "image_preview_title": "Aurreikusiaen Konfigurazioa", + "image_progressive": "Progresiboa", "image_quality": "Kalitatea", "image_resolution": "Erresoluzioa", "image_settings": "Argazkien Konfigurazioa", + "image_settings_description": "Kudeatu sortutako irudien kalitatea eta erresoluzioa", "image_thumbnail_title": "Argazki Txikien Konfigurazioa", + "import_config_from_json_description": "Inportatu sistema konfigurazioa JSON konfigurazio fitxategia kargatuz", + "job_concurrency": "{job} konkurrentzia", "job_created": "Zeregina sortuta", "job_settings": "Zereginaren konfigurazioa", + "job_settings_description": "Kudeatu lanen konkurrentzia", + "jobs_over_time": "Lanak denboran zehar", + "library_created": "Sortutako liburutegia: {library}", + "library_deleted": "Liburutegia ezabatuta", + "library_details": "Liburutegiaren xehetasunak", + "library_remove_folder_prompt": "Ziur zaude inportazio karpeta hau ezabatu nahi duzula?", "logging_enable_description": "Gaitu erregistroak", "logging_level_description": "Erregistroak gaituta daudenean, nolako erregistro maila erabili.", "logging_settings": "Erregistroak", diff --git a/i18n/fa.json b/i18n/fa.json index 39f098e3e6..0a29a09d83 100644 --- a/i18n/fa.json +++ b/i18n/fa.json @@ -5,6 +5,7 @@ "acknowledge": "متوجه شدم", "action": "عملکرد", "action_common_update": "به‌ روز‌رسانی", + "action_description": "تعدادی عملیات برای انجام روی داده‌های فیلتر شده", "actions": "عملکرد", "active": "فعال", "active_count": "فعال: {count}", @@ -14,8 +15,14 @@ "add_a_location": "افزودن یک مکان", "add_a_name": "افزودن نام", "add_a_title": "افزودن عنوان", + "add_action": "افزودن عملیات", + "add_action_description": "برای افزودن و اعمال یک عملیات کلیک کنید", + "add_assets": "افزودن عکس یا فیلم", "add_birthday": "افزودن تاریخ تولد", + "add_endpoint": "افزودن پایانه", "add_exclusion_pattern": "افزودن الگوی استثنا", + "add_filter": "افزودن فیلتر", + "add_filter_description": "برای افزودن یک شرط فیلتر کلیک کنید", "add_location": "افزودن مکان", "add_more_users": "افزودن کاربرهای بیشتر", "add_partner": "افزودن شریک", @@ -27,25 +34,38 @@ "add_to_album_bottom_sheet_added": "به آلبوم {album} اضافه شد", "add_to_album_bottom_sheet_already_exists": "قبلا در آلبوم {album} موجود است", "add_to_album_bottom_sheet_some_local_assets": "برخی از محتواهای محلی را نشد به آلبوم اضافه کرد", + "add_to_album_toggle": "تغییر وضعیت انتخاب برای {album}", "add_to_albums": "افزودن به آلبوم", "add_to_albums_count": "افزودن به آلبوم ها {count}", "add_to_bottom_bar": "افزودن به", "add_to_shared_album": "افزودن به آلبوم اشتراکی", "add_upload_to_stack": "افزودن فایل ارسالی به مجموعه", "add_url": "افزودن آدرس URL", + "add_workflow_step": "افزودن یک مرحله به روند کار", "added_to_archive": "به آرشیو اضافه شد", "added_to_favorites": "به علاقه مندی ها اضافه شد", "added_to_favorites_count": "{count, number} تا به علاقه مندی ها اضافه شد", "admin": { "add_exclusion_pattern_description": "الگوهای استثنا را اضافه کنید. پشتیبانی از گلابینگ با استفاده از *, ** و ? وجود دارد. برای نادیده گرفتن تمام فایل‌ها در هر دایرکتوری با نام \"Raw\"، از \"**/Raw/**\" استفاده کنید. برای نادیده گرفتن تمام فایل‌هایی که با \".tif\" پایان می‌یابند، از \"**/*.tif\" استفاده کنید. برای نادیده گرفتن یک مسیر مطلق، از \"/path/to/ignore/**\" استفاده کنید.", "admin_user": "ادمین", + "asset_offline_description": "این کتابخانه داده‌ی بیرونی روی محل ذخیره‌سازی پیدا نشد و به سطل آشغل منتقل شد. اگر فایل مورد نظر در داخل کتابخانه جابجاده شده، تایملاین خود را برای داده‌ی جدید چک کنید. برای بازیابی این داده لطفا مطمئن شوید که مسیر فایل زیر توسط Immich قابل دسترس است سپس کتابخانه را اسکن کنید.", "authentication_settings": "تنظیمات احراز هویت", "authentication_settings_description": "مدیریت رمز عبور، OAuth، و سایر تنظیمات احراز هویت", "authentication_settings_disable_all": "آیا مطمئن هستید که می‌خواهید تمام روش‌های ورود را غیرفعال کنید؟ ورود به طور کامل غیرفعال خواهد شد.", "authentication_settings_reenable": "برای فعال سازی مجدد از دستور سرور استفاده کنید.", "background_task_job": "وظایف پس‌زمینه", + "backup_database": "اضافه کردن یک نسخه کپی از دیتابیس", + "backup_database_enable_description": "فعال کردن کپی از دیتابیس", + "backup_keep_last_amount": "تعداد کپی‌های قبلی برای نگه داشتن", + "backup_onboarding_1_description": "کپی خارجی روی فضای ابری یا یک محل فیزیکی دیگر.", + "backup_onboarding_2_description": "کپی‌های محلی روی دستگاه‌های دیگر. این شامل فایل‌های اصلی و پشتیبان‌های محلی از آن فایل‌ها می‌باشد.", + "backup_onboarding_3_description": "مجموع کپی‌های داده‌های شما، به همراه فایل‌های اصلی. این شامل ۱ کپی خارجی و ۲ کپی محلی می‌باشد.", + "backup_onboarding_description": "برای حفاظت از اطلاعات شما یک روش پشتیبانی ۳-۲-۱ پیشنهاد می‌شود. برای یک پشتیبانی جامع، شما باید کپی‌هایی از عکس‌ها/ویدیوهای آپلود شده خود به همراه دیتابیس Immich نگه دارید.", "backup_onboarding_footer": "برای اطلاعات بیشتر درباره بک آپ گیری از Immich، لطفا به مستندات مراجعه کنید.", + "backup_onboarding_parts_title": "روش پشتیبانی ۳-۲-۱ شامل:", "backup_onboarding_title": "بک آپ ها", + "backup_settings": "تنظیمات کپی‌برداری از دیتابیس", + "backup_settings_description": "مدیریت تنظیمات کپی‌برداربی از دیتابیس.", "cleared_jobs": "وظایف پاک شده برای:{job}", "config_set_by_file": "تنظیم فعلی توسط یک فایل پیکربندی انجام شده است", "confirm_delete_library": "آیا مطمئن هستید که می‌خواهید کتابخانه {library} را حذف کنید؟", diff --git a/i18n/fi.json b/i18n/fi.json index 43edbb68e2..2ea62d41f6 100644 --- a/i18n/fi.json +++ b/i18n/fi.json @@ -891,10 +891,6 @@ "day": "Päivä", "days": "Päivää", "deduplicate_all": "Poista kaikkien kaksoiskappaleet", - "deduplication_criteria_1": "Kuvan koko tavuina", - "deduplication_criteria_2": "EXIF-datan määrä", - "deduplication_info": "Deduplikaatiotieto", - "deduplication_info_description": "Jotta voimme automaattisesti esivalita aineistot ja poistaa kaksoiskappaleet suurina erinä, tarkastelemme:", "delete": "Poista", "delete_action_confirmation_message": "Haluatko varmasti poistaa tämän aineiston? Tämä toiminto siirtää aineiston palvelimen roskakoriin ja kysyy, haluatko poistaa sen myös paikallisesti", "delete_action_prompt": "{count} poistettu", diff --git a/i18n/fr.json b/i18n/fr.json index ba5c64f12a..5a3ab9e77b 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Figé", "crop_aspect_ratio_free": "Libre", "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Carré", "curated_object_page_title": "Objets", "current_device": "Appareil actuel", "current_pin_code": "Code PIN actuel", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM, yyyy", "dark": "Sombre", - "dark_theme": "Activer le thème sombre", + "dark_theme": "Basculer sur le thème sombre", "date": "Date", "date_after": "Date après", "date_and_time": "Date et heure", @@ -891,10 +892,8 @@ "day": "Jour", "days": "Jours", "deduplicate_all": "Dédupliquer tout", - "deduplication_criteria_1": "Taille de l'image en octets", - "deduplication_criteria_2": "Nombre de données EXIF", - "deduplication_info": "Info de déduplication", - "deduplication_info_description": "Pour présélectionner automatiquement les médias et supprimer les doublons en masse, nous examinons :", + "default_locale": "Langue par défaut", + "default_locale_description": "Mettre en forme les dates et nombres en fonction de la langue de votre navigateur", "delete": "Supprimer", "delete_action_confirmation_message": "Êtes-vous sûr de vouloir supprimer ce média ? Cela déplacera le média dans la poubelle du serveur et vous demandera si vous voulez le supprimer localement", "delete_action_prompt": "{count} supprimé(s)", @@ -970,7 +969,7 @@ "downloading_media": "Téléchargement du média", "drop_files_to_upload": "Déposez les fichiers n'importe où pour envoyer", "duplicates": "Doublons", - "duplicates_description": "Examiner chaque groupe et indiquer s'il y a des doublons", + "duplicates_description": "Examiner chaque groupe et indiquer s'il y a des doublons.", "duration": "Durée", "edit": "Modifier", "edit_album": "Modifier l'album", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Titre de l'album", "licenses": "Licences", "light": "Clair", + "light_theme": "Basculer sur le thème clair", "like": "J'aime", "like_deleted": "Réaction « J'aime » supprimée", "link_motion_video": "Lier la photo animée", + "link_to_docs": "Pour plus d'informations, se référer à la documentation.", "link_to_oauth": "Lien au service OAuth", "linked_oauth_account": "Compte OAuth rattaché", "list": "Liste", @@ -2394,6 +2395,7 @@ "viewer_remove_from_stack": "Retirer de la pile", "viewer_stack_use_as_main_asset": "Utiliser comme élément principal", "viewer_unstack": "Dépiler", + "visibility": "Visibilité", "visibility_changed": "Visibilité changée pour {count, plural, one {# personne} other {# personnes}}", "visual": "Visuel", "visual_builder": "Constructeur visuel", diff --git a/i18n/ga.json b/i18n/ga.json index 46eb6e90a7..d493e3fe23 100644 --- a/i18n/ga.json +++ b/i18n/ga.json @@ -849,9 +849,12 @@ "create_link_to_share": "Cruthaigh nasc le roinnt", "create_link_to_share_description": "Lig do dhuine ar bith a bhfuil an nasc aige/aici an/na grianghraf/na grianghraif roghnaithe a fheiceáil", "create_new": "CRUTHAIGH NUA", + "create_new_face": "Cruthaigh aghaidh nua", "create_new_person": "Cruthaigh duine nua", "create_new_person_hint": "Sannadh sócmhainní roghnaithe do dhuine nua", "create_new_user": "Cruthaigh úsáideoir nua", + "create_person": "Cruthaigh duine", + "create_person_subtitle": "Cuir ainm leis an aghaidh roghnaithe chun an duine nua a chruthú agus a chlibeáil", "create_shared_album_page_share_add_assets": "CUIR SÓCMHAINNÍ LEIS", "create_shared_album_page_share_select_photos": "Roghnaigh Grianghraif", "create_shared_link": "Cruthaigh nasc comhroinnte", @@ -866,6 +869,7 @@ "crop_aspect_ratio_fixed": "Seasta", "crop_aspect_ratio_free": "Saor in aisce", "crop_aspect_ratio_original": "Bunaidh", + "crop_aspect_ratio_square": "Cearnóg", "curated_object_page_title": "Rudaí", "current_device": "Gléas reatha", "current_pin_code": "Cód PIN reatha", @@ -880,7 +884,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM, yyyy", "dark": "Dorcha", - "dark_theme": "Scoránaigh an téama dorcha", + "dark_theme": "Athraigh go téama dorcha", "date": "Dáta", "date_after": "Dáta i ndiaidh", "date_and_time": "Dáta agus Am", @@ -891,10 +895,8 @@ "day": "Lá", "days": "Laethanta", "deduplicate_all": "Dídhúblaigh Gach Rud", - "deduplication_criteria_1": "Méid na híomhá i mbéiteanna", - "deduplication_criteria_2": "Líon sonraí EXIF", - "deduplication_info": "Eolas Dídhúblála", - "deduplication_info_description": "Chun sócmhainní a réamhroghnú go huathoibríoch agus dúblaigh a bhaint i mórchóir, féachaimid ar:", + "default_locale": "Logán Réamhshocraithe", + "default_locale_description": "Formáidigh dátaí agus uimhreacha bunaithe ar shuíomh do bhrabhsálaí", "delete": "Scrios", "delete_action_confirmation_message": "An bhfuil tú cinnte gur mian leat an tsócmhainn seo a scriosadh? Bogfaidh an gníomh seo an tsócmhainn go dtí bruscar an fhreastalaí agus fiafróidh sé díot an mian leat í a scriosadh go háitiúil", "delete_action_prompt": "{count} scriosta", @@ -970,7 +972,7 @@ "downloading_media": "Ag íoslódáil na meán", "drop_files_to_upload": "Scaoil comhaid áit ar bith le huaslódáil", "duplicates": "Dúblaigh", - "duplicates_description": "Réitigh gach grúpa trína léiriú cé acu de na dúblaigh, más ann dóibh", + "duplicates_description": "Réitigh gach grúpa trína léiriú cé acu de na dúblaigh, más ann dóibh.", "duration": "Fad", "edit": "Cuir in Eagar", "edit_album": "Cuir albam in eagar", @@ -1387,9 +1389,11 @@ "library_page_sort_title": "Teideal an albaim", "licenses": "Ceadúnais", "light": "Solas", + "light_theme": "Athraigh go téama éadrom", "like": "Is maith liom", "like_deleted": "Scriosadh an rud is maith liom", "link_motion_video": "Físeán gluaiseachta nasctha", + "link_to_docs": "Le haghaidh tuilleadh eolais, féach ar an doiciméadú.", "link_to_oauth": "Nasc le OAuth", "linked_oauth_account": "Cuntas OAuth nasctha", "list": "Liosta", @@ -2213,6 +2217,7 @@ "tag": "Clib", "tag_assets": "Sócmhainní clibe", "tag_created": "Clib cruthaithe: {tag}", + "tag_face": "Aghaidh clibe", "tag_feature_description": "Ag brabhsáil grianghraif agus físeáin grúpáilte de réir topaicí clibeanna loighciúla", "tag_not_found_question": "Ní féidir clib a aimsiú? Cruthaigh clib nua.", "tag_people": "Daoine a Chlibeáil", @@ -2394,6 +2399,7 @@ "viewer_remove_from_stack": "Bain den Chruach", "viewer_stack_use_as_main_asset": "Úsáid mar Phríomhshócmhainn", "viewer_unstack": "Dí-Chruach", + "visibility": "Infheictheacht", "visibility_changed": "Athraíodh infheictheacht do {count, plural, one {# duine} other {# daoine}}", "visual": "Amhairc", "visual_builder": "Tógálaí amhairc", diff --git a/i18n/gl.json b/i18n/gl.json index 22cc4b9692..f65201deec 100644 --- a/i18n/gl.json +++ b/i18n/gl.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Fixado", "crop_aspect_ratio_free": "Libre", "crop_aspect_ratio_original": "Orixinal", + "crop_aspect_ratio_square": "Cadrado", "curated_object_page_title": "Cousas", "current_device": "Dispositivo actual", "current_pin_code": "Código PIN actual", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM, yyyy", "dark": "Escuro", - "dark_theme": "Alternar tema escuro", + "dark_theme": "Alternar a tema escuro", "date": "Data", "date_after": "Data posterior a", "date_and_time": "Data e Hora", @@ -891,10 +892,8 @@ "day": "Día", "days": "Días", "deduplicate_all": "Eliminar todos os duplicados", - "deduplication_criteria_1": "Tamaño da imaxe en bytes", - "deduplication_criteria_2": "Reconto de datos EXIF", - "deduplication_info": "Información de Deduplicación", - "deduplication_info_description": "Para preseleccionar automaticamente activos e eliminar duplicados masivamente, miramos:", + "default_locale": "Configuración rexional predeterminada", + "default_locale_description": "Formatee as datas e os números según a configuración rexional do seu navegador", "delete": "Eliminar", "delete_action_confirmation_message": "Está seguro de que quere eliminar este ficheiro? Esta acción moverá o ficheiro ao lixo do servidor e preguntaralle se tamén quere eliminalo localmente", "delete_action_prompt": "{count} eliminado(s)", @@ -970,7 +969,7 @@ "downloading_media": "Descargando medios", "drop_files_to_upload": "Solte ficheiros en calquera lugar para cargar", "duplicates": "Duplicados", - "duplicates_description": "Resolve cada grupo indicando cales, se os houber, son duplicados", + "duplicates_description": "Resolve cada grupo indicando cales, se os houber, son duplicados.", "duration": "Duración", "edit": "Editar", "edit_album": "Editar álbum", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Título do álbum", "licenses": "Licenzas", "light": "Claro", + "light_theme": "Cambiar a tema claro", "like": "Gústame", "like_deleted": "Gústame eliminado", "link_motion_video": "Ligar vídeo en movemento", + "link_to_docs": "Para máis información, consulte a documentación.", "link_to_oauth": "Ligar a OAuth", "linked_oauth_account": "Conta OAuth ligada", "list": "Lista", @@ -2394,6 +2395,7 @@ "viewer_remove_from_stack": "Eliminar da Pila", "viewer_stack_use_as_main_asset": "Usar como Activo Principal", "viewer_unstack": "Desapilar", + "visibility": "Visibilidade", "visibility_changed": "Visibilidade cambiada para {count, plural, one {# persoa} other {# persoas}}", "visual": "Visual", "visual_builder": "Construtor visual", diff --git a/i18n/gsw.json b/i18n/gsw.json index 4df40f233b..7893ea1482 100644 --- a/i18n/gsw.json +++ b/i18n/gsw.json @@ -835,10 +835,6 @@ "day": "Tag", "days": "Täg", "deduplicate_all": "Alli Duplikate entfernä", - "deduplication_criteria_1": "Bildgrössi in Bytes", - "deduplication_criteria_2": "Anzahl vo de EXIF Date", - "deduplication_info": "Deduplizierungsinformatione", - "deduplication_info_description": "Für d’automatischi Datei-Voruswahl und s’Dedupliziere vo allne Dateie berücksichtige mir:", "delete": "Lösche", "delete_action_confirmation_message": "Bisch du sicher, dass du dies Objekt lösche wotsch? Die Aktion verschiebt s’Objekt i de Papirkorb vom Server und fragt dich, ob du’s lokal löösche wotsch", "delete_action_prompt": "{count} glöscht", diff --git a/i18n/he.json b/i18n/he.json index 81d577d21a..3169c356ec 100644 --- a/i18n/he.json +++ b/i18n/he.json @@ -20,7 +20,7 @@ "add_action_description": "לחץ כדי להוסיף פעולה לביצוע", "add_assets": "הוסף תמונות", "add_birthday": "הוספת יום הולדת", - "add_endpoint": "הוסף כתובת URL", + "add_endpoint": "הוספת כתובת קצה", "add_exclusion_pattern": "הוספת דפוס החרגה", "add_filter": "הוסף סינון", "add_filter_description": "לחץ כדי להוסיף תנאי לסינון", @@ -53,7 +53,7 @@ "authentication_settings": "הגדרות התחברות", "authentication_settings_description": "ניהול סיסמה, OAuth, והגדרות התחברות אחרות", "authentication_settings_disable_all": "האם ברצונך להשבית את כל שיטות ההתחברות? כניסה למערכת תהיה מושבתת לחלוטין.", - "authentication_settings_reenable": "כדי לאפשר מחדש, יש להשתמש בפקודת שרת.", + "authentication_settings_reenable": "כדי לאפשר מחדש, יש להשתמש בפקודת שרת.", "background_task_job": "משימות רקע", "backup_database": "גיבוי מסד נתונים", "backup_database_enable_description": "אפשר גיבויי מסד נתונים", @@ -62,7 +62,7 @@ "backup_onboarding_2_description": "העתקים מקומיים במכשירים שונים. זה כולל את הקבצים הראשיים וגיבוי של הקבצים האלה באופן מקומי.", "backup_onboarding_3_description": "סך כל ההעתקים של הנתונים שלך, כולל הקבצים המקוריים. זה כולל העתק אחד מחוץ למקום השרת ושני העתקים מקומיים.", "backup_onboarding_description": "אסטרטגיית גיבוי 3-2-1 הינה מומלצת על מנת להגן על הנתונים שלך. עליך להשאיר העתקים של תמונות/סרטונים שהועלו כמו גם את מסד הנתונים של Immich עבור פתרון גיבוי מקיף.", - "backup_onboarding_footer": "עבור מידע נוסף על גיבוי Immich, נא לפנות אל התיעוד.", + "backup_onboarding_footer": "עבור מידע נוסף על גיבוי Immich, נא לפנות אל התיעוד.", "backup_onboarding_parts_title": "גיבוי 3-2-1 כולל:", "backup_onboarding_title": "גיבויים", "backup_settings": "הגדרות גיבוי", @@ -281,7 +281,7 @@ "oauth_role_claim_description": "הענק גישת מנהל באופן אוטומטי אם תביעה זו קיימת. ערך התביעה יכול להיות 'user' או 'admin'.", "oauth_settings": "OAuth", "oauth_settings_description": "ניהול הגדרות התחברות עם OAuth", - "oauth_settings_more_details": "למידע נוסף אודות תכונה זו, בדוק את התיעוד.", + "oauth_settings_more_details": "למידע נוסף אודות תכונה זו, בדוק את התיעוד.", "oauth_storage_label_claim": "דרישת תווית אחסון", "oauth_storage_label_claim_description": "הגדר אוטומטית את תווית האחסון של המשתמש לערך של דרישה זו.", "oauth_storage_quota_claim": "דרישת מכסת אחסון", @@ -330,7 +330,7 @@ "storage_template_hash_verification_enabled": "אימות גיבוב מופעל", "storage_template_hash_verification_enabled_description": "מאפשר אימות גיבוב, אין להשבית זאת אלא אם יש לך ודאות לגבי ההשלכות", "storage_template_migration": "העברת תבנית אחסון", - "storage_template_migration_description": "החל את ה{template} הנוכחית על תמונות שהועלו בעבר", + "storage_template_migration_description": "החלת ה{template} הנוכחי על תמונות שהועלו בעבר", "storage_template_migration_info": "תבנית האחסון תמיר את כל ההרחבות לאותיות קטנות. שינויים בתבנית יחולו רק על תמונות חדשות. כדי להחיל באופן רטרואקטיבי את התבנית על תמונות שהועלו בעבר, הפעל את {job}.", "storage_template_migration_job": "משימת העברת תבנית אחסון", "storage_template_more_details": "לפרטים נוספים אודות תכונה זו, עיין בתבנית האחסון ובהשלכותיה", @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "תוקן", "crop_aspect_ratio_free": "חינם", "crop_aspect_ratio_original": "מקורי", + "crop_aspect_ratio_square": "ריבוע", "curated_object_page_title": "דברים", "current_device": "מכשיר נוכחי", "current_pin_code": "קוד PIN הנוכחי", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, MMM dd", "daily_title_text_date_year": "E, MMM dd, yyyy", "dark": "כהה", - "dark_theme": "הפעל/כבה מצב כהה", + "dark_theme": "מעבר לערכת נושא כהה", "date": "תאריך", "date_after": "תאריך אחרי", "date_and_time": "תאריך ושעה", @@ -891,10 +892,8 @@ "day": "יום", "days": "ימים", "deduplicate_all": "ביטול כל הכפילויות", - "deduplication_criteria_1": "גודל תמונה בבתים", - "deduplication_criteria_2": "כמות נתוני EXIF", - "deduplication_info": "מידע על ביטול כפילויות", - "deduplication_info_description": "כדי לבחור מראש תמונות באופן אוטומטי ולהסיר כפילויות בכמות גדולה, אנו מסתכלים על:", + "default_locale": "אזור שפה ברירת מחדל", + "default_locale_description": "עיצוב תאריכים ומספרים בהתבסס על אזור השפה של הדפדפן שלך", "delete": "מחק", "delete_action_confirmation_message": "האם אתה בטוח שברצונך למחוק את התמונה הזאת? פעולה זו תעביר אותו לאשפה של השרת, ותשאל אם ברצונך למחוק אותו גם מהמכשיר המקומי", "delete_action_prompt": "{count} נמחקו", @@ -970,7 +969,7 @@ "downloading_media": "מוריד מדיה", "drop_files_to_upload": "שחרר קבצים בכל מקום כדי להעלות", "duplicates": "כפילויות", - "duplicates_description": "הפרד כל קבוצה על ידי ציון אילו, אם בכלל, הן כפילויות", + "duplicates_description": "הפרד כל קבוצה על ידי ציון אילו, אם בכלל, הן כפילויות.", "duration": "משך זמן", "edit": "ערוך", "edit_album": "ערוך אלבום", @@ -1007,6 +1006,8 @@ "editor_edits_applied_success": "עריכות יושמו בהצלחה", "editor_flip_horizontal": "הפוך אופקית", "editor_flip_vertical": "הפוך אנכית", + "editor_handle_corner": "ידית הפינה {corner, select, top_left {השמאלית־עליונה} top_right {הימנית־עליונה} bottom_left {השמאלית־תחתונה} bottom_right {הימנית־תחתונה} other {}}", + "editor_handle_edge": "ידית הקצה {edge, select, top {העליון} bottom {התחתון} left {השמאלי} right {הימני} other {}}", "editor_orientation": "כיוון", "editor_reset_all_changes": "איפוס שינויים", "editor_rotate_left": "סיבוב 90° נגד כיוון השעון", @@ -1072,7 +1073,7 @@ "failed_to_update_notification_status": "שגיאה בעדכון ההתראה", "incorrect_email_or_password": "דוא\"ל או סיסמה שגויים", "library_folder_already_exists": "נתיב הייבוא כבר מוגדר.", - "page_not_found": "העמוד לא נמצא ‪:/‬", + "page_not_found": "העמוד לא נמצא", "paths_validation_failed": "{paths, plural, one {נתיב # נכשל} other {# נתיבים נכשלו}} אימות", "profile_picture_transparent_pixels": "תמונות פרופיל אינן יכולות לכלול פיקסלים שקופים. נא להגדיל ו/או להזיז את התמונה.", "quota_higher_than_disk_size": "הגדרת מכסה גבוהה יותר מגודל הדיסק", @@ -1385,9 +1386,11 @@ "library_page_sort_title": "כותרת אלבום", "licenses": "רישיונות", "light": "בהיר", + "light_theme": "החלפה לערכת נושא בהירה", "like": "אהבתי", "like_deleted": "לייק נמחק", "link_motion_video": "קשר סרטון תנועה", + "link_to_docs": "למידע נוסף, יש לעיין בתיעוד.", "link_to_oauth": "קישור ל-OAuth", "linked_oauth_account": "חשבון OAuth מקושר", "list": "רשימה", @@ -1566,7 +1569,7 @@ "network_requirements": "דרישות רשת", "network_requirements_updated": "דרישות הרשת השתנו, תור הגיבוי אופס", "networking_settings": "רשת", - "networking_subtitle": "ניהול הגדרות כתובת URL של השרת", + "networking_subtitle": "ניהול הגדרות כתובת השרת", "never": "אף פעם", "new_album": "אלבום חדש", "new_api_key": "מפתח API חדש", @@ -1649,6 +1652,7 @@ "only_favorites": "רק מועדפים", "open": "פתח", "open_calendar": "פתיחת לוח שנה", + "open_in_browser": "פתיחה בדפדפן", "open_in_map_view": "פתח בתצוגת מפה", "open_in_openstreetmap": "פתח ב-OpenStreetMap", "open_the_search_filters": "פתח את מסנני החיפוש", @@ -2009,7 +2013,7 @@ "selected_gps_coordinates": "קואורדינטות GPS שנבחרו", "send_message": "שלח הודעה", "send_welcome_email": "שלח דוא\"ל קבלת פנים", - "server_endpoint": "כתובת URL של השרת", + "server_endpoint": "כתובת השרת", "server_info_box_app_version": "גרסת יישום", "server_info_box_server_url": "כתובת שרת", "server_offline": "השרת מנותק", @@ -2211,7 +2215,7 @@ "tag_assets": "תיוג תמונות", "tag_created": "נוצר תג: {tag}", "tag_feature_description": "עיון בתמונות וסרטונים שקובצו על ידי נושאי תג לוגיים", - "tag_not_found_question": "לא מצליח למצוא תג? צור תג חדש", + "tag_not_found_question": "לא ניתן למצוא תג? יצירת תג חדש.", "tag_people": "תייג אנשים", "tag_updated": "תג מעודכן: {tag}", "tagged_assets": "תויגו {count, plural, one {תמונה #} other {# תמונות}}", @@ -2391,6 +2395,7 @@ "viewer_remove_from_stack": "הסר מערימה", "viewer_stack_use_as_main_asset": "השתמש כתמונה ראשית", "viewer_unstack": "ביטול ערימה", + "visibility": "נראות", "visibility_changed": "הנראות השתנתה עבור {count, plural, one {אדם #} other {# אנשים}}", "visual": "חזותי", "visual_builder": "בונה חזותי", diff --git a/i18n/hi.json b/i18n/hi.json index bce419160e..668952775a 100644 --- a/i18n/hi.json +++ b/i18n/hi.json @@ -891,10 +891,6 @@ "day": "दिन", "days": "दिन", "deduplicate_all": "सभी को डुप्लिकेट करें", - "deduplication_criteria_1": "छवि का आकार बाइट्स में", - "deduplication_criteria_2": "EXIF डेटा की संख्या", - "deduplication_info": "डुप्लीकेशन हटाने की जानकारी", - "deduplication_info_description": "परिसंपत्तियों का स्वचालित रूप से पूर्व-चयन करने और डुप्लिकेट को थोक में हटाने के लिए, हम निम्न पर ध्यान देते हैं:", "delete": "हटाएँ", "delete_action_confirmation_message": "क्या आप वाकई इस आइटम को हटाना चाहते हैं? यह कार्रवाई आइटम को सर्वर की ट्रैश में ले जाएगी और स्थानीय रूप से हटाने के लिए पुष्टि मांगेगी", "delete_action_prompt": "{count} हटाए गए", diff --git a/i18n/hr.json b/i18n/hr.json index 259ee2fd8a..5b8f19d174 100644 --- a/i18n/hr.json +++ b/i18n/hr.json @@ -5,7 +5,7 @@ "acknowledge": "Potvrdi", "action": "Akcija", "action_common_update": "Ažuriranje", - "action_description": "Skup radnji koje se izvršavaju nad filtriran", + "action_description": "Skup radnji koje se izvršavaju nad filtriranim stavkama", "actions": "Akcije", "active": "Aktivno", "active_count": "Aktivno:{count}", @@ -203,7 +203,10 @@ "maintenance_settings_description": "Stavi Immich u način održavanja.", "maintenance_start": "Prebaci se u način održavanja", "maintenance_start_error": "Neuspjelo pokretanje načina održavanja.", + "maintenance_upload_backup": "Prenesi bakup baze podataka", + "maintenance_upload_backup_error": "Prijenos sigurnosne kopije nesuopješan, je li datoteka tipa .sql-.sql.gz?", "manage_concurrency": "Upravljanje Istovremenošću", + "manage_concurrency_description": "Idi na stranicu poslova za upravljanje konkurentošću", "manage_log_settings": "Upravljanje postavkama zapisivanje", "map_dark_style": "Tamni stil", "map_enable_description": "Omogući značajke karte", @@ -269,7 +272,7 @@ "oauth_auto_register": "Automatska registracija", "oauth_auto_register_description": "Automatski registrirajte nove korisnike nakon prijave s OAuth", "oauth_button_text": "Tekst gumba", - "oauth_client_secret_description": "Obavezno ukoliko PKCE (Proof Key for Code Exchange) nije podržan od strane OAuth pružatelja", + "oauth_client_secret_description": "Obaveznoya privatnog klijenta ili ukoliko PKCE (Proof Key for Code Exchange) nije podržan od javnog klijenta.", "oauth_enable_description": "Prijavite se putem OAutha", "oauth_mobile_redirect_uri": "Mobilnog Preusmjeravanja URI", "oauth_mobile_redirect_uri_override": "Nadjačavanje URI-preusmjeravanja za mobilne uređaje", @@ -287,15 +290,20 @@ "oauth_storage_quota_default_description": "Kvota u GiB koja će se koristiti kada nema zahtjeva.", "oauth_timeout": "Istek vremena zahtjeva", "oauth_timeout_description": "Istek vremena zahtjeva je u milisekundama", + "ocr_job_description": "Koristi strojno učenje za prepoznavanje teksta na slikama", "password_enable_description": "Prijava s email adresom i zaporkom", "password_settings": "Prijava zaporkom", "password_settings_description": "Upravljanje postavkama za prijavu zaporkom", "paths_validated_successfully": "Sve su putanje uspješno potvrđene", "person_cleanup_job": "Čišćenje lica", + "queue_details": "Detalji reda čekanja", + "queues": "Posloviu redu čekanja", + "queues_page_description": "Administracija redova čekanja", "quota_size_gib": "Veličina kvote (GiB)", "refreshing_all_libraries": "Osvježavanje svih biblioteka", "registration": "Registracija administratora", "registration_description": "Budući da ste prvi korisnik na sustavu, bit ćete dodijeljeni administratorsku ulogu i odgovorni ste za administrativne poslove, a dodatne korisnike kreirat ćete sami.", + "remove_failed_jobs": "Makni neuspješne poslove", "require_password_change_on_login": "Zahtijevajte od korisnika promjenu lozinke pri prvoj prijavi", "reset_settings_to_default": "Vrati postavke na zadane", "reset_settings_to_recent_saved": "Resetirajte postavke na nedavno spremljene postavke", @@ -303,13 +311,15 @@ "search_jobs": "Traži zadatke…", "send_welcome_email": "Pošaljite email dobrodošlice", "server_external_domain_settings": "Vanjska domena", - "server_external_domain_settings_description": "Domena za javno dijeljene linkove, uključujući http(s)://", + "server_external_domain_settings_description": "Domena za vanjske poveznice", "server_public_users": "Javni korisnici", "server_public_users_description": "Svi korisnici (ime i e-pošta) navedeni su prilikom dodavanja korisnika u dijeljene albume. Kada je onemogućeno, popis korisnika bit će dostupan samo korisnicima administratora.", "server_settings": "Postavke servera", "server_settings_description": "Upravljanje postavkama servera", + "server_stats_page_description": "Statistika servera za administratore", "server_welcome_message": "Poruka dobrodošlice", "server_welcome_message_description": "Poruka koja je prikazana na prijavi.", + "settings_page_description": "Administratorske postavke", "sidecar_job": "Sidecar metapodaci", "sidecar_job_description": "Otkrijte ili sinkronizirajte sidecar metapodatke iz datotečnog sustava", "slideshow_duration_description": "Broj sekundi za prikaz svake slike", @@ -401,7 +411,7 @@ "transcoding_tone_mapping": "Tonsko preslikavanje", "transcoding_tone_mapping_description": "Pokušava sačuvati izgled HDR videozapisa kada se pretvori u SDR. Svaki algoritam čini različite kompromise za boju, detalje i svjetlinu. Hable čuva detalje, Mobius čuva boju, a Reinhard svjetlinu.", "transcoding_transcode_policy": "Pravila transkodiranja", - "transcoding_transcode_policy_description": "Pravila o tome kada se video treba transkodirati. HDR videozapisi uvijek će biti transkodirani (osim ako je transkodiranje onemogućeno).", + "transcoding_transcode_policy_description": "Pravila o tome kada se video treba transkodirati. HDR videozapisi i videozapisi sa formatoom piksela razlicitim od ZUV 4:2:0 uvijek će biti transkodirani (osim ako je transkodiranje onemogućeno).", "transcoding_two_pass_encoding": "Kodiranje u dva prolaza", "transcoding_two_pass_encoding_setting_description": "Transkodiranje u dva prolaza za proizvodnju bolje kodiranih videozapisa. Kada je omogućena maksimalna brzina prijenosa (potrebna za rad s H.264 i HEVC), ovaj način rada koristi raspon brzine prijenosa na temelju maksimalne brzine prijenosa i zanemaruje CRF. Za VP9, CRF se može koristiti ako je maksimalna brzina prijenosa onemogućena.", "transcoding_video_codec": "Video kodek", @@ -428,6 +438,8 @@ "user_restore_scheduled_removal": "Vrati korisnika - zakazano uklanjanje {date, date, long}", "user_settings": "Korisničke postavke", "user_settings_description": "Upravljanje korisničkim postavkama", + "user_successfully_removed": "Korisnik {email} je uspješno uklonjen.", + "users_page_description": "Administracija korisnika stranica", "version_check_enabled_description": "Omogući provjeru verzije", "version_check_implications": "Značajka provjere verzije oslanja se na periodičnu komunikaciju s {server}", "version_check_settings": "Provjera verzije", @@ -439,6 +451,9 @@ "admin_password": "Admin lozinka", "administration": "Administracija", "advanced": "Napredno", + "advanced_settings_clear_image_cache": "Obriši međuspremnik slika", + "advanced_settings_clear_image_cache_error": "Neuspješno čišćenje međuspremnika slika", + "advanced_settings_clear_image_cache_success": "Uspješno očišćeno {size}", "advanced_settings_enable_alternate_media_filter_subtitle": "Koristite ovu opciju za filtriranje medija tijekom sinkronizacije na temelju alternativnih kriterija. Pokušajte ovo samo ako imate problema s aplikacijom koja ne prepoznaje sve albume.", "advanced_settings_enable_alternate_media_filter_title": "[EKSPERIMENTALNO] Koristite alternativni filter za sinkronizaciju albuma na uređaju", "advanced_settings_log_level_title": "Razina zapisivanja: {level}", @@ -458,6 +473,7 @@ "age_months": "Dob {months, plural, one {# mjesec} other {# mjeseca}}", "age_year_months": "Dob 1 godina, {months, plural, one {# mjesec} other {# mjeseca}}", "age_years": "{years, plural, other {Dob #}}", + "album": "Album", "album_added": "Album dodan", "album_added_notification_setting_description": "Primite obavijest e-poštom kada ste dodani u dijeljeni album", "album_cover_updated": "Naslovnica albuma ažurirana", @@ -474,10 +490,12 @@ "album_remove_user": "Ukloni korisnika?", "album_remove_user_confirmation": "Jeste li sigurni da želite ukloniti {user}?", "album_search_not_found": "Nema albuma koji odgovaraju vašem pretraživanju", + "album_selected": "Album odabran", "album_share_no_users": "Čini se da ste podijelili ovaj album sa svim korisnicima ili nemate nijednog korisnika s kojim biste ga dijelili.", "album_summary": "Sažetak albuma", "album_updated": "Album ažuriran", "album_updated_setting_description": "Primite obavijest e-poštom kada dijeljeni album ima nove stavke", + "album_upload_assets": "Učitaj stavku s vlastitog računala i dodaj u album", "album_user_left": "Napušten {album}", "album_user_removed": "Uklonjen {user}", "album_viewer_appbar_delete_confirm": "Jeste li sigurni da želite izbrisati ovaj album s vašeg računa?", @@ -495,15 +513,21 @@ "albums_default_sort_order_description": "Početni redoslijed sortiranja stavki prilikom izrade novih albuma.", "albums_feature_description": "Zbirke stavki koje se mogu dijeliti s drugim korisnicima.", "albums_on_device_count": "Albumi na uređaju ({count})", + "albums_selected": "{count, plural, one {# odabrani album} other {# odabrani albumi}}", "all": "Sve", "all_albums": "Svi albumi", "all_people": "Sve osobe", + "all_photos": "Sve slike", "all_videos": "Svi videi", "allow_dark_mode": "Dozvoli tamni način", "allow_edits": "Dozvoli izmjene", "allow_public_user_to_download": "Dopusti javnom korisniku preuzimanje", "allow_public_user_to_upload": "Dopusti javnom korisniku učitavanje", + "allowed": "Dopušteno", "alt_text_qr_code": "Slika QR koda", + "always_keep": "Uvijek zadrži", + "always_keep_photos_hint": "Oslobodi prostora će zadržati sve slike na ovom uređaju.", + "always_keep_videos_hint": "Oslobodi prostora će zadržati sve videe na ovom uređaju.", "anti_clockwise": "Suprotno smjeru kazaljke na satu", "api_key": "API Ključ", "api_key_description": "Ova će vrijednost biti prikazana samo jednom. Obavezno ju kopirajte prije zatvaranja prozora.", @@ -529,10 +553,12 @@ "archived_count": "{count, plural, one {Arhivirana #} few {Arhivirane #} other {Arhivirano #}}", "are_these_the_same_person": "Je li ovo ista osoba?", "are_you_sure_to_do_this": "Jeste li sigurni da to želite učiniti?", + "array_field_not_fully_supported": "Polja niza zahtijevaju ručno JSON editiranje", "asset_action_delete_err_read_only": "Nije moguće izbrisati stavke samo za čitanje, preskakanje", "asset_action_share_err_offline": "Nije moguće dohvatiti izvanmrežne stavke, preskakanje", "asset_added_to_album": "Dodano u album", "asset_adding_to_album": "Dodavanje u album…", + "asset_created": "Stavka stvorena", "asset_description_updated": "Opis stavke je ažuriran", "asset_filename_is_offline": "Stavka {filename} je izvan mreže", "asset_has_unassigned_faces": "Stavka ima nedodijeljena lica", @@ -545,6 +571,9 @@ "asset_list_layout_sub_title": "Raspored", "asset_list_settings_subtitle": "Postavke izgleda Mreže fotografija", "asset_list_settings_title": "Mreža fotografija", + "asset_not_found_on_device_android": "Stavka nije pronađena na ovom uređaju", + "asset_not_found_on_device_ios": "Stavka nije pronađena na ovom uređaju. Ako koristite iCloud, stavka je možda nedostupna zbog loše datoteke spremljena na iCloud", + "asset_not_found_on_icloud": "Stavka nije pronađena na iCloud. Stavka je možda nedostupna zbog loše datoteke spremljena na iCloud", "asset_offline": "Stavka izvan mreže", "asset_offline_description": "Ova vanjska stavka nije pronađena na disku. Za pomoć se obratite Immich administratoru.", "asset_restored_successfully": "Stavka uspješno obnovljena", @@ -657,6 +686,7 @@ "backup_options_page_title": "Opcije sigurnosnog kopiranja", "backup_setting_subtitle": "Upravljajte postavkama učitavanja u pozadini i prvom planu", "backup_settings_subtitle": "Upravljaj postavkama slanja", + "backup_upload_details_page_more_details": "Pritisnite za vise informacija", "backward": "Unazad", "biometric_auth_enabled": "Biometrijska autentikacija omogućena", "biometric_locked_out": "Zaključani ste iz biometrijske autentikacije", @@ -723,8 +753,21 @@ "check_corrupt_asset_backup_button": "Izvrši provjeru", "check_corrupt_asset_backup_description": "Pokrenite ovu provjeru samo putem Wi-Fi mreže i nakon što su sve stavke sigurnosno kopirane. Postupak može potrajati nekoliko minuta.", "check_logs": "Provjera Zapisa", + "checksum": "Kontrolni zbroj", "choose_matching_people_to_merge": "Odaberite odgovarajuće osobe za spajanje", "city": "Grad", + "cleanup_confirm_description": "Immich je pronašao {count} stavki (stvorene prije {date}) sigurno spremljene na serveru. Ukloni lokalne kopije s ovog uređaja?", + "cleanup_confirm_prompt_title": "Ukloni s ovog uređaja?", + "cleanup_deleted_assets": "Prebačeno {count} stavki u smeće uređaja", + "cleanup_deleting": "Prebacivanje u smeće...", + "cleanup_found_assets": "Pronađeno {count} sigurnosno spremljenih stavki", + "cleanup_found_assets_with_size": "Pronađeno {count} sigurnosno spremljenih stavki ({size})", + "cleanup_icloud_shared_albums_excluded": "iCloud dijeljeni albumi nisu uključeni u skeniranje", + "cleanup_no_assets_found": "Nisu pronađene stavki koje zadovoljavaju gore kriterij. Oslobodi prostor može ukloniti samo stavke koje su sigurno kopirane na serveru", + "cleanup_preview_title": "Stavke za ukloniti ({count})", + "cleanup_step3_description": "Skeniraj sigurnosnu kopiju stavki koje zadovoljavaju vaš datum i zadrži opcije.", + "cleanup_step4_summary": "{count} stavki (stvorene prije {date}) za ukloniti s vašeg lokalnog uređaja. Slike će ostat dostupne s Immich aplikacije.", + "cleanup_trash_hint": "Kako bi u potpunosti oslobodili prostor, otvorite sistemsku aplikaciju za galeriju i očistite smeće", "clear": "Očisti", "clear_all": "Očisti sve", "clear_all_recent_searches": "Izbriši sva nedavna pretraživanja", @@ -736,6 +779,8 @@ "client_cert_import": "Uvezi", "client_cert_import_success_msg": "Klijentski certifikat je uvezen", "client_cert_invalid_msg": "Neispravna datoteka certifikata ili pogrešna lozinka", + "client_cert_password_message": "Unesite lozinku za ovaj certifikat", + "client_cert_password_title": "Lozinka certifikata", "client_cert_remove_msg": "Klijentski certifikat je uklonjen", "client_cert_subtitle": "Podržava samo PKCS12 (.p12, .pfx) format. Uvoz/uklanjanje certifikata dostupno je samo prije prijave", "client_cert_title": "SSL klijentski certifikat [EKSPERIMENTALNO]", @@ -746,6 +791,11 @@ "color": "Boja", "color_theme": "Tema boja", "command": "Naredba", + "command_palette_prompt": "Brzo nađi stranice, akcije ili naredbe", + "command_palette_to_close": "za zatvoriti", + "command_palette_to_navigate": "za pristupiti", + "command_palette_to_select": "za selektirati", + "command_palette_to_show_all": "za prikazati sve", "comment_deleted": "Komentar izbrisan", "comment_options": "Opcije komentara", "comments_and_likes": "Komentari i lajkovi", @@ -808,17 +858,25 @@ "created_at": "Kreirano", "creating_linked_albums": "Izradi povezane albume...", "crop": "Obreži", + "crop_aspect_ratio_fixed": "Popravljeno", + "crop_aspect_ratio_free": "Slobodno", + "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Kvadrat", "curated_object_page_title": "Stvari", "current_device": "Trenutačni uređaj", "current_pin_code": "Trenutni PIN kod", "current_server_address": "Trenutna adresa poslužitelja", - "custom_locale": "Prilagođena Lokalizacija", - "custom_locale_description": "Formatiranje datuma i brojeva na temelju jezika i regije", + "custom_date": "Specifičan datum", + "custom_locale": "Prilagođena lokalizacija", + "custom_locale_description": "Formatiranje datuma, vremena i brojeva na temelju selektiranog jezika i regije", "custom_url": "Prilagođena URL adresa", + "cutoff_date_description": "Zadrži slike od zadnjih…", + "cutoff_day": "{count, plural, one {dan} other {dana}}", + "cutoff_year": "{count, plural, one {godina} other {godine}}", "daily_title_text_date": "E, MMM dd", "daily_title_text_date_year": "E, MMM dd, yyyy", "dark": "Tamno", - "dark_theme": "Prebaci tamnu temu", + "dark_theme": "Prebaci u tamnu temu", "date": "Datum", "date_after": "Datum nakon", "date_and_time": "Datum i Vrijeme", @@ -829,10 +887,6 @@ "day": "Dan", "days": "Dani", "deduplicate_all": "Dedupliciraj Sve", - "deduplication_criteria_1": "Veličina slike u bajtovima", - "deduplication_criteria_2": "Broj EXIF podataka", - "deduplication_info": "Informacije o uklanjanju duplikata", - "deduplication_info_description": "Za automatski odabir stavki i masovno uklanjanje duplikata, uzimamo u obzir:", "delete": "Izbriši", "delete_action_confirmation_message": "Jeste li sigurni da želite izbrisati ovu stavku? Ova radnja će premjestiti stavku u smeće poslužitelja i pitati vas želite li ju izbrisati lokalno", "delete_action_prompt": "{count} izbrisano", @@ -956,6 +1010,7 @@ "error_saving_image": "Pogreška: {error}", "error_tag_face_bounding_box": "Pogreška pri označavanju lica – nije moguće dohvatiti koordinate granica (bounding box)", "error_title": "Greška - Nešto je pošlo krivo", + "error_while_navigating": "Greška prilikom navigiranja do stavki", "errors": { "cannot_navigate_next_asset": "Nije moguće prijeći na sljedeću stavku", "cannot_navigate_previous_asset": "Nije moguće prijeći na prethodnu stavku", @@ -991,6 +1046,7 @@ "failed_to_update_notification_status": "Neuspješno ažuriranje statusa obavijesti", "incorrect_email_or_password": "Netočna adresa e-pošte ili lozinka", "library_folder_already_exists": "Ova putanja unosa već postoji.", + "page_not_found": "Stranica nije pronađena", "paths_validation_failed": "{paths, plural, one {# putanja nije prošla} other {# putanje nisu prošle}} provjeru valjanosti", "profile_picture_transparent_pixels": "Profilne slike ne smiju imati prozirne piksele. Povećajte i/ili pomaknite sliku.", "quota_higher_than_disk_size": "Postavili ste kvotu veću od veličine diska", @@ -1075,6 +1131,7 @@ "unable_to_update_user": "Nije moguće ažurirati korisnika", "unable_to_upload_file": "Nije moguće učitati datoteku" }, + "errors_text": "Greške", "exclusion_pattern": "Uzorak isključenja", "exif": "Exif", "exif_bottom_sheet_description": "Dodaj opis...", @@ -1085,6 +1142,7 @@ "exif_bottom_sheet_people": "OSOBE", "exif_bottom_sheet_person_add_person": "Dodaj ime", "exit_slideshow": "Izađi iz projekcije slideova", + "expand": "Proširi", "expand_all": "Proširi sve", "experimental_settings_new_asset_list_subtitle": "Rad u tijeku", "experimental_settings_new_asset_list_title": "Omogući eksperimentalnu mrežu fotografija", @@ -1120,6 +1178,8 @@ "features_in_development": "Značajke u razvoju", "features_setting_description": "Upravljajte značajkama aplikacije", "file_name_or_extension": "Naziv ili ekstenzija datoteke", + "file_name_text": "Ime datoteke", + "file_name_with_value": "Ime datoteke: {file_name}", "file_size": "Veličina datoteke", "filename": "Naziv datoteke", "filetype": "Vrsta datoteke", diff --git a/i18n/hu.json b/i18n/hu.json index b7fca103f6..c4788b9915 100644 --- a/i18n/hu.json +++ b/i18n/hu.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Rögzített", "crop_aspect_ratio_free": "Tetszőleges", "crop_aspect_ratio_original": "Eredeti", + "crop_aspect_ratio_square": "Négyzet", "curated_object_page_title": "Dolgok", "current_device": "Ez az eszköz", "current_pin_code": "Aktuális PIN kód", @@ -880,7 +881,7 @@ "daily_title_text_date": "MMM dd (E)", "daily_title_text_date_year": "yyyy MMM dd (E)", "dark": "Sötét", - "dark_theme": "Sötét téma kapcsolása", + "dark_theme": "Sötét témára váltás", "date": "Dátum", "date_after": "Dátumtól", "date_and_time": "Dátum és idő", @@ -891,10 +892,8 @@ "day": "Nap", "days": "Napok", "deduplicate_all": "Összes deduplikálása", - "deduplication_criteria_1": "Kép mérete bájtokban", - "deduplication_criteria_2": "EXIF adatok mennyisége", - "deduplication_info": "Deduplikációs infó", - "deduplication_info_description": "Az automatikus előválogatáshoz és a duplikátumok tömeges eltávolításához a következőket vizsgáljuk:", + "default_locale": "Alapértelmezett nyelvi beállítás", + "default_locale_description": "A dátumok és számok formázása a böngésző nyelvi beállításai alapján", "delete": "Törlés", "delete_action_confirmation_message": "Biztosan törölni szeretnéd ezt az elemet? Így az elem a szerver lomtárába kerül, és megkérdezi, hogy törölni szeretnéd-e a az eszközön is", "delete_action_prompt": "{count} törölve", @@ -970,7 +969,7 @@ "downloading_media": "Média letöltése", "drop_files_to_upload": "A feltöltéshez húzd bárhova a fájlokat", "duplicates": "Duplikátumok", - "duplicates_description": "Jelöld meg a duplikátumokat (ha léteznek) a csoportokban", + "duplicates_description": "Jelöld meg a duplikátumokat (ha léteznek) a csoportokban.", "duration": "Időtartam", "edit": "Szerkesztés", "edit_album": "Album módosítása", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Album címe", "licenses": "Licencek", "light": "Világos", + "light_theme": "Világos témára váltás", "like": "Tetszik", "like_deleted": "Reakció törölve", "link_motion_video": "Motion videó hozzárendelése", + "link_to_docs": "További információért nézd meg a dokumentációt.", "link_to_oauth": "Csatlakoztatás OAuth-hoz", "linked_oauth_account": "Csatlakoztatott OAuth fiók", "list": "Lista", @@ -1651,6 +1652,7 @@ "only_favorites": "Csak kedvencek", "open": "Nyitva", "open_calendar": "Naptár megnyitása", + "open_in_browser": "Megnyitás böngészőben", "open_in_map_view": "Megnyitás térkép nézetben", "open_in_openstreetmap": "Megnyitás OpenStreetMap-ben", "open_the_search_filters": "Keresési szűrők megnyitása", @@ -2393,6 +2395,7 @@ "viewer_remove_from_stack": "Eltávolítás a csoportból", "viewer_stack_use_as_main_asset": "Fő elemnek beállítás", "viewer_unstack": "Csoport megszüntetése", + "visibility": "Láthatóság", "visibility_changed": "{count, plural, other {# személy}} láthatósága megváltozott", "visual": "Vizuális", "visual_builder": "Vizuális összerakó", diff --git a/i18n/id.json b/i18n/id.json index 7ab487f25a..a6f0b649b9 100644 --- a/i18n/id.json +++ b/i18n/id.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Diperbaiki", "crop_aspect_ratio_free": "Bebas", "crop_aspect_ratio_original": "Asli", + "crop_aspect_ratio_square": "Persegi", "curated_object_page_title": "Benda", "current_device": "Perangkat saat ini", "current_pin_code": "Kode PIN saat ini", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM yyyy", "dark": "Gelap", - "dark_theme": "Nyalakan mode gelap", + "dark_theme": "Beralih ke tema gelap", "date": "Tanggal", "date_after": "Tanggal setelah", "date_and_time": "Tanggal dan Waktu", @@ -891,10 +892,8 @@ "day": "Hari", "days": "Hari", "deduplicate_all": "Hapus semua duplikat", - "deduplication_criteria_1": "Ukuran gambar dalam bita", - "deduplication_criteria_2": "Hitungan data EXIF", - "deduplication_info": "Info deduplikasi", - "deduplication_info_description": "Untuk memilih aset secara otomatis dan menghapus duplikat secara massal, kami melihat:", + "default_locale": "Bahasa Default", + "default_locale_description": "Sesuaikan format tanggal dan angka sesuai dengan pengaturan wilayah browser Anda", "delete": "Hapus", "delete_action_confirmation_message": "Yakin ingin menghapus aset ini? Tindakan ini akan memindahkan aset ke tempat sampah pada server dan akan mengkonfirmasi apakah Anda ingin menghapusnya juga secara lokal", "delete_action_prompt": "{count} item telah dihapus", @@ -970,7 +969,7 @@ "downloading_media": "Mengunduh media", "drop_files_to_upload": "Lepaskan file di mana saja untuk mengunggah", "duplicates": "Duplikat", - "duplicates_description": "Selesaikan setiap kelompok dengan menunjukkan mana, jika ada, yang merupakan duplikat", + "duplicates_description": "Selesaikan setiap kelompok dengan menunjukkan mana saja yang merupakan duplikat, jika ada.", "duration": "Durasi", "edit": "Edit", "edit_album": "Edit album", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Judul album", "licenses": "Lisensi", "light": "Terang", + "light_theme": "Ganti ke mode terang", "like": "Suka", "like_deleted": "Suka dihapus", "link_motion_video": "Tautan video gerak", + "link_to_docs": "Untuk informasi lebih lanjut, silakan lihat dokumentasi.", "link_to_oauth": "Tautkan ke OAuth", "linked_oauth_account": "Akun OAuth tertaut", "list": "Daftar", @@ -2394,6 +2395,7 @@ "viewer_remove_from_stack": "Keluarkan dari Tumpukan", "viewer_stack_use_as_main_asset": "Gunakan sebagai aset utama", "viewer_unstack": "Lepas tumpukan", + "visibility": "Visibilitas", "visibility_changed": "Keterlihatan diubah untuk {count, plural, one {# orang} other {# orang}}", "visual": "Visual", "visual_builder": "Pembangun visual", diff --git a/i18n/it.json b/i18n/it.json index f540e1893b..fda8d82731 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Fisso", "crop_aspect_ratio_free": "Libero", "crop_aspect_ratio_original": "Originale", + "crop_aspect_ratio_square": "Quadrato", "curated_object_page_title": "Oggetti", "current_device": "Dispositivo attuale", "current_pin_code": "Attuale codice PIN", @@ -891,10 +892,6 @@ "day": "Giorno", "days": "Giorni", "deduplicate_all": "Elimina tutti i doppioni", - "deduplication_criteria_1": "Dimensione immagine in bytes", - "deduplication_criteria_2": "Numero di dati EXIF", - "deduplication_info": "Informazioni di deduplicazione", - "deduplication_info_description": "Per preselezionare automaticamente le risorse e rimuovere i duplicati in massa, verifichiamo:", "delete": "Elimina", "delete_action_confirmation_message": "Vuoi davvero eliminare questa risorsa? Questa azione sposterà la risorsa nel cestino del server e ti chiederà se desideri eliminarla dal dispositivo", "delete_action_prompt": "{count} elementi eliminati", @@ -970,7 +967,7 @@ "downloading_media": "Scaricamento file multimediali", "drop_files_to_upload": "Rilascia i file ovunque per caricarli", "duplicates": "Duplicati", - "duplicates_description": "Risolvi ciascun gruppo indicando quali sono, se esistono, i duplicati", + "duplicates_description": "Risolvi ciascun gruppo indicando quali sono, se esistono, i duplicati.", "duration": "Durata", "edit": "Modifica", "edit_album": "Modifica album", @@ -1007,6 +1004,8 @@ "editor_edits_applied_success": "Modifiche applicate con successo", "editor_flip_horizontal": "Capovolgi in orizzontale", "editor_flip_vertical": "Capovolgi in verticale", + "editor_handle_corner": "angolo {corner, select, top_left {Alto a sinistra} top_right {Alto a destra} bottom_left {Basso a sinistra} bottom_right {Basso a destra} other {A}}", + "editor_handle_edge": "bordo {edge, select, top {Alto} bottom {Basso} left {Sinistro} right {Destro} other {Altro}}", "editor_orientation": "Orientamento", "editor_reset_all_changes": "Annulla modifiche", "editor_rotate_left": "Ruota di 90° antiorario", @@ -1385,6 +1384,7 @@ "library_page_sort_title": "Titolo album", "licenses": "Licenze", "light": "Chiaro", + "light_theme": "Cambia a tema chiaro", "like": "Mi piace", "like_deleted": "Mi piace rimosso", "link_motion_video": "Collega video in movimento", @@ -2392,6 +2392,7 @@ "viewer_remove_from_stack": "Rimuovi dal gruppo", "viewer_stack_use_as_main_asset": "Usa come risorsa principale", "viewer_unstack": "Separa dal gruppo", + "visibility": "Visibilità", "visibility_changed": "Visibilità modificata per {count, plural, one {# persona} other {# persone}}", "visual": "Visuale", "visual_builder": "Costruttore di visuale", diff --git a/i18n/ja.json b/i18n/ja.json index 17dd8c1f48..144c52ba83 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -53,7 +53,7 @@ "authentication_settings": "認証設定", "authentication_settings_description": "認証設定の管理(パスワード、OAuth、その他)", "authentication_settings_disable_all": "本当にすべてのログイン方法を無効にしますか? ログインが完全にできなくなります。", - "authentication_settings_reenable": "再び有効にするには、サーバーコマンドを使用してください。", + "authentication_settings_reenable": "再度有効にするには、サーバーコマンドを使用してください。", "background_task_job": "バックグラウンドタスク", "backup_database": "データベースのバックアップを作成", "backup_database_enable_description": "データベースのバックアップを有効にする", @@ -62,7 +62,7 @@ "backup_onboarding_2_description": "別々のデバイス上のローカルコピー。これはメインファイルやそのローカルバックアップファイルを含みます。", "backup_onboarding_3_description": "あなたのすべてのデータ(1つのオフサイトコピーと2つのローカルコピーを含む)のコピー。", "backup_onboarding_description": "データ保護には、3-2-1バックアップ戦略の利用を推奨します。写真・動画データとImmichのデータベースをあわせてバックアップすることで、より安全に保管できます。", - "backup_onboarding_footer": "Immichのバックアップに関する情報は、ドキュメンテーションを確認してください。", + "backup_onboarding_footer": "Immichのバックアップに関する情報は、ドキュメントを確認してください。", "backup_onboarding_parts_title": "3-2-1バックアップ:", "backup_onboarding_title": "バックアップ", "backup_settings": "データベースのバックアップの設定", @@ -126,7 +126,7 @@ "library_created": "作成されたライブラリ:{library}", "library_deleted": "ライブラリは削除されました", "library_details": "ライブラリの詳細", - "library_folder_description": "インポートするフォルダを指定してください、サブフォルダー内を含む画像と動画がスキャンされます", + "library_folder_description": "インポートするフォルダを指定してください。このフォルダ内(サブフォルダを含む)の画像と動画がスキャンされます。", "library_remove_exclusion_pattern_prompt": "この除外パターンを削除してよいですか?", "library_remove_folder_prompt": "このインポートフォルダを解除しますか?", "library_scanning": "定期スキャン", @@ -150,7 +150,7 @@ "machine_learning_availability_checks_timeout": "リクエストタイムアウト", "machine_learning_availability_checks_timeout_description": "可用性チェックのタイムアウト時間(ミリ秒単位)", "machine_learning_clip_model": "Clipモデル", - "machine_learning_clip_model_description": "CLIP モデルの名前はここにリストされています。モデルを変更した場合は、すべてのイメージに対して「スマート検索」ジョブを再実行する必要があります。", + "machine_learning_clip_model_description": "こちらに記載されているCLIPモデルの名称を指定します。モデルを変更した場合は、すべての画像に対して「スマート検索」ジョブを再実行する必要があります。", "machine_learning_duplicate_detection": "重複検出", "machine_learning_duplicate_detection_enabled": "重複検出の有効化", "machine_learning_duplicate_detection_enabled_description": "無効にした場合でも、完全に同一アセットの重複は排除されます。", @@ -272,7 +272,7 @@ "oauth_auto_register": "自動登録", "oauth_auto_register_description": "OAuthでサインインしたあと、自動的に新規ユーザーを登録する", "oauth_button_text": "ボタンテキスト", - "oauth_client_secret_description": "OAuthプロバイダーがPKCEをサポートしていない場合は必要", + "oauth_client_secret_description": "機密クライアント、または公開クライアントでPKCEがサポートされていない場合に必須です。", "oauth_enable_description": "OAuthでログイン", "oauth_mobile_redirect_uri": "モバイル用リダイレクトURI", "oauth_mobile_redirect_uri_override": "モバイル用リダイレクトURI(上書き)", @@ -311,7 +311,7 @@ "search_jobs": "ジョブを検索…", "send_welcome_email": "ウェルカム メール を送信します", "server_external_domain_settings": "外部ドメイン", - "server_external_domain_settings_description": "公開共有リンク用のドメイン( http(s):// を含める)", + "server_external_domain_settings_description": "外部リンク用のドメイン", "server_public_users": "公開ユーザー", "server_public_users_description": "共有アルバムにユーザーを追加するとすべてのユーザー (名前とメールアドレス) がリスト化されます。無効にするとユーザーリストは管理者のみ利用可能になります。", "server_settings": "サーバー設定", @@ -333,7 +333,7 @@ "storage_template_migration_description": "現在の{template}を以前にアップロードされたアセットに適用", "storage_template_migration_info": "ストレージテンプレートは全ての拡張子を小文字に変換します。テンプレートの変更は新しいアセットにのみ適用されます。 以前にアップロードしたアセットにテンプレートを遡って適用するには、{job} を実行してください。", "storage_template_migration_job": "ストレージテンプレート移行ジョブ", - "storage_template_more_details": "この機能の詳細については、ストレージテンプレートとその影響を参照してください", + "storage_template_more_details": "この機能の詳細については、ストレージテンプレートおよびその影響事項を参照してください", "storage_template_onboarding_description_v2": "この設定をオンにすると、ユーザーの定義したテンプレートに従って自動でファイルが整理されます。詳しい情報はドキュメンテーションで確認してください。", "storage_template_path_length": "おおよそのパス長の制限: {length, number}/{limit, number}", "storage_template_settings": "ストレージ テンプレート", @@ -411,7 +411,7 @@ "transcoding_tone_mapping": "トーンマッピング", "transcoding_tone_mapping_description": "HDR動画をSDRに変換する際に見た目を維持しようと試みます。各アルゴリズムは、色、詳細、明るさに対して異なるトレードオフを行います。Hableは詳細を維持し、Mobiusは色を維持し、Reinhardは明るさを維持します。", "transcoding_transcode_policy": "トランスコードポリシー", - "transcoding_transcode_policy_description": "動画がトランスコードされるべきかを決めるポリシー。HDR動画は常にトランスコードされます(トランスコードが無効化されている場合を除く)。", + "transcoding_transcode_policy_description": "動画のトランスコードポリシー。HDR動画、およびYUV 4:2:0以外のピクセルフォーマットの動画は、常にトランスコードされます。(トランスコードが無効な場合を除く)", "transcoding_two_pass_encoding": "Two-passエンコード", "transcoding_two_pass_encoding_setting_description": "二つのパスでトランスコードし、よりよくエンコードされた動画を生成します。最大ビットレートが有効になっている場合(H.264とHEVCが動作するために必要)、このモードは最大ビットレートを基にしたビットレートの範囲を使用し、CRFを無視します。VP9については最大ビットレートの無効時にCRFを使うことができます。", "transcoding_video_codec": "動画コーデック", @@ -794,6 +794,11 @@ "color": "カラー", "color_theme": "カラーテーマ", "command": "コマンド", + "command_palette_prompt": "ページ、アクション、コマンドを素早く検索", + "command_palette_to_close": "閉じる", + "command_palette_to_navigate": "決定", + "command_palette_to_select": "選択", + "command_palette_to_show_all": "すべて表示", "comment_deleted": "コメントが削除されました", "comment_options": "コメント設定", "comments_and_likes": "コメントといいね", @@ -844,9 +849,12 @@ "create_link_to_share": "共有リンクを作る", "create_link_to_share_description": "リンクを知っている人全員が選択した写真を閲覧できるようになります", "create_new": "新規作成", + "create_new_face": "新しい顔を作成", "create_new_person": "新しい人物を作成", "create_new_person_hint": "選択した写真/動画を新しい人物として割り当て", "create_new_user": "新規ユーザーの作成", + "create_person": "人を作成", + "create_person_subtitle": "選択した顔に名前を付けて、新しい人物を登録・タグ付けする", "create_shared_album_page_share_add_assets": "写真を追加", "create_shared_album_page_share_select_photos": "写真を選択", "create_shared_link": "共有リンクを作成", @@ -861,13 +869,14 @@ "crop_aspect_ratio_fixed": "固定", "crop_aspect_ratio_free": "自由", "crop_aspect_ratio_original": "オリジナル", + "crop_aspect_ratio_square": "スクエア", "curated_object_page_title": "被写体", "current_device": "現在のデバイス", "current_pin_code": "現在のPINコード", "current_server_address": "現在のサーバーURL", "custom_date": "カスタム日付", - "custom_locale": "カスタムロケール", - "custom_locale_description": "言語と地域に基づいて日付と数値をフォーマットします", + "custom_locale": "言語と地域の手動設定", + "custom_locale_description": "選択した言語と地域の設定に従って、日付・時刻・数値を書式設定します", "custom_url": "カスタムURL", "cutoff_date_description": "写真を保持する期間:", "cutoff_day": "{count, plural, one {(日)} other {(日)}}", @@ -875,7 +884,7 @@ "daily_title_text_date": "MM DD, EE", "daily_title_text_date_year": "yyyy MM DD, EE", "dark": "ダークモード", - "dark_theme": "ダークモード切り替え", + "dark_theme": "ダークモードに切り替え", "date": "日付", "date_after": "この日以降", "date_and_time": "日付と時間", @@ -886,10 +895,8 @@ "day": "ライトモード", "days": "日", "deduplicate_all": "全て重複排除", - "deduplication_criteria_1": "バイト単位の画像サイズ", - "deduplication_criteria_2": "EXIFデータ数", - "deduplication_info": "重複排除情報", - "deduplication_info_description": "写真/動画を自動的に選択して重複を一括で削除するには次のようにします:", + "default_locale": "デフォルトの言語と地域", + "default_locale_description": "ブラウザの言語と地域の設定に基づいて、日付と数値をフォーマットします", "delete": "削除", "delete_action_confirmation_message": "この項目を削除しますか?まず、この項目はサーバー上のゴミ箱へ移動されます。その後、あなたのデバイス上から削除するかを決めていただきます", "delete_action_prompt": "{count}項目を削除しました", @@ -965,7 +972,7 @@ "downloading_media": "ダウンロード中", "drop_files_to_upload": "ファイルをドロップしてアップロード", "duplicates": "重複", - "duplicates_description": "もしあれば、重複しているグループを示すことで解決します", + "duplicates_description": "各グループを確認し、重複している項目を整理してください。", "duration": "間隔", "edit": "編集", "edit_album": "アルバムを編集", @@ -1002,6 +1009,8 @@ "editor_edits_applied_success": "編集が正常に反映されました", "editor_flip_horizontal": "水平方向に反転", "editor_flip_vertical": "垂直に反転", + "editor_handle_corner": "{corner, select, top_left {左上の} top_right {右上の} bottom_left {左下の} bottom_right {右下の} other {}}コーナーハンドル", + "editor_handle_edge": "{edge, select, top {上の} bottom {下の} left {左の} right {右の} other {}} サイドハンドル", "editor_orientation": "向き", "editor_reset_all_changes": "変更をリセット", "editor_rotate_left": "反時計回りに90°回転", @@ -1067,6 +1076,7 @@ "failed_to_update_notification_status": "通知ステータスの更新に失敗しました", "incorrect_email_or_password": "メールアドレスまたはパスワードが間違っています", "library_folder_already_exists": "このインポートパスは既に存在します。", + "page_not_found": "ページが見つかりません", "paths_validation_failed": "{paths, plural, one {#個} other {#個}}のパスの検証に失敗しました", "profile_picture_transparent_pixels": "プロフィール写真には透明ピクセルを含めることはできません。画像を拡大/縮小したり移動してください。", "quota_higher_than_disk_size": "ディスク容量より大きい容量が指定されました", @@ -1166,6 +1176,7 @@ "exif_bottom_sheet_people": "人物", "exif_bottom_sheet_person_add_person": "名前を追加", "exit_slideshow": "スライドショーを終わる", + "expand": "展開", "expand_all": "全て展開", "experimental_settings_new_asset_list_subtitle": "製作途中 (WIP)", "experimental_settings_new_asset_list_title": "試験的なグリッドを有効化", @@ -1210,6 +1221,7 @@ "filter_description": "対象とするアセットの抽出条件", "filter_people": "人物を絞り込み", "filter_places": "場所をフィルター", + "filter_tags": "タグで絞り込む", "filters": "フィルター", "find_them_fast": "名前で検索して素早く発見", "first": "はじめ", @@ -1377,9 +1389,11 @@ "library_page_sort_title": "アルバム名", "licenses": "ライセンス", "light": "ライトモード", + "light_theme": "ライトテーマに切り替え", "like": "いいね", "like_deleted": "いいねが削除されました", "link_motion_video": "モーションビデオのリンク", + "link_to_docs": "詳細はドキュメントを参照してください。", "link_to_oauth": "OAuthへリンクする", "linked_oauth_account": "リンクされたOAuthアカウント", "list": "リスト", @@ -1640,6 +1654,8 @@ "online": "オンライン", "only_favorites": "お気に入りのみ", "open": "開く", + "open_calendar": "カレンダーを開く", + "open_in_browser": "ブラウザで開く", "open_in_map_view": "地図表示で見る", "open_in_openstreetmap": "OpenStreetMapで開く", "open_the_search_filters": "検索フィルタを開く", @@ -1799,7 +1815,7 @@ "rate_asset": "項目を評価する", "rating": "星での評価", "rating_clear": "評価を取り消す", - "rating_count": "星{count, plural, one {#つ} other {#つ}}", + "rating_count": "{count, plural, =0 {未評価} one {星#つ} other {星#つ}}", "rating_description": "情報欄にEXIFの評価を表示", "reaction_options": "リアクションの選択", "read_changelog": "変更履歴を読む", @@ -1872,7 +1888,10 @@ "reset_pin_code_success": "正常にPINコードをリセットしました", "reset_pin_code_with_password": "PINコードはいつでもパスワードを使ってリセットできます", "reset_sqlite": "SQLiteデータベースをリセット", - "reset_sqlite_confirmation": "SQLiteを本当にリセットしますか?データを再び同期するためにログアウトし再ログインをする必要があります", + "reset_sqlite_clear_app_data": "データを消去", + "reset_sqlite_confirmation": "本当にアプリのデータを消去しますか?すべての設定が削除され、サインアウトされます。", + "reset_sqlite_confirmation_note": "注意: 消去した後はアプリを再起動する必要があります。", + "reset_sqlite_done": "アプリのデータを消去しました。アプリを再起動し、もう一度ログインしてください。", "reset_sqlite_success": "SQLiteデータベースのリセットに成功しました", "reset_to_default": "デフォルトにリセット", "resolution": "解像度", @@ -1900,6 +1919,7 @@ "saved_settings": "設定を保存しました", "say_something": "何か書き込みましょう", "scaffold_body_error_occurred": "エラーが発生しました", + "scaffold_body_error_unrecoverable": "予期しないエラーが発生しました。解決のため、エラー内容とスタックトレースをDiscordまたはGitHubで共有してください。指示があった場合は、以下のボタンからアプリデータを消去できます。", "scan": "スキャン", "scan_all_libraries": "全てのライブラリをスキャン", "scan_library": "スキャン", @@ -1935,6 +1955,7 @@ "search_filter_ocr": "OCRで検索", "search_filter_people_title": "人物を選択", "search_filter_star_rating": "星評価", + "search_filter_tags_title": "タグを選択", "search_for": "検索", "search_for_existing_person": "既存の人物を検索", "search_no_more_result": "検索結果以上", @@ -2014,6 +2035,9 @@ "set_profile_picture": "プロフィール画像を設定", "set_slideshow_to_fullscreen": "スライドショーをフルスクリーンにする", "set_stack_primary_asset": "メインの写真として設定", + "setting_image_navigation_enable_subtitle": "有効にすると、画面の左端または右端の4分の1のエリアをタップして、前の画像や次の画像へ移動できます。", + "setting_image_navigation_enable_title": "タップ操作で移動", + "setting_image_navigation_title": "画像の操作", "setting_image_viewer_help": "写真をタップするとサムネイル・中画質・オリジナルの順に読み込みます", "setting_image_viewer_original_subtitle": "オリジナルの画像を表示したいときにオンにしてください。(最大画質で表示されるので、データと端末のストレージの消費量が増えます)", "setting_image_viewer_original_title": "オリジナルを読み込む", @@ -2180,6 +2204,7 @@ "support": "サポート", "support_and_feedback": "サポートとフィードバック", "support_third_party_description": "Immichのインストールはサードパーティーによってパッケージ化されています。遭遇した問題はそのパッケージに起因している可能性があるので以下のリンクを使って最初にそのパッケージに問題を提起してください。", + "supporter": "Supporter", "swap_merge_direction": "統合する方向を入れ替え", "sync": "同期", "sync_albums": "アルバムを同期", @@ -2192,6 +2217,7 @@ "tag": "タグ付けする", "tag_assets": "写真/動画にタグ付けする", "tag_created": "タグ: {tag} を作成しました", + "tag_face": "顔をタグ付け", "tag_feature_description": "意味を持たせたタグトでグループ化して写真と動画を閲覧する", "tag_not_found_question": "タグが見つかりませんか? こちらからタグを作成できます", "tag_people": "人物タグ", @@ -2291,6 +2317,7 @@ "unstack_action_prompt": "{count}項目の重ね合わせを解除", "unstacked_assets_count": "{count, plural, one {#個} other {#個}}の写真/動画をスタックから解除しました", "unsupported_field_type": "サポートされていないフィールドタイプ", + "unsupported_file_type": "ファイル形式「{type}」はサポートされていないため、ファイル「{file}」をアップロードできません。", "untagged": "タグを解除", "untitled_workflow": "無題のワークフロー", "up_next": "次へ", @@ -2317,6 +2344,8 @@ "url": "URL", "usage": "使用容量", "use_biometric": "生体認証をご利用ください", + "use_browser_locale": "ブラウザの言語と地域の設定に従う", + "use_browser_locale_description": "ブラウザの言語と地域の設定に従って、日付・時刻・数値を書式設定します", "use_current_connection": "現在の接続情報を使用", "use_custom_date_range": "代わりにカスタム日付範囲を使用", "user": "ユーザー", @@ -2370,6 +2399,7 @@ "viewer_remove_from_stack": "スタックから外す", "viewer_stack_use_as_main_asset": "メインの画像として使用する", "viewer_unstack": "スタックを解除", + "visibility": "表示設定", "visibility_changed": "{count, plural, one {#人} other {#人}}の人物の非表示設定が変更されました", "visual": "ビジュアル", "visual_builder": "ビジュアルビルダー", diff --git a/i18n/ka.json b/i18n/ka.json index f386a1e357..6ed5cdd6ce 100644 --- a/i18n/ka.json +++ b/i18n/ka.json @@ -2,13 +2,13 @@ "about": "შესახებ", "account": "ანგარიში", "account_settings": "ანგარიშის პარამეტრები", - "acknowledge": "მიღება", + "acknowledge": "გასაგებია", "action": "ქმედება", - "action_common_update": "განაახლე", + "action_common_update": "განახლება", "action_description": "მოქმედებები გაფილტრულ რესურსებზე", "actions": "ქმედებები", "active": "აქტიური", - "active_count": "aქტიური: {count}", + "active_count": "აქტიური: {count}", "activity": "აქტივობა", "activity_changed": "აქტივობა {enabled, select, true {ჩართული} other {გამორთული}}", "add": "დაამატე", @@ -35,10 +35,12 @@ "add_to_album_bottom_sheet_added": "დამატებულია {album}-ში", "add_to_album_bottom_sheet_already_exists": "{album}-ში უკვე არსებობს", "add_to_album_bottom_sheet_some_local_assets": "ზოგიერთი ლოკალური რესურსი ვერ დაემატა ალბომში", + "add_to_album_toggle": "გადართე მონიშვნა {album}_სთვის", "add_to_albums": "დაამატე ალბომებში", "add_to_albums_count": "დაამატე ალბომში ({count})", - "add_to_bottom_bar": "დამატება სად", + "add_to_bottom_bar": "დაამატე ...ში", "add_to_shared_album": "დაამატე საზიარო ალბომში", + "add_upload_to_stack": "დაამატე ატვირთული სტეკში", "add_url": "დაამატე URL", "added_to_archive": "დაარქივდა", "added_to_favorites": "დაამატე რჩეულებში", @@ -51,9 +53,15 @@ "authentication_settings_disable_all": "ნამდვილად გინდა ავტორიზაციის ყველა მეთოდის გამორთვა? ავტორიზაციას ვეღარანაირად შეძლებ.", "authentication_settings_reenable": "რეაქტივაციისთვის, გამოიყენე სერვერის ბრძანება.", "background_task_job": "ფონური დავალებები", - "backup_database": "ბაზის დამპის შექმნა", - "backup_database_enable_description": "ბაზის დამპების ჩართვა", + "backup_database": "მონაცემთა ბაზის დამპის შექმნა", + "backup_database_enable_description": "მონაცემთა ბაზის დამპების ჩართვა", "backup_keep_last_amount": "წინა დამპების შესანარჩუნებელი რაოდენობა", + "backup_onboarding_1_description": "გარე ასლი Cloud_ში ან სხვა ფიზიკურ ადგილას.", + "backup_onboarding_2_description": "ლოკალური ასლები სხვადასხვა მოწყობილობებზე. ეს მოიცავს მთავარ ფაილებს და მთავარი ფაილების ასლებს ლოკალურად.", + "backup_onboarding_3_description": "შენი მონაცემების მთლიანი ასლები, მათ შორის ორიგინალი ფაილები. ეს მოიცავს 1 გარე ასლს და 2 ლოკალურ ასლს.", + "backup_onboarding_description": " 3-2-1 სარეზერვო სისტემა არის რეკომენდირებული შენი მონაცემების დასაცავად. შენ უნდა შეინახო ატვირთული ფოტო/ვიდეოების და ასევე immich-ის ბაზის ასლები ყოვლისმომცველი სარეზერვო გზისთვის.", + "backup_onboarding_footer": "მეტი ინფორმაციისთვის immich-ის დასარეზერვებლად , გთხოვთ მიმართეთ დოკუმენტაციას.", + "backup_onboarding_parts_title": "3-2-1 სარეზერვო სისტემა მოიცავს:", "backup_onboarding_title": "მარქაფები", "backup_settings": "მონაცემთა ბაზის დამპის მორგება", "backup_settings_description": "მონაცემთა ბაზის დამპის პარამეტრების მართვა.", @@ -64,27 +72,68 @@ "confirm_email_below": "დასადასტურებლად, ქვემოთ აკრიფე \"{email}\"", "confirm_reprocess_all_faces": "მართლა გსურთ ყველა სახის თავიდან დამუშავება? ეს ქმედება ხალხისათვის მინიჭებულ სახელებს გაწმენდს.", "confirm_user_password_reset": "ნამდვილად გინდა {user}-(ი)ს პაროლის დარესეტება?", + "confirm_user_pin_code_reset": "დარწმუნებული ხართ, რომ გსურთ {user}-ის PIN კოდის დარესეტება?", + "copy_config_to_clipboard_description": "მიმდინარე სისტემის კონფიგურაციის JSON ობიექტის სახით კოპირება ბუფერში", "create_job": "შექმენი დავალება", "cron_expression": "Cron გამოსახულება", + "cron_expression_description": "სკანირების ინტერვალი დააყენეთ cron ფორმატის გამოყენებით. დამატებითი ინფორმაციისთვის იხილეთ მაგ. Crontab Guru", "disable_login": "გამორთე ავტორიზაცია", + "duplicate_detection_job_description": "მსგავსი სურათების აღმოსაჩენად, აქტივებზე მანქანური სწავლების გაშვება. დამოკიდებულია ჭკვიან ძიებაზე", + "export_config_as_json_description": "ჩამოტვირთეთ მიმდინარე სისტემის კონფიგურაცია JSON ფაილის სახით", + "external_libraries_page_description": "ადმინისტრატორის გარე ბიბლიოთეკის გვერდი", "face_detection": "სახის ამოცნობა", + "facial_recognition_job_description": "აღმოჩენილი სახეები დააჯგუფეთ ადამიანებად. ეს ნაბიჯი სახის ამოცნობის დასრულების შემდეგ შესრულდება. „გადატვირთვა“ (ხელახლა) აჯგუფებს ყველა სახეს. „დაკარგული“ რიგში ათავსებს სახეებს, რომლებსაც არ აქვთ მინიჭებული ადამიანი.", + "failed_job_command": "ბრძანება {command} ვერ მოხერხდა დავალების შესასრულებლად: {job}", + "force_delete_user_warning": "გაფრთხილება: ეს დაუყოვნებლივ წაშლის მომხმარებელს და ყველა მასალას. ეს მოქმედება ვერ გაუქმდება და ფაილების აღდგენა შეუძლებელია.", "image_format": "ფორმატი", "image_format_description": "WebP ფორმატი JPEG-ზე პატარა ფაილებს აწარმოებს, მაგრამ მის დამზადებას უფრო მეტი დრო სჭირდება.", + "image_fullsize_enabled": "ჩართე სრული ზომის ფოტოების გენერაცია", + "image_fullsize_enabled_description": "დააგენერირე მთლიანი ზომის ფოტოები არა ვებ მეგობრული ფორმატებისთვის. როცა", + "image_fullsize_quality_description": "მთლიანი ზომის სურათის ხარისხი 1-100მდეა. მეტი არის უკეტეთეში, მაგრამ წარმოქმნის უფრო დიდ ფაილებს.", "image_fullsize_title": "სრული ზომის გამოსახულების პარამეტრები", + "image_prefer_embedded_preview": "ჩაშენებული გადახედვის უპირატესობა", "image_prefer_wide_gamut": "უპირატესობა მიენიჭოს ფერის ფართე დიაპაზონს", + "image_preview_description": "საშუალო ზომის სურათები metadata-ის გარეშე გამოიყენება როცა ნახულობ 1 რესსურს და მანქანური სწავლებისთვის", + "image_preview_quality_description": "გადახვედის ხარისხი 1-100-მდე. მეტი არის უკეთესი, მაგრამ წარმოქმნის უფრო დიდ ფაილს და შეუძლია აპლიკაციის შეფერხება. ნაკლები ციფრის დატენებამ შეიძლება ეფექტი იქონიოს მანქანური სწავლების ხარისხზე.", "image_preview_title": "გამოსახულების გადახედვის პარამეტრები", + "image_progressive": "პროგრესიული", + "image_progressive_description": "დააენკოდრი JPEG სურათები მიყოლებით ნელ-ნელი ჩათვირთვის ეკრანისთვის. ეს არ ეხება WebP სურათებს.", "image_quality": "ხარისხი", "image_resolution": "გაფართოება", + "image_resolution_description": "მაღალი გაფართოებას შეუძლია შეინახოს მეტი დეტალი მაგრამ სჭირდება მეტი დრო ენკოდირებისთვის, დიდ ფაილებს შეუძლიათ აპლიკაციის შენელება.", "image_settings": "გამოსახულების პარამეტრები", - "image_settings_description": "გენერირებული ფოტოების ხარისხისა და რეზოლუციის მართვა", - "image_thumbnail_description": "მინიატურა მეტაინფორმაციის გარეშე, რომელიც ფოტოები ჯგუფურად თვალიერებისას გამოიყენება(მაგ. მთავარ თაიმლაინზე)", + "image_settings_description": "გენერირებული ფოტოების ხარისხისა და გაფართოების მართვა", + "image_thumbnail_description": "პატარა მინიატურა მეტაინფორმაციის გარეშე, რომელიც ფოტოები ჯგუფურად თვალიერებისას გამოიყენება(მაგ. მთავარ თაიმლაინზე)", "image_thumbnail_quality_description": "მინიატურის ხარისხი 1-დან 100-მდე. დიდი რიცხვი შეესაბამება უკეთეს ხარისხს, თუმცა, უფრო დიდ ფაილებს და აპლიკაციის შესაძლო შენელებას.", "image_thumbnail_title": "მინიატურის პარამეტრები", + "import_config_from_json_description": "დააიმპორტირე სისტემის კონფიგურაცია JSON კონფიგურაციის ფაილის ატვირთვით", + "job_concurrency": "{job} კონკურენცია", + "job_created": "დავალება შექმნილია", + "job_not_concurrency_safe": "ეს დავალება არ არის კონკურეცია-უსაფრთხო.", + "job_settings": "დავალებების პარამეტრები", + "job_settings_description": "დავალების კონკურენციის მენეჯმენტი", + "jobs_over_time": "დავალებები დროთა განმავლობაში", "library_created": "შეიქმნა ბიბლიოთეკა: {library}", "library_deleted": "ბიბლიოთეკა წაიშალა", + "library_details": "ბიბლიოთეკის დეტალები", + "library_folder_description": "დააკონკრეთე საქაღალდე დასაიმპორტებლად. ეს საქაღალდე მოიცავს ქვე საქაღალდეებს რომლების დასკანერდება ფოტოებისთვისა და ვიდეოებისთვის.", + "library_remove_exclusion_pattern_prompt": "დარწმუნებულიხარ რომ ამ გამონაკლისი ნიმუშის წაშლა გინდა?", + "library_remove_folder_prompt": "დარწმუნებული ხარ რომ ამ იმპორტირებული საქაღალდის წაშლა გინდა?", + "library_scanning": "პერიოდული სკანირება", + "library_scanning_description": "პერიოდული ბიბლიოთეკის სკანირების კონფიგურაცია", + "library_scanning_enable_description": "ჩართე პერიოდული ბიბლიოთეკის სკანირება", "library_settings": "გარე ბიბლიოთეკა", "library_settings_description": "გარე ბიბლიოთეკების პარამეტრების მართვა", - "logging_settings": "ჟურნალი", + "library_tasks_description": "დაასკანირე გარე ბიბლიოთეკა ახალაი და/ან შეცვლილი რესურსებისთვის", + "library_updated": "განახლებული ბიბლიოთეკა", + "library_watching_enable_description": "დააკვირდი გარე ბიბლიოთეკას ფაილის ცვლილებისთვის", + "library_watching_settings": "ბიბლიოთეკის დაკვირვება [ექსპერიმენტალური]", + "library_watching_settings_description": "ავტომატურად დააკვირდი შეცვლილი ფაილებისთვის", + "logging_enable_description": "ჟურნალირების ჩართვა", + "logging_level_description": "როცა ჩართულია რომელი ჟურნალირების დონის გამოყენება.", + "logging_settings": "ჟურნალირება", + "machine_learning_availability_checks_description": "ავტომატურად აღმოაჩინე და აირჩიე თავისუფალი მანქანური სწავლების სერვერები", + "machine_learning_availability_checks_interval": "შემოწმების ინტერვალი", "machine_learning_ocr": "OCR", "map_settings": "რუკა", "migration_job": "მიგრაცია", diff --git a/i18n/kn.json b/i18n/kn.json index 12e7f0918b..6fe20c6794 100644 --- a/i18n/kn.json +++ b/i18n/kn.json @@ -519,6 +519,9 @@ "allow_edits": "ಸಂಪಾದನೆಗಳನ್ನು ಅನುಮತಿಸಿ", "allow_public_user_to_download": "ಸಾರ್ವಜನಿಕ ಬಳಕೆದಾರರು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಅನುಮತಿಸಿ", "allow_public_user_to_upload": "ಸಾರ್ವಜನಿಕ ಬಳಕೆದಾರರಿಗೆ ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಅನುಮತಿಸಿ", + "allowed": "ಅನುಮತಿಸಲಾಗಿದೆ", + "alt_text_qr_code": "QR ಕೋಡ್ ಚಿತ್ರ", + "always_keep": "ಯಾವಾಗಲೂ ಇಟ್ಟುಕೊಳ್ಳಿ", "always_keep_photos_hint": "ಸ್ಥಳಾವಕಾಶ ಮುಕ್ತಗೊಳಿಸುವುದರಿಂದ ಈ ಸಾಧನದಲ್ಲಿ ಎಲ್ಲಾ ಫೋಟೋಗಳನ್ನು ಇರಿಸುತ್ತದೆ.", "always_keep_videos_hint": "ಸ್ಥಳಾವಕಾಶ ಮುಕ್ತಗೊಳಿಸುವುದರಿಂದ ಎಲ್ಲಾ ವೀಡಿಯೊಗಳು ಈ ಸಾಧನದಲ್ಲಿ ಉಳಿಯುತ್ತವೆ.", "anti_clockwise": "ಅಪ್ರದಕ್ಷಿಣಾಕಾರವಾಗಿ", @@ -533,6 +536,7 @@ "appears_in": "ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ", "archive": "ಆರ್ಕೈವ್", "archive_or_unarchive_photo": "ಫೋಟೋವನ್ನು ಆರ್ಕೈವ್ ಮಾಡಿ ಅಥವಾ ಅನ್‌ಆರ್ಕೈವ್ ಮಾಡಿ", + "archive_page_no_archived_assets": "ಯಾವುದೇ ಆರ್ಕೈವ್ ಮಾಡಿದ ಸ್ವತ್ತುಗಳು ಕಂಡುಬಂದಿಲ್ಲ", "archive_size_description": "ಡೌನ್‌ಲೋಡ್‌ಗಳಿಗಾಗಿ ಆರ್ಕೈವ್ ಗಾತ್ರವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ (GiB ನಲ್ಲಿ)", "are_these_the_same_person": "ಇವರು ಒಂದೇ ವ್ಯಕ್ತಿಯೇ?", "are_you_sure_to_do_this": "ನೀವು ಇದನ್ನು ಮಾಡಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", @@ -569,6 +573,7 @@ "asset_viewer_settings_subtitle": "ನಿಮ್ಮ ಗ್ಯಾಲರಿ ವೀಕ್ಷಕ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ", "asset_viewer_settings_title": "ಆಸ್ತಿ ವೀಕ್ಷಕ", "assets": "ಸ್ವತ್ತುಗಳು", + "assets_deleted_permanently": "{count} ಸ್ವತ್ತು(ಗಳು) ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗಿದೆ", "assets_deleted_permanently_from_server": "ಇಮ್ಮಿಚ್ ಸರ್ವರ್‌ನಿಂದ {count} ಸ್ವತ್ತು(ಗಳು) ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗಿದೆ", "assets_removed_permanently_from_device": "ನಿಮ್ಮ ಸಾಧನದಿಂದ {count} ಸ್ವತ್ತು(ಗಳನ್ನು) ಶಾಶ್ವತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗಿದೆ", "assets_restore_confirmation": "ನಿಮ್ಮ ಎಲ್ಲಾ ಅನುಪಯುಕ್ತ ಸ್ವತ್ತುಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ನೀವು ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ! ಯಾವುದೇ ಆಫ್‌ಲೈನ್ ಸ್ವತ್ತುಗಳನ್ನು ಈ ರೀತಿಯಲ್ಲಿ ಮರುಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ ಎಂಬುದನ್ನು ಗಮನಿಸಿ.", @@ -596,20 +601,44 @@ "backup_all": "ಎಲ್ಲವೂ", "backup_background_service_backup_failed_message": "ಸ್ವತ್ತುಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ಮರುಪ್ರಯತ್ನಿಸಲಾಗುತ್ತಿದೆ…", "backup_background_service_connection_failed_message": "ಸರ್ವರ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು ವಿಫಲವಾಗಿದೆ. ಮರುಪ್ರಯತ್ನಿಸಲಾಗುತ್ತಿದೆ…", + "backup_background_service_default_notification": "ಹೊಸ ಸ್ವತ್ತುಗಳನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ…", + "backup_background_service_in_progress_notification": "ನಿಮ್ಮ ಸ್ವತ್ತುಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲಾಗುತ್ತಿದೆ…", + "backup_background_service_upload_failure_notification": "{filename} ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ", "backup_controller_page_background_app_refresh_disabled_content": "ಹಿನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ಬಳಸಲು ಸೆಟ್ಟಿಂಗ್‌ಗಳು > ಸಾಮಾನ್ಯ > ಹಿನ್ನೆಲೆ ಅಪ್ಲಿಕೇಶನ್ ರಿಫ್ರೆಶ್‌ನಲ್ಲಿ ಹಿನ್ನೆಲೆ ಅಪ್ಲಿಕೇಶನ್ ರಿಫ್ರೆಶ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.", + "backup_controller_page_background_app_refresh_disabled_title": "ಹಿನ್ನೆಲೆ ಅಪ್ಲಿಕೇಶನ್ ರಿಫ್ರೆಶ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ", + "backup_controller_page_background_battery_info_link": "ಹೇಗೆಂದು ನನಗೆ ತೋರಿಸಿ", "backup_controller_page_background_battery_info_message": "ಅತ್ಯುತ್ತಮ ಹಿನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ಅನುಭವಕ್ಕಾಗಿ, ಇಮ್ಮಿಚ್‌ಗಾಗಿ ಹಿನ್ನೆಲೆ ಚಟುವಟಿಕೆಯನ್ನು ನಿರ್ಬಂಧಿಸುವ ಯಾವುದೇ ಬ್ಯಾಟರಿ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳನ್ನು ದಯವಿಟ್ಟು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ.\n\nಇದು ಸಾಧನ-ನಿರ್ದಿಷ್ಟವಾಗಿರುವುದರಿಂದ, ದಯವಿಟ್ಟು ನಿಮ್ಮ ಸಾಧನ ತಯಾರಕರಿಗೆ ಅಗತ್ಯವಿರುವ ಮಾಹಿತಿಯನ್ನು ನೋಡಿ.", + "backup_controller_page_background_battery_info_ok": "ಸರಿ", + "backup_controller_page_background_battery_info_title": "ಬ್ಯಾಟರಿ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳು", + "backup_controller_page_background_charging": "ಚಾರ್ಜ್ ಮಾಡುವಾಗ ಮಾತ್ರ", "backup_controller_page_background_configure_error": "ಹಿನ್ನೆಲೆ ಸೇವೆಯನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ", "backup_controller_page_background_delay": "ಹೊಸ ಸ್ವತ್ತುಗಳ ಬ್ಯಾಕಪ್ ವಿಳಂಬ: {duration}", "backup_controller_page_background_description": "ಅಪ್ಲಿಕೇಶನ್ ತೆರೆಯದೆಯೇ ಯಾವುದೇ ಹೊಸ ಸ್ವತ್ತುಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬ್ಯಾಕಪ್ ಮಾಡಲು ಹಿನ್ನೆಲೆ ಸೇವೆಯನ್ನು ಆನ್ ಮಾಡಿ", "backup_controller_page_background_is_off": "ಸ್ವಯಂಚಾಲಿತ ಹಿನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ಆಫ್ ಆಗಿದೆ", "backup_controller_page_background_is_on": "ಸ್ವಯಂಚಾಲಿತ ಹಿನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ಆನ್ ಆಗಿದೆ", + "backup_controller_page_background_turn_off": "ಹಿನ್ನೆಲೆ ಸೇವೆಯನ್ನು ಆಫ್ ಮಾಡಿ", + "backup_controller_page_background_turn_on": "ಹಿನ್ನೆಲೆ ಸೇವೆಯನ್ನು ಆನ್ ಮಾಡಿ", + "backup_controller_page_background_wifi": "ವೈ-ಫೈ ನಲ್ಲಿ ಮಾತ್ರ", + "backup_controller_page_backup": "ಬ್ಯಾಕಪ್", "backup_controller_page_backup_sub": "ಬ್ಯಾಕಪ್ ಮಾಡಿದ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳು", + "backup_controller_page_created": "ರಚಿಸಲಾದ ದಿನಾಂಕ: {date}", "backup_controller_page_desc_backup": "ಅಪ್ಲಿಕೇಶನ್ ತೆರೆಯುವಾಗ ಸರ್ವರ್‌ಗೆ ಹೊಸ ಸ್ವತ್ತುಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಮುನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ಅನ್ನು ಆನ್ ಮಾಡಿ.", + "backup_controller_page_failed": "ವಿಫಲವಾಗಿದೆ ({count})", + "backup_controller_page_filename": "ಫೈಲ್ ಹೆಸರು: {filename} [{size}]", + "backup_controller_page_id": "ಐಡಿ: {id}", + "backup_controller_page_info": "ಬ್ಯಾಕಪ್ ಮಾಹಿತಿ", + "backup_controller_page_none_selected": "ಯಾವುದನ್ನೂ ಆಯ್ಕೆ ಮಾಡಿಲ್ಲ", + "backup_controller_page_remainder": "ಶೇಷ", "backup_controller_page_remainder_sub": "ಆಯ್ಕೆಯಿಂದ ಬ್ಯಾಕಪ್ ಮಾಡಲು ಉಳಿದಿರುವ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳು", + "backup_controller_page_server_storage": "ಸರ್ವರ್ ಸಂಗ್ರಹಣೆ", + "backup_controller_page_start_backup": "ಬ್ಯಾಕಪ್ ಪ್ರಾರಂಭಿಸಿ", "backup_controller_page_status_off": "ಸ್ವಯಂಚಾಲಿತ ಮುನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ಆಫ್ ಆಗಿದೆ", "backup_controller_page_status_on": "ಸ್ವಯಂಚಾಲಿತ ಮುನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ಆನ್ ಆಗಿದೆ", "backup_controller_page_to_backup": "ಬ್ಯಾಕಪ್ ಮಾಡಬೇಕಾದ ಆಲ್ಬಮ್‌ಗಳು", "backup_controller_page_total_sub": "ಆಯ್ದ ಆಲ್ಬಮ್‌ಗಳಿಂದ ಎಲ್ಲಾ ಅನನ್ಯ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳು", + "backup_controller_page_turn_off": "ಮುನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ಆಫ್ ಮಾಡಿ", + "backup_controller_page_turn_on": "ಮುನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ಆನ್ ಮಾಡಿ", + "backup_controller_page_uploading_file_info": "ಫೈಲ್ ಮಾಹಿತಿಯನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ", "backup_err_only_album": "ಒಂದೇ ಆಲ್ಬಮ್ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಿಲ್ಲ", "backup_error_sync_failed": "ಸಿಂಕ್ ವಿಫಲವಾಗಿದೆ. ಬ್ಯಾಕಪ್ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.", "backup_info_card_assets": "ಸ್ವತ್ತುಗಳು", @@ -629,22 +658,58 @@ "biometric_not_available": "ಈ ಸಾಧನದಲ್ಲಿ ಬಯೋಮೆಟ್ರಿಕ್ ದೃಢೀಕರಣ ಲಭ್ಯವಿಲ್ಲ", "birthdate_saved": "ಜನ್ಮ ದಿನಾಂಕವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಉಳಿಸಲಾಗಿದೆ", "birthdate_set_description": "ಫೋಟೋ ತೆಗೆಯುವ ಸಮಯದಲ್ಲಿ ಆ ವ್ಯಕ್ತಿಯ ವಯಸ್ಸನ್ನು ಲೆಕ್ಕಹಾಕಲು ಜನ್ಮ ದಿನಾಂಕವನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.", + "blurred_background": "ಮಸುಕಾದ ಹಿನ್ನೆಲೆ", "bugs_and_feature_requests": "ದೋಷಗಳು ಮತ್ತು ವೈಶಿಷ್ಟ್ಯ ವಿನಂತಿಗಳು", "build": "ನಿರ್ಮಾಣ", + "build_image": "ಚಿತ್ರವನ್ನು ನಿರ್ಮಿಸಿ", "bulk_delete_duplicates_confirmation": "ನೀವು {count, plural, one {# duplicate asset} other {# duplicate assets}} ಅನ್ನು ಬೃಹತ್ ಪ್ರಮಾಣದಲ್ಲಿ ಅಳಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಇದು ಪ್ರತಿ ಗುಂಪಿನ ಅತಿದೊಡ್ಡ ಆಸ್ತಿಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಇತರ ಎಲ್ಲಾ ನಕಲುಗಳನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸುತ್ತದೆ. ನೀವು ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ!", "bulk_keep_duplicates_confirmation": "ನೀವು {count, plural, one {# duplicate asset} other {# duplicate assets}} ಅನ್ನು ಇರಿಸಿಕೊಳ್ಳಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಇದು ಯಾವುದನ್ನೂ ಅಳಿಸದೆ ಎಲ್ಲಾ ನಕಲಿ ಗುಂಪುಗಳನ್ನು ಪರಿಹರಿಸುತ್ತದೆ.", "bulk_trash_duplicates_confirmation": "ನೀವು ಖಚಿತವಾಗಿಯೂ ಬಲ್ಕ್ ಟ್ರ್ಯಾಶ್ ಮಾಡಲು ಬಯಸುತ್ತೀರಾ {count, plural, one {# duplicate asset} other {# duplicate assets}}? ಇದು ಪ್ರತಿ ಗುಂಪಿನ ಅತಿದೊಡ್ಡ ಆಸ್ತಿಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಇತರ ಎಲ್ಲಾ ನಕಲುಗಳನ್ನು ಟ್ರ್ಯಾಶ್ ಮಾಡುತ್ತದೆ.", + "buy": "ಇಮ್ಮಿಚ್ ಖರೀದಿಸಿ", + "cache_settings_clear_cache_button": "ಸಂಗ್ರಹವನ್ನು ತೆರವುಗೊಳಿಸಿ", "cache_settings_clear_cache_button_title": "ಅಪ್ಲಿಕೇಶನ್‌ನ ಕ್ಯಾಶ್ ಅನ್ನು ತೆರವುಗೊಳಿಸುತ್ತದೆ. ಕ್ಯಾಶ್ ಅನ್ನು ಮರುನಿರ್ಮಿಸುವವರೆಗೆ ಇದು ಅಪ್ಲಿಕೇಶನ್‌ನ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ಗಮನಾರ್ಹವಾಗಿ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ.", + "cache_settings_duplicated_assets_clear_button": "ತೆರವುಗೊಳಿಸಿ", + "cache_settings_duplicated_assets_subtitle": "ಅಪ್ಲಿಕೇಶನ್ ಪಟ್ಟಿ ಮಾಡಿರುವ ನಿರ್ಲಕ್ಷಿಸಲಾದ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳು", + "cache_settings_duplicated_assets_title": "ನಕಲಿ ಸ್ವತ್ತುಗಳು ({count})", + "cache_settings_statistics_album": "ಲೈಬ್ರರಿ ಥಂಬ್‌ನೇಲ್‌ಗಳು", + "cache_settings_statistics_full": "ಪೂರ್ಣ ಚಿತ್ರಗಳು", + "cache_settings_statistics_shared": "ಹಂಚಿಕೊಂಡ ಆಲ್ಬಮ್ ಥಂಬ್‌ನೇಲ್‌ಗಳು", + "cache_settings_statistics_thumbnail": "ಥಂಬ್‌ನೇಲ್‌ಗಳು", + "cache_settings_statistics_title": "ಕ್ಯಾಶ್ ಬಳಕೆ", "cache_settings_subtitle": "ಇಮ್ಮಿಚ್ ಮೊಬೈಲ್ ಅಪ್ಲಿಕೇಶನ್‌ನ ಕ್ಯಾಶಿಂಗ್ ನಡವಳಿಕೆಯನ್ನು ನಿಯಂತ್ರಿಸಿ", "cache_settings_tile_subtitle": "ಸ್ಥಳೀಯ ಸಂಗ್ರಹಣೆಯ ನಡವಳಿಕೆಯನ್ನು ನಿಯಂತ್ರಿಸಿ", + "cache_settings_tile_title": "ಸ್ಥಳೀಯ ಸಂಗ್ರಹಣೆ", + "cache_settings_title": "ಕ್ಯಾಶಿಂಗ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು", "camera": "ಕ್ಯಾಮೆರಾ", + "camera_brand": "ಕ್ಯಾಮೆರಾ ಬ್ರ್ಯಾಂಡ್", + "camera_model": "ಕ್ಯಾಮೆರಾ ಮಾದರಿ", "cancel": "ರದ್ದುಮಾಡಿ", + "cancel_search": "ಹುಡುಕಾಟ ರದ್ದುಮಾಡಿ", + "canceled": "ರದ್ದುಮಾಡಿದೆ", + "canceling": "ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತಿದೆ", + "cannot_merge_people": "ಜನರನ್ನು ವಿಲೀನಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", "cannot_undo_this_action": "ನೀವು ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ!", "cannot_update_the_description": "ವಿವರಣೆಯನ್ನು ನವೀಕರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", + "cast": "ಪಾತ್ರವರ್ಗ", + "cast_description": "ಲಭ್ಯವಿರುವ ಬಿತ್ತರಿಸುವಿಕೆ ಗಮ್ಯಸ್ಥಾನಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ", + "change_date": "ದಿನಾಂಕ ಬದಲಾಯಿಸಿ", + "change_description": "ವಿವರಣೆಯನ್ನು ಬದಲಾಯಿಸಿ", + "change_display_order": "ಪ್ರದರ್ಶನ ಕ್ರಮವನ್ನು ಬದಲಾಯಿಸಿ", + "change_expiration_time": "ಮುಕ್ತಾಯ ಸಮಯವನ್ನು ಬದಲಾಯಿಸಿ", + "change_location": "ಸ್ಥಳ ಬದಲಾಯಿಸಿ", + "change_name": "ಹೆಸರು ಬದಲಾಯಿಸಿ", + "change_name_successfully": "ಹೆಸರನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಬದಲಾಯಿಸಲಾಗಿದೆ", + "change_password": "ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾಯಿಸಿ", "change_password_description": "ನೀವು ಸಿಸ್ಟಮ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡುತ್ತಿರುವುದು ಇದೇ ಮೊದಲು ಅಥವಾ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾಯಿಸಲು ವಿನಂತಿಯನ್ನು ಮಾಡಲಾಗಿದೆ. ದಯವಿಟ್ಟು ಕೆಳಗೆ ಹೊಸ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸಿ.", + "change_password_form_confirm_password": "ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ದೃಢೀಕರಿಸಿ", "change_password_form_description": "ಹಾಯ್ {name},\n\nನೀವು ಮೊದಲ ಬಾರಿಗೆ ಸಿಸ್ಟಮ್‌ಗೆ ಸೈನ್ ಇನ್ ಆಗಿದ್ದೀರಿ ಅಥವಾ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾಯಿಸಲು ವಿನಂತಿಯನ್ನು ಮಾಡಲಾಗಿದೆ. ದಯವಿಟ್ಟು ಕೆಳಗೆ ಹೊಸ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸಿ.", "change_password_form_log_out": "ಇತರ ಎಲ್ಲಾ ಸಾಧನಗಳನ್ನು ಲಾಗ್ ಔಟ್ ಮಾಡಿ", "change_password_form_log_out_description": "ಇತರ ಎಲ್ಲಾ ಸಾಧನಗಳಿಂದ ಲಾಗ್ ಔಟ್ ಆಗಲು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ", + "change_password_form_new_password": "ಹೊಸ ಪಾಸ್‌ವರ್ಡ್", + "change_password_form_password_mismatch": "ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಹೊಂದಿಕೆಯಾಗುತ್ತಿಲ್ಲ", + "change_password_form_reenter_new_password": "ಹೊಸ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಮತ್ತೆ ನಮೂದಿಸಿ", + "change_pin_code": "ಪಿನ್ ಕೋಡ್ ಬದಲಾಯಿಸಿ", + "change_trigger": "ಟ್ರಿಗ್ಗರ್ ಬದಲಾಯಿಸಿ", "change_trigger_prompt": "ನೀವು ಟ್ರಿಗ್ಗರ್ ಅನ್ನು ಬದಲಾಯಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಇದು ಎಲ್ಲಾ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಕ್ರಿಯೆಗಳು ಮತ್ತು ಫಿಲ್ಟರ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ.", "charging_requirement_mobile_backup": "ಹಿನ್ನೆಲೆ ಬ್ಯಾಕಪ್‌ಗೆ ಸಾಧನವು ಚಾರ್ಜ್ ಆಗುತ್ತಿರಬೇಕು", "check_corrupt_asset_backup": "ಭ್ರಷ್ಟ ಆಸ್ತಿ ಬ್ಯಾಕಪ್‌ಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಿ", @@ -661,15 +726,31 @@ "cleanup_step4_summary": "ನಿಮ್ಮ ಸ್ಥಳೀಯ ಸಾಧನದಿಂದ ತೆಗೆದುಹಾಕಲು {count} ಸ್ವತ್ತುಗಳನ್ನು ({date} ಕ್ಕಿಂತ ಮೊದಲು ರಚಿಸಲಾಗಿದೆ). ಇಮ್ಮಿಚ್ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಫೋಟೋಗಳನ್ನು ಪ್ರವೇಶಿಸಬಹುದು.", "cleanup_trash_hint": "ಶೇಖರಣಾ ಸ್ಥಳವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಮರಳಿ ಪಡೆಯಲು, ಸಿಸ್ಟಮ್ ಗ್ಯಾಲರಿ ಅಪ್ಲಿಕೇಶನ್ ತೆರೆಯಿರಿ ಮತ್ತು ಕಸವನ್ನು ಖಾಲಿ ಮಾಡಿ", "clear": "ನಿರ್ಮಲ", + "clear_all": "ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿ", "clear_all_recent_searches": "ಇತ್ತೀಚಿನ ಎಲ್ಲಾ ಹುಡುಕಾಟಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ", + "clear_file_cache": "ಫೈಲ್ ಸಂಗ್ರಹವನ್ನು ತೆರವುಗೊಳಿಸಿ", + "clear_message": "ಸಂದೇಶವನ್ನು ತೆರವುಗೊಳಿಸಿ", + "clear_value": "ಮೌಲ್ಯವನ್ನು ತೆರವುಗೊಳಿಸಿ", + "client_cert_dialog_msg_confirm": "ಸರಿ", + "client_cert_enter_password": "ಪಾಸ್ವರ್ಡ್ ನಮೂದಿಸಿ", + "client_cert_import": "ಆಮದು ಮಾಡಿ", + "client_cert_import_success_msg": "ಕ್ಲೈಂಟ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಆಮದು ಮಾಡಿಕೊಳ್ಳಲಾಗಿದೆ", "client_cert_invalid_msg": "ಅಮಾನ್ಯ ಪ್ರಮಾಣಪತ್ರ ಫೈಲ್ ಅಥವಾ ತಪ್ಪು ಪಾಸ್‌ವರ್ಡ್", "client_cert_password_message": "ಈ ಪ್ರಮಾಣಪತ್ರಕ್ಕಾಗಿ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ", + "client_cert_password_title": "ಪ್ರಮಾಣಪತ್ರ ಪಾಸ್ವರ್ಡ್", + "client_cert_remove_msg": "ಕ್ಲೈಂಟ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ", "client_cert_subtitle": "PKCS12 (.p12, .pfx) ಸ್ವರೂಪವನ್ನು ಮಾತ್ರ ಬೆಂಬಲಿಸುತ್ತದೆ. ಲಾಗಿನ್ ಆಗುವ ಮೊದಲು ಮಾತ್ರ ಪ್ರಮಾಣಪತ್ರ ಆಮದು/ತೆಗೆದುಹಾಕುವಿಕೆ ಲಭ್ಯವಿದೆ", + "client_cert_title": "SSL ಕ್ಲೈಂಟ್ ಪ್ರಮಾಣಪತ್ರ [ಪ್ರಾಯೋಗಿಕ]", "clockwise": "ಕ್ಲಾಕ್‌ವೈಸ್", "close": "ಮುಚ್ಚಿ", "collapse": "ಕುಗ್ಗಿಸು", + "collapse_all": "ಎಲ್ಲವನ್ನು ಕುಗ್ಗಿಸಿ", "color": "ಬಣ್ಣ", + "color_theme": "ಬಣ್ಣ ಥೀಮ್", + "command": "ಆಜ್ಞೆ", "command_palette_prompt": "ಪುಟಗಳು, ಕ್ರಿಯೆಗಳು ಅಥವಾ ಆಜ್ಞೆಗಳನ್ನು ತ್ವರಿತವಾಗಿ ಹುಡುಕಿ", + "command_palette_to_close": "ಮುಚ್ಚಲು", + "command_palette_to_navigate": "ಪ್ರವೇಶಿಸಲು", "confirm": "ದೃಢೀಕರಿಸಿ", "confirm_delete_face": "ನೀವು ಸ್ವತ್ತಿನಿಂದ {name} ಮುಖವನ್ನು ಅಳಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", "confirm_delete_shared_link": "ಈ ಹಂಚಿಕೊಂಡ ಲಿಂಕ್ ಅನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", @@ -679,30 +760,81 @@ "contain": "ಒಳಗೊಂಡಿರುತ್ತದೆ", "context": "ಸಂದರ್ಭ", "continue": "ಮುಂದುವರಿಸಿ", + "control_bottom_app_bar_edit_time": "ದಿನಾಂಕ ಮತ್ತು ಸಮಯವನ್ನು ಸಂಪಾದಿಸಿ", + "control_bottom_app_bar_share_to": "ಹಂಚಿಕೊಳ್ಳಲು", + "control_bottom_app_bar_trash_from_immich": "ಅನುಪಯುಕ್ತಕ್ಕೆ ಸರಿಸಿ", "copied_image_to_clipboard": "ಚಿತ್ರವನ್ನು ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಲಾಗಿದೆ.", + "copied_to_clipboard": "ಕ್ಲಿಪ್ ಬೋರ್ಡ್ ಗೆ ನಕಲಿಸಲಾಗಿದೆ!", + "copy_error": "ದೋಷವನ್ನು ನಕಲಿಸಿ", + "copy_file_path": "ಫೈಲ್ ಮಾರ್ಗವನ್ನು ನಕಲಿಸಿ", + "copy_image": "ಚಿತ್ರವನ್ನು ನಕಲಿಸಿ", + "copy_link": "ಲಿಂಕ್ ನಕಲಿಸಿ", "copy_link_to_clipboard": "ಲಿಂಕ್ ಅನ್ನು ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಿ", + "copy_password": "ಪಾಸ್ವರ್ಡ್ ನಕಲಿಸಿ", + "copy_to_clipboard": "ಕ್ಲಿಪ್ ಬೋರ್ಡ್ ಗೆ ನಕಲಿಸಿ", "country": "ದೇಶ", "cover": "ಕವರ್", "covers": "ಕವರ್‌ಗಳು", "create": "ರಚಿಸಿ", + "create_album": "ಆಲ್ಬಮ್ ರಚಿಸಿ", + "create_album_page_untitled": "ಶೀರ್ಷಿಕೆರಹಿತ", + "create_api_key": "ರಚಿಸಿ API ಕೀ", + "create_first_workflow": "ಮೊದಲ ಕೆಲಸದ ಹರಿವನ್ನು ರಚಿಸಿ", + "create_library": "ಗ್ರಂಥಾಲಯವನ್ನು ರಚಿಸಿ", + "create_link": "ಲಿಂಕ್ ರಚಿಸಿ", "create_link_to_share": "ಹಂಚಿಕೊಳ್ಳಲು ಲಿಂಕ್ ರಚಿಸಿ", + "create_link_to_share_description": "ಲಿಂಕ್ ಹೊಂದಿರುವ ಯಾರಾದರೂ ಆಯ್ದ ಫೋಟೋಗಳನ್ನು ನೋಡಲಿ", + "create_new": "ಹೊಸದನ್ನು ರಚಿಸಿ", + "create_new_person": "ಹೊಸ ವ್ಯಕ್ತಿಯನ್ನು ರಚಿಸಿ", "create_new_person_hint": "ಆಯ್ಕೆಮಾಡಿದ ಸ್ವತ್ತುಗಳನ್ನು ಹೊಸ ವ್ಯಕ್ತಿಗೆ ನಿಯೋಜಿಸಿ", + "create_new_user": "ಹೊಸ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಿ", + "create_shared_album_page_share_add_assets": "ಎಡಿಡಿ ಸ್ವತ್ತುಗಳು", + "create_shared_album_page_share_select_photos": "ಫೋಟೋಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ", + "create_shared_link": "ಹಂಚಿದ ಲಿಂಕ್ ರಚಿಸಿ", + "create_tag": "ಟ್ಯಾಗ್ ರಚಿಸಿ", "create_tag_description": "ಹೊಸ ಟ್ಯಾಗ್ ರಚಿಸಿ. ನೆಸ್ಟೆಡ್ ಟ್ಯಾಗ್‌ಗಳಿಗಾಗಿ, ದಯವಿಟ್ಟು ಫಾರ್ವರ್ಡ್ ಸ್ಲ್ಯಾಶ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ಟ್ಯಾಗ್‌ನ ಪೂರ್ಣ ಮಾರ್ಗವನ್ನು ನಮೂದಿಸಿ.", + "create_user": "ಬಳಕೆದಾರರನ್ನು ರಚಿಸಿ", + "create_workflow": "ಕೆಲಸದ ಹರಿವನ್ನು ರಚಿಸಿ", "created": "ರಚಿಸಲಾಗಿದೆ", + "created_at": "ರಚಿಸಲಾಗಿದೆ", + "creating_linked_albums": "ಲಿಂಕ್ಡ್ ಆಲ್ಬಮ್ ಗಳನ್ನು ರಚಿಸುವುದು ...", + "crop": "ಬೆಳೆ", + "crop_aspect_ratio_fixed": "ಸ್ಥಿರ", + "crop_aspect_ratio_free": "ಉಚಿತ", + "crop_aspect_ratio_original": "ಮೂಲ", + "crop_aspect_ratio_square": "ಚೌಕ", + "curated_object_page_title": "ವಿಷಯಗಳು", + "current_device": "ಪ್ರಸ್ತುತ ಸಾಧನ", + "current_pin_code": "ಪ್ರಸ್ತುತ ಪಿನ್ ಕೋಡ್", + "current_server_address": "ಪ್ರಸ್ತುತ ಸರ್ವರ್ ವಿಳಾಸ", + "custom_date": "ಕಸ್ಟಮ್ ದಿನಾಂಕ", + "custom_locale": "ಕಸ್ಟಮ್ ಲೊಕೇಲ್", + "custom_locale_description": "ಆಯ್ದ ಭಾಷೆ ಮತ್ತು ಪ್ರದೇಶವನ್ನು ಆಧರಿಸಿದ ದಿನಾಂಕಗಳು, ಸಮಯಗಳು ಮತ್ತು ಸಂಖ್ಯೆಗಳನ್ನು ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಿ", + "custom_url": "ಕಸ್ಟಮ್ URL", "cutoff_date_description": "ಹಿಂದಿನ ಫೋಟೋಗಳನ್ನು ಇರಿಸಿ…", "dark": "ಕತ್ತಲು", + "dark_theme": "ಡಾರ್ಕ್ ಥೀಮ್ ಗೆ ಬದಲಾಯಿಸಿ", + "date": "ದಿನಾಂಕ", + "date_and_time": "ದಿನಾಂಕ ಮತ್ತು ಸಮಯ", + "date_before": "ಮೊದಲು ದಿನಾಂಕ", "date_of_birth_saved": "ಜನ್ಮ ದಿನಾಂಕವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಉಳಿಸಲಾಗಿದೆ", + "date_range": "ದಿನಾಂಕ ಶ್ರೇಣಿ", "day": "ದಿನ", - "deduplication_criteria_1": "ಚಿತ್ರದ ಗಾತ್ರ ಬೈಟ್‌ಗಳಲ್ಲಿ", - "deduplication_criteria_2": "EXIF ಡೇಟಾದ ಎಣಿಕೆ", - "deduplication_info_description": "ಸ್ವತ್ತುಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಪೂರ್ವ ಆಯ್ಕೆ ಮಾಡಲು ಮತ್ತು ನಕಲುಗಳನ್ನು ದೊಡ್ಡ ಪ್ರಮಾಣದಲ್ಲಿ ತೆಗೆದುಹಾಕಲು, ನಾವು ಇಲ್ಲಿ ನೋಡುತ್ತೇವೆ:", + "days": "ದಿನಗಳು", + "deduplicate_all": "ಎಲ್ಲವನ್ನೂ ಸಮರ್ಪಿಸಿ", + "default_locale": "ಡೀಫಾಲ್ಟ್ ಲೊಕೇಲ್", + "default_locale_description": "ನಿಮ್ಮ ಬ್ರೌಸರ್ ಲೊಕೇಲ್ ಆಧಾರಿತ ಸ್ವರೂಪ ದಿನಾಂಕಗಳು ಮತ್ತು ಸಂಖ್ಯೆಗಳು", "delete": "ಅಳಿಸಿ", "delete_action_confirmation_message": "ನೀವು ಈ ಸ್ವತ್ತನ್ನು ಅಳಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಈ ಕ್ರಿಯೆಯು ಸ್ವತ್ತನ್ನು ಸರ್ವರ್‌ನ ಅನುಪಯುಕ್ತಕ್ಕೆ ಸರಿಸುತ್ತದೆ ಮತ್ತು ನೀವು ಅದನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಅಳಿಸಲು ಬಯಸಿದರೆ ಕೇಳುತ್ತದೆ", + "delete_album": "ಆಲ್ಬಮ್ ಅಳಿಸಿ", "delete_api_key_prompt": "ಈ API ಕೀಲಿಯನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", "delete_dialog_alert": "ಈ ಐಟಂಗಳನ್ನು ಇಮ್ಮಿಚ್ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದಿಂದ ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ", "delete_dialog_alert_local": "ಈ ಐಟಂಗಳನ್ನು ನಿಮ್ಮ ಸಾಧನದಿಂದ ಶಾಶ್ವತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ ಆದರೆ ಇಮ್ಮಿಚ್ ಸರ್ವರ್‌ನಲ್ಲಿ ಇನ್ನೂ ಲಭ್ಯವಿರುತ್ತದೆ", "delete_dialog_alert_local_non_backed_up": "ಕೆಲವು ಐಟಂಗಳನ್ನು ಇಮ್ಮಿಚ್‌ಗೆ ಬ್ಯಾಕಪ್ ಮಾಡಲಾಗಿಲ್ಲ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದಿಂದ ಶಾಶ್ವತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ", + "delete_dialog_alert_remote": "ಈ ಐಟಂಗಳನ್ನು ಇಮ್ಮಿಚ್ ಸರ್ವರ್‌ನಿಂದ ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ", "delete_duplicates_confirmation": "ನೀವು ಈ ನಕಲುಗಳನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", + "delete_local_dialog_ok_backed_up_only": "ಬ್ಯಾಕಪ್ ಮಾಡಿರುವುದನ್ನು ಮಾತ್ರ ಅಳಿಸಿ", + "delete_tag_confirmation_prompt": "ನೀವು {tagName} ಟ್ಯಾಗ್ ಅನ್ನು ಅಳಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", "deletes_missing_assets": "ಡಿಸ್ಕ್‌ನಿಂದ ಕಾಣೆಯಾದ ಸ್ವತ್ತುಗಳನ್ನು ಅಳಿಸುತ್ತದೆ", "description": "ವಿವರಣೆ", "description_input_submit_error": "ವಿವರಣೆಯನ್ನು ನವೀಕರಿಸುವಲ್ಲಿ ದೋಷ, ಹೆಚ್ಚಿನ ವಿವರಗಳಿಗಾಗಿ ಲಾಗ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ", @@ -723,6 +855,7 @@ "downloading": "ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ", "drop_files_to_upload": "ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಫೈಲ್‌ಗಳನ್ನು ಎಲ್ಲಿಯಾದರೂ ಬಿಡಿ", "duplicates": "ನಕಲುಗಳು", + "duplicates_description": "ಪ್ರತಿಯೊಂದು ಗುಂಪನ್ನು, ಯಾವುದಾದರೂ ಇದ್ದರೆ, ನಕಲುಗಳು ಎಂದು ಸೂಚಿಸುವ ಮೂಲಕ ಪರಿಹರಿಸಿ.", "duration": "ಅವಧಿ", "edit": "ತಿದ್ದು", "edit_date_and_time": "ದಿನಾಂಕ ಮತ್ತು ಸಮಯವನ್ನು ಸಂಪಾದಿಸಿ", @@ -733,6 +866,7 @@ "editor_close_without_save_prompt": "ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗುವುದಿಲ್ಲ", "editor_confirm_reset_all_changes": "ನೀವು ಎಲ್ಲಾ ಬದಲಾವಣೆಗಳನ್ನು ಮರುಹೊಂದಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", "email": "ಇಮೇಲ್", + "empty_folder": "ಈ ಫೋಲ್ಡರ್ ಖಾಲಿಯಾಗಿದೆ", "empty_trash_confirmation": "ನೀವು ಕಸವನ್ನು ಖಾಲಿ ಮಾಡಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಇದು ಇಮ್ಮಿಚ್‌ನಿಂದ ಕಸದಲ್ಲಿರುವ ಎಲ್ಲಾ ಸ್ವತ್ತುಗಳನ್ನು ಶಾಶ್ವತವಾಗಿ ತೆಗೆದುಹಾಕುತ್ತದೆ.\nನೀವು ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ!", "enable": "ಸಕ್ರಿಯಗೊಳಿಸಿ", "enable_biometric_auth_description": "ಬಯೋಮೆಟ್ರಿಕ್ ದೃಢೀಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ನಿಮ್ಮ ಪಿನ್ ಕೋಡ್ ನಮೂದಿಸಿ", @@ -753,12 +887,14 @@ "error_adding_users_to_album": "ಬಳಕೆದಾರರನ್ನು ಆಲ್ಬಮ್‌ಗೆ ಸೇರಿಸುವಲ್ಲಿ ದೋಷ", "error_deleting_shared_user": "ಹಂಚಿಕೊಂಡ ಬಳಕೆದಾರರನ್ನು ಅಳಿಸುವಲ್ಲಿ ದೋಷ", "error_hiding_buy_button": "ಖರೀದಿ ಬಟನ್ ಮರೆಮಾಡುವಲ್ಲಿ ದೋಷ", + "error_removing_assets_from_album": "ಆಲ್ಬಮ್‌ನಿಂದ ಸ್ವತ್ತುಗಳನ್ನು ತೆಗೆದುಹಾಕುವಲ್ಲಿ ದೋಷ, ಹೆಚ್ಚಿನ ವಿವರಗಳಿಗಾಗಿ ಕನ್ಸೋಲ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ", "error_selecting_all_assets": "ಎಲ್ಲಾ ಸ್ವತ್ತುಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡುವಾಗ ದೋಷ ಉಂಟಾಗಿದೆ", "exclusion_pattern_already_exists": "ಈ ಹೊರಗಿಡುವ ಮಾದರಿ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ.", "failed_to_create_album": "ಆಲ್ಬಮ್ ರಚಿಸಲು ವಿಫಲವಾಗಿದೆ", "failed_to_create_shared_link": "ಹಂಚಿಕೊಂಡ ಲಿಂಕ್ ರಚಿಸಲು ವಿಫಲವಾಗಿದೆ", "failed_to_edit_shared_link": "ಹಂಚಿಕೊಂಡ ಲಿಂಕ್ ಅನ್ನು ಸಂಪಾದಿಸಲು ವಿಫಲವಾಗಿದೆ", "failed_to_get_people": "ಜನರನ್ನು ಪಡೆಯುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ", + "failed_to_keep_this_delete_others": "ಈ ಸ್ವತ್ತನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲು ಮತ್ತು ಇತರ ಸ್ವತ್ತುಗಳನ್ನು ಅಳಿಸಲು ವಿಫಲವಾಗಿದೆ", "failed_to_load_asset": "ಸ್ವತ್ತನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ", "failed_to_load_assets": "ಸ್ವತ್ತುಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ", "failed_to_load_people": "ಜನರನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ", @@ -770,6 +906,7 @@ "incorrect_email_or_password": "ತಪ್ಪಾದ ಇಮೇಲ್ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್", "library_folder_already_exists": "ಈ ಆಮದು ಮಾರ್ಗವು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ.", "profile_picture_transparent_pixels": "ಪ್ರೊಫೈಲ್ ಚಿತ್ರಗಳು ಪಾರದರ್ಶಕ ಪಿಕ್ಸೆಲ್‌ಗಳನ್ನು ಹೊಂದಿರಬಾರದು. ದಯವಿಟ್ಟು ಚಿತ್ರವನ್ನು ಜೂಮ್ ಇನ್ ಮಾಡಿ ಮತ್ತು/ಅಥವಾ ಸರಿಸಿ.", + "quota_higher_than_disk_size": "ನೀವು ಡಿಸ್ಕ್ ಗಾತ್ರಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಕೋಟಾವನ್ನು ಹೊಂದಿಸಿದ್ದೀರಿ", "unable_to_add_album_users": "ಆಲ್ಬಮ್‌ಗೆ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "unable_to_add_assets_to_shared_link": "ಹಂಚಿಕೊಂಡ ಲಿಂಕ್‌ಗೆ ಸ್ವತ್ತುಗಳನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "unable_to_add_comment": "ಕಾಮೆಂಟ್ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", @@ -843,15 +980,23 @@ "unable_to_upload_file": "ಫೈಲ್ ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ" }, "exif": "ಎಕ್ಸಿಫ್", + "experimental_settings_new_asset_list_title": "ಪ್ರಾಯೋಗಿಕ ಫೋಟೋ ಗ್ರಿಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ", "experimental_settings_subtitle": "ನಿಮ್ಮ ಸ್ವಂತ ಅಪಾಯದಲ್ಲಿ ಬಳಸಿ!", "expired": "ಅವಧಿ ಮೀರಿದೆ", "explore": "ಪರಿಶೋಧಿಸು", "explorer": "ಎಕ್ಸ್‌ಪ್ಲೋರರ್", + "export": "ರಫ್ತು", + "extension": "ವಿಸ್ತರಣೆ", + "external": "ಬಾಹ್ಯ", "external_network_sheet_info": "ನೀವು ಆದ್ಯತೆಯ ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಇಲ್ಲದಿರುವಾಗ, ಅಪ್ಲಿಕೇಶನ್ ಮೇಲಿನಿಂದ ಕೆಳಕ್ಕೆ ತಲುಪಬಹುದಾದ ಕೆಳಗಿನ URL ಗಳಲ್ಲಿ ಮೊದಲನೆಯದರ ಮೂಲಕ ಸರ್ವರ್‌ಗೆ ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ", "face_unassigned": "ನಿಯೋಜಿಸಲಾಗಿಲ್ಲ", "failed_to_load_assets": "ಸ್ವತ್ತುಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ", + "failed_to_load_folder": "ಫೋಲ್ಡರ್ ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ", + "favorite": "ನೆಚ್ಚಿನ", "favorite_or_unfavorite_photo": "ನೆಚ್ಚಿನ ಅಥವಾ ಮೆಚ್ಚಿನದರಿಂದ ತೆಗೆದುಹಾಕಿದ ಫೋಟೋ", "favorites": "ಮೆಚ್ಚಿನವುಗಳು", + "favorites_page_no_favorites": "ಯಾವುದೇ ನೆಚ್ಚಿನ ಸ್ವತ್ತುಗಳು ಕಂಡುಬಂದಿಲ್ಲ", + "features": "ವೈಶಿಷ್ಟ್ಯಗಳು", "features_setting_description": "ಅಪ್ಲಿಕೇಶನ್ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸಿ", "file_name_or_extension": "ಫೈಲ್ ಹೆಸರು ಅಥವಾ ವಿಸ್ತರಣೆ", "filename": "ಫೈಲ್ ಹೆಸರು", @@ -866,9 +1011,11 @@ "general": "ಜನರಲ್", "geolocation_instruction_location": "GPS ನಿರ್ದೇಶಾಂಕಗಳನ್ನು ಹೊಂದಿರುವ ಸ್ವತ್ತಿನ ಸ್ಥಳವನ್ನು ಬಳಸಲು ಅದರ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡಿ, ಅಥವಾ ನಕ್ಷೆಯಿಂದ ನೇರವಾಗಿ ಸ್ಥಳವನ್ನು ಆಯ್ಕೆಮಾಡಿ", "get_wifiname_error": "ವೈ-ಫೈ ಹೆಸರನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನೀವು ಅಗತ್ಯ ಅನುಮತಿಗಳನ್ನು ನೀಡಿದ್ದೀರಿ ಮತ್ತು ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದ್ದೀರಿ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ", + "header_settings_field_validator_msg": "ಮೌಲ್ಯ ಖಾಲಿಯಾಗಿರಬಾರದು", "home_page_add_to_album_conflicts": "{album} ಆಲ್ಬಮ್‌ಗೆ {added} ಸ್ವತ್ತುಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ. {failed} ಸ್ವತ್ತುಗಳು ಈಗಾಗಲೇ ಆಲ್ಬಮ್‌ನಲ್ಲಿವೆ.", "home_page_add_to_album_err_local": "ಸ್ಥಳೀಯ ಸ್ವತ್ತುಗಳನ್ನು ಆಲ್ಬಮ್‌ಗಳಿಗೆ ಸೇರಿಸಲು ಇನ್ನೂ ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ, ಬಿಟ್ಟುಬಿಡಲಾಗುತ್ತಿದೆ", "home_page_add_to_album_success": "{album} ಆಲ್ಬಮ್‌ಗೆ {added} ಸ್ವತ್ತುಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ.", + "home_page_album_err_partner": "ಆಲ್ಬಮ್‌ಗೆ ಪಾಲುದಾರ ಸ್ವತ್ತುಗಳನ್ನು ಸೇರಿಸಲು ಇನ್ನೂ ಸಾಧ್ಯವಿಲ್ಲ, ಬಿಟ್ಟುಬಿಡಲಾಗುತ್ತಿದೆ", "home_page_archive_err_local": "ಸ್ಥಳೀಯ ಸ್ವತ್ತುಗಳನ್ನು ಇನ್ನೂ ಆರ್ಕೈವ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ, ಬಿಟ್ಟುಬಿಡಲಾಗುತ್ತಿದೆ", "home_page_archive_err_partner": "ಪಾಲುದಾರ ಸ್ವತ್ತುಗಳನ್ನು ಆರ್ಕೈವ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ, ಬಿಟ್ಟುಬಿಡಲಾಗುತ್ತಿದೆ", "home_page_delete_err_partner": "ಪಾಲುದಾರ ಸ್ವತ್ತುಗಳನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಬಿಟ್ಟುಬಿಡಲಾಗುತ್ತಿದೆ", @@ -901,24 +1048,40 @@ "language": "ಭಾಷೆ", "language_no_results_subtitle": "ನಿಮ್ಮ ಹುಡುಕಾಟ ಪದವನ್ನು ಸರಿಹೊಂದಿಸಲು ಪ್ರಯತ್ನಿಸಿ", "language_setting_description": "ನಿಮ್ಮ ಆದ್ಯತೆಯ ಭಾಷೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ", + "latitude": "ಅಕ್ಷಾಂಶ", "leave": "ಬಿಡಿ", "level": "ಮಟ್ಟ", + "library": "ಗ್ರಂಥಾಲಯ", "light": "ಬೆಳಕು", "list": "ಪಟ್ಟಿ", + "loading": "ಲೋಡ್ ಆಗುತ್ತಿದೆ", "loading_search_results_failed": "ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳನ್ನು ಲೋಡ್ ಮಾಡುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ", "local_asset_cast_failed": "ಸರ್ವರ್‌ಗೆ ಅಪ್‌ಲೋಡ್ ಮಾಡದ ಸ್ವತ್ತನ್ನು ಬಿತ್ತರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", "local_network_sheet_info": "ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್ ಬಳಸುವಾಗ ಅಪ್ಲಿಕೇಶನ್ ಈ URL ಮೂಲಕ ಸರ್ವರ್‌ಗೆ ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ", "location_permission_content": "ಸ್ವಯಂ-ಬದಲಾವಣೆ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬಳಸಲು, ಇಮ್ಮಿಚ್‌ಗೆ ಪ್ರಸ್ತುತ ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ನ ಹೆಸರನ್ನು ಓದಲು ನಿಖರವಾದ ಸ್ಥಳ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ", + "location_picker_latitude_error": "ಮಾನ್ಯವಾದ ಅಕ್ಷಾಂಶವನ್ನು ನಮೂದಿಸಿ", + "location_picker_latitude_hint": "ನಿಮ್ಮ ಅಕ್ಷಾಂಶವನ್ನು ಇಲ್ಲಿ ನಮೂದಿಸಿ", + "location_picker_longitude_error": "ಮಾನ್ಯವಾದ ರೇಖಾಂಶವನ್ನು ನಮೂದಿಸಿ", + "location_picker_longitude_hint": "ನಿಮ್ಮ ರೇಖಾಂಶವನ್ನು ಇಲ್ಲಿ ನಮೂದಿಸಿ", "log_out_all_devices": "ಎಲ್ಲಾ ಸಾಧನಗಳನ್ನು ಲಾಗ್ ಔಟ್ ಮಾಡಿ", "logged_out_all_devices": "ಎಲ್ಲಾ ಸಾಧನಗಳನ್ನು ಲಾಗ್ ಔಟ್ ಮಾಡಲಾಗಿದೆ", "login": "ಲಾಗಿನ್", + "login_disabled": "ಲಾಗಿನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ", + "login_form_api_exception": "API ವಿನಾಯಿತಿ. ದಯವಿಟ್ಟು ಸರ್ವರ್ URL ಅನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.", "login_form_err_http": "ದಯವಿಟ್ಟು http:// ಅಥವಾ https:// ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿ", "login_form_failed_get_oauth_server_config": "OAuth ಬಳಸಿಕೊಂಡು ಲಾಗಿಂಗ್ ಮಾಡುವಾಗ ದೋಷ, ಸರ್ವರ್ URL ಪರಿಶೀಲಿಸಿ", "login_form_failed_get_oauth_server_disable": "ಈ ಸರ್ವರ್‌ನಲ್ಲಿ OAuth ವೈಶಿಷ್ಟ್ಯ ಲಭ್ಯವಿಲ್ಲ", + "login_form_failed_login": "ನಿಮ್ಮನ್ನು ಲಾಗಿನ್ ಮಾಡುವಲ್ಲಿ ದೋಷ, ಸರ್ವರ್ URL, ಇಮೇಲ್ ಮತ್ತು ಪಾಸ್‌ವರ್ಡ್ ಪರಿಶೀಲಿಸಿ", "login_form_handshake_exception": "ಸರ್ವರ್‌ನೊಂದಿಗೆ ಹ್ಯಾಂಡ್‌ಶೇಕ್ ವಿನಾಯಿತಿ ಇತ್ತು. ನೀವು ಸ್ವಯಂ ಸಹಿ ಮಾಡಿದ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಬಳಸುತ್ತಿದ್ದರೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಸ್ವಯಂ ಸಹಿ ಮಾಡಿದ ಪ್ರಮಾಣಪತ್ರ ಬೆಂಬಲವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.", + "login_form_server_empty": "ಸರ್ವರ್ URL ಅನ್ನು ನಮೂದಿಸಿ.", "login_form_server_error": "ಸರ್ವರ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.", "login_has_been_disabled": "ಲಾಗಿನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.", "login_password_changed_error": "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನವೀಕರಿಸುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ", + "logout_all_device_confirmation": "ನೀವು ಎಲ್ಲಾ ಸಾಧನಗಳನ್ನು ಲಾಗ್ ಔಟ್ ಮಾಡಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", + "logout_this_device_confirmation": "ನೀವು ಈ ಸಾಧನವನ್ನು ಲಾಗ್ ಔಟ್ ಮಾಡಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", + "longitude": "ರೇಖಾಂಶ", + "look": "ನೋಡಿ", + "loop_videos_description": "ವಿವರ ವೀಕ್ಷಕದಲ್ಲಿ ವೀಡಿಯೊವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಲೂಪ್ ಮಾಡಲು ಸಕ್ರಿಯಗೊಳಿಸಿ.", "main_branch_warning": "ನೀವು ಅಭಿವೃದ್ಧಿ ಆವೃತ್ತಿಯನ್ನು ಬಳಸುತ್ತಿದ್ದೀರಿ; ಬಿಡುಗಡೆ ಆವೃತ್ತಿಯನ್ನು ಬಳಸಲು ನಾವು ಬಲವಾಗಿ ಶಿಫಾರಸು ಮಾಡುತ್ತೇವೆ!", "maintenance_description": "ಇಮ್ಮಿಚ್ ಅನ್ನು maintenance mode ಕ್ಕೆ ಇರಿಸಲಾಗಿದೆ.", "maintenance_end_error": "ನಿರ್ವಹಣಾ ಕ್ರಮವನ್ನು ಕೊನೆಗೊಳಿಸಲು ವಿಫಲವಾಗಿದೆ.", @@ -939,56 +1102,97 @@ "manage_your_devices": "ನಿಮ್ಮ ಲಾಗಿನ್ ಆಗಿರುವ ಸಾಧನಗಳನ್ನು ನಿರ್ವಹಿಸಿ", "manage_your_oauth_connection": "ನಿಮ್ಮ OAuth ಸಂಪರ್ಕವನ್ನು ನಿರ್ವಹಿಸಿ", "map": "ನಕ್ಷೆ", + "map_cannot_get_user_location": "ಬಳಕೆದಾರರ ಸ್ಥಳವನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ", "map_location_service_disabled_content": "ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಸ್ಥಳದಿಂದ ಸ್ವತ್ತುಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು ಸ್ಥಳ ಸೇವೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವ ಅಗತ್ಯವಿದೆ. ನೀವು ಈಗ ಅದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಬಯಸುವಿರಾ?", "map_marker_for_images": "{city}, {country} ದಲ್ಲಿ ತೆಗೆದ ಚಿತ್ರಗಳಿಗಾಗಿ ನಕ್ಷೆ ಮಾರ್ಕರ್", "map_marker_with_image": "ಚಿತ್ರದೊಂದಿಗೆ ನಕ್ಷೆ ಮಾರ್ಕರ್", "map_no_location_permission_content": "ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಸ್ಥಳದಿಂದ ಸ್ವತ್ತುಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು ಸ್ಥಳ ಅನುಮತಿ ಅಗತ್ಯವಿದೆ. ನೀವು ಈಗ ಅದನ್ನು ಅನುಮತಿಸಲು ಬಯಸುವಿರಾ?", "map_zoom_to_see_photos": "ಫೋಟೋಗಳನ್ನು ನೋಡಲು ಝೂಮ್ ಔಟ್ ಮಾಡಿ", + "matches": "ಪಂದ್ಯಗಳು", "memories": "ನೆನಪುಗಳು", "memories_check_back_tomorrow": "ಹೆಚ್ಚಿನ ನೆನಪುಗಳಿಗಾಗಿ ನಾಳೆ ಮತ್ತೆ ಪರಿಶೀಲಿಸಿ", "memories_setting_description": "ನಿಮ್ಮ ನೆನಪುಗಳಲ್ಲಿ ನೀವು ನೋಡುವುದನ್ನು ನಿರ್ವಹಿಸಿ", + "memories_swipe_to_close": "ಮುಚ್ಚಲು ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ", "memory": "ನೆನಪು", + "menu": "ಮೆನು", + "merge": "ವಿಲೀನ", "merge_people_limit": "ನೀವು ಒಮ್ಮೆಗೆ 5 ಮುಖಗಳನ್ನು ಮಾತ್ರ ವಿಲೀನಗೊಳಿಸಬಹುದು", "merge_people_prompt": "ನೀವು ಈ ಜನರನ್ನು ವಿಲೀನಗೊಳಿಸಲು ಬಯಸುವಿರಾ? ಈ ಕ್ರಿಯೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗುವುದಿಲ್ಲ.", + "minimize": "ಕನಿಷ್ಠೀಕರಿಸಿ", + "minute": "ನಿಮಿಷ", + "missing": "ಕಾಣೆಯಾಗಿದೆ", "mobile_app_download_onboarding_note": "ಈ ಕೆಳಗಿನ ಆಯ್ಕೆಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಕಂಪ್ಯಾನಿಯನ್ ಮೊಬೈಲ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ", + "model": "ಮಾದರಿ", + "month": "ತಿಂಗಳು", + "more": "ಇನ್ನಷ್ಟು", "move_off_locked_folder": "ಲಾಕ್ ಮಾಡಿದ ಫೋಲ್ಡರ್‌ನಿಂದ ಹೊರಗೆ ಸರಿಸಿ", "move_to_lock_folder_action_prompt": "ಲಾಕ್ ಮಾಡಲಾದ ಫೋಲ್ಡರ್‌ಗೆ {count} ಸೇರಿಸಲಾಗಿದೆ", "move_to_locked_folder_confirmation": "ಈ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಎಲ್ಲಾ ಆಲ್ಬಮ್‌ಗಳಿಂದ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ ಮತ್ತು ಲಾಕ್ ಮಾಡಲಾದ ಫೋಲ್ಡರ್‌ನಿಂದ ಮಾತ್ರ ವೀಕ್ಷಿಸಬಹುದಾಗಿದೆ", "multiselect_grid_edit_date_time_err_read_only": "ಓದಲು ಮಾತ್ರ ಸ್ವತ್ತು(ಗಳ) ದಿನಾಂಕವನ್ನು ಸಂಪಾದಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಬಿಟ್ಟುಬಿಡಲಾಗುತ್ತಿದೆ", "multiselect_grid_edit_gps_err_read_only": "ಓದಲು ಮಾತ್ರ ಸ್ವತ್ತು(ಗಳ) ಸ್ಥಳವನ್ನು ಸಂಪಾದಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಬಿಟ್ಟುಬಿಡಲಾಗುತ್ತಿದೆ", + "name": "ಹೆಸರು", "network_requirement_photos_upload": "ಫೋಟೋಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲು ಸೆಲ್ಯುಲಾರ್ ಡೇಟಾವನ್ನು ಬಳಸಿ", "network_requirement_videos_upload": "ವೀಡಿಯೊಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲು ಸೆಲ್ಯುಲಾರ್ ಡೇಟಾವನ್ನು ಬಳಸಿ", "network_requirements_updated": "ನೆಟ್‌ವರ್ಕ್ ಅವಶ್ಯಕತೆಗಳು ಬದಲಾಗಿವೆ, ಬ್ಯಾಕಪ್ ಕ್ಯೂ ಅನ್ನು ಮರುಹೊಂದಿಸಲಾಗುತ್ತಿದೆ", "networking_subtitle": "ಸರ್ವರ್ ಎಂಡ್‌ಪಾಯಿಂಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ", "new_pin_code_subtitle": "ಲಾಕ್ ಮಾಡಿದ ಫೋಲ್ಡರ್ ಅನ್ನು ನೀವು ಮೊದಲ ಬಾರಿಗೆ ಪ್ರವೇಶಿಸುತ್ತಿದ್ದೀರಿ. ಈ ಪುಟವನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಪ್ರವೇಶಿಸಲು ಪಿನ್ ಕೋಡ್ ರಚಿಸಿ", + "no": "ಇಲ್ಲ", + "no_albums_message": "ನಿಮ್ಮ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಸಂಘಟಿಸಲು ಆಲ್ಬಮ್ ರಚಿಸಿ", "no_albums_with_name_yet": "ಈ ಹೆಸರಿನೊಂದಿಗೆ ನೀವು ಇನ್ನೂ ಯಾವುದೇ ಆಲ್ಬಮ್‌ಗಳನ್ನು ಹೊಂದಿಲ್ಲ ಎಂದು ತೋರುತ್ತಿದೆ.", + "no_albums_yet": "ನಿಮ್ಮ ಬಳಿ ಇನ್ನೂ ಯಾವುದೇ ಆಲ್ಬಮ್‌ಗಳಿಲ್ಲ ಎಂದು ತೋರುತ್ತಿದೆ.", "no_archived_assets_message": "ನಿಮ್ಮ Photos ವೀಕ್ಷಣೆಯಿಂದ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಮರೆಮಾಡಲು ಅವುಗಳನ್ನು ಆರ್ಕೈವ್ ಮಾಡಿ", "no_assets_message": "ನಿಮ್ಮ ಮೊದಲ ಫೋಟೋ ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ", + "no_assets_to_show": "ತೋರಿಸಲು ಯಾವುದೇ ಸ್ವತ್ತುಗಳಿಲ್ಲ", "no_checksum_local": "ಯಾವುದೇ ಚೆಕ್ಸಮ್ ಲಭ್ಯವಿಲ್ಲ - ಸ್ಥಳೀಯ ಸ್ವತ್ತುಗಳನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ", "no_checksum_remote": "ಯಾವುದೇ ಚೆಕ್ಸಮ್ ಲಭ್ಯವಿಲ್ಲ - ರಿಮೋಟ್ ಆಸ್ತಿಯನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ", "no_duplicates_found": "ಯಾವುದೇ ನಕಲುಗಳು ಕಂಡುಬಂದಿಲ್ಲ.", "no_exif_info_available": "ಯಾವುದೇ ಎಕ್ಸಿಫ್ ಮಾಹಿತಿ ಲಭ್ಯವಿಲ್ಲ", "no_explore_results_message": "ನಿಮ್ಮ ಸಂಗ್ರಹವನ್ನು ಅನ್ವೇಷಿಸಲು ಹೆಚ್ಚಿನ ಫೋಟೋಗಳನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ.", + "no_favorites_message": "ನಿಮ್ಮ ಅತ್ಯುತ್ತಮ ಚಿತ್ರಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ತ್ವರಿತವಾಗಿ ಹುಡುಕಲು ಮೆಚ್ಚಿನವುಗಳನ್ನು ಸೇರಿಸಿ", + "no_libraries_message": "ನಿಮ್ಮ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಬಾಹ್ಯ ಲೈಬ್ರರಿಯನ್ನು ರಚಿಸಿ", "no_local_assets_found": "ಈ ಚೆಕ್ಸಮ್‌ನೊಂದಿಗೆ ಯಾವುದೇ ಸ್ಥಳೀಯ ಸ್ವತ್ತುಗಳು ಕಂಡುಬಂದಿಲ್ಲ", "no_locked_photos_message": "ಲಾಕ್ ಮಾಡಲಾದ ಫೋಲ್ಡರ್‌ನಲ್ಲಿರುವ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ ಮತ್ತು ನೀವು ನಿಮ್ಮ ಲೈಬ್ರರಿಯನ್ನು ಬ್ರೌಸ್ ಮಾಡುವಾಗ ಅಥವಾ ಹುಡುಕುವಾಗ ಅವು ಕಾಣಿಸುವುದಿಲ್ಲ.", "no_remote_assets_found": "ಈ ಚೆಕ್ಸಮ್‌ನೊಂದಿಗೆ ಯಾವುದೇ ರಿಮೋಟ್ ಸ್ವತ್ತುಗಳು ಕಂಡುಬಂದಿಲ್ಲ", "no_results_description": "ಸಮಾನಾರ್ಥಕ ಪದ ಅಥವಾ ಹೆಚ್ಚು ಸಾಮಾನ್ಯ ಕೀವರ್ಡ್ ಪ್ರಯತ್ನಿಸಿ", "no_shared_albums_message": "ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿರುವ ಜನರೊಂದಿಗೆ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಆಲ್ಬಮ್ ರಚಿಸಿ", "not_in_any_album": "ಯಾವುದೇ ಆಲ್ಬಮ್‌ನಲ್ಲಿಲ್ಲ", + "notes": "ಟಿಪ್ಪಣಿಗಳು", "notification_permission_dialog_content": "ಅಧಿಸೂಚನೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು, ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಹೋಗಿ ಮತ್ತು ಅನುಮತಿಸು ಆಯ್ಕೆಮಾಡಿ.", "notification_permission_list_tile_content": "ಅಧಿಸೂಚನೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಅನುಮತಿ ನೀಡಿ.", + "notifications": "ಅಧಿಸೂಚನೆಗಳು", "obtainium_configurator_instructions": "ಇಮ್ಮಿಚ್ ಗಿಟ್‌ಹಬ್‌ನ ಬಿಡುಗಡೆಯಿಂದ ನೇರವಾಗಿ ಆಂಡ್ರಾಯ್ಡ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲು ಮತ್ತು ನವೀಕರಿಸಲು ಅಟೇಟಿನಿಯಮ್ ಬಳಸಿ. API ಕೀಲಿಯನ್ನು ರಚಿಸಿ ಮತ್ತು ನಿಮ್ಮ ಅಟೇಟಿನಿಯಮ್ ಕಾನ್ಫಿಗರೇಶನ್ ಲಿಂಕ್ ಅನ್ನು ರಚಿಸಲು ರೂಪಾಂತರವನ್ನು ಆಯ್ಕೆಮಾಡಿ", + "offline": "ಆಫ್ ಲೈನ್", + "ok": "ಸರಿ", + "onboarding": "ಆನ್ ಬೋರ್ಡಿಂಗ್", "onboarding_locale_description": "ನಿಮ್ಮ ಆದ್ಯತೆಯ ಭಾಷೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ. ನೀವು ಇದನ್ನು ನಂತರ ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು.", "onboarding_privacy_description": "ಕೆಳಗಿನ (ಐಚ್ಛಿಕ) ವೈಶಿಷ್ಟ್ಯಗಳು ಬಾಹ್ಯ ಸೇವೆಗಳನ್ನು ಅವಲಂಬಿಸಿವೆ ಮತ್ತು ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು.", + "onboarding_server_welcome_description": "ನಿಮ್ಮ ನಿದರ್ಶನವನ್ನು ಕೆಲವು ಸಾಮಾನ್ಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳೊಂದಿಗೆ ಹೊಂದಿಸೋಣ.", "onboarding_theme_description": "ನಿಮ್ಮ ನಿದರ್ಶನಕ್ಕೆ ಬಣ್ಣದ ಥೀಮ್ ಆಯ್ಕೆಮಾಡಿ. ನೀವು ಇದನ್ನು ನಂತರ ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು.", + "online": "ಆನ್ ಲೈನ್", "open_in_map_view": "ನಕ್ಷೆ ವೀಕ್ಷಣೆಯಲ್ಲಿ ತೆರೆಯಿರಿ", "open_the_search_filters": "ಹುಡುಕಾಟ ಫಿಲ್ಟರ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ", + "options": "ಆಯ್ಕೆಗಳು", + "or": "ಅಥವಾ", "organize_into_albums_description": "ಪ್ರಸ್ತುತ ಸಿಂಕ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಫೋಟೋಗಳನ್ನು ಆಲ್ಬಮ್‌ಗಳಲ್ಲಿ ಇರಿಸಿ", + "original": "ಮೂಲ", + "other": "ಇತರ", + "owned": "ಮಾಲೀಕತ್ವ", + "owner": "ಮಾಲೀಕ", + "partner": "ಪಾಲುದಾರ", "partner_can_access_assets": "ಆರ್ಕೈವ್ ಮಾಡಲಾದ ಮತ್ತು ಅಳಿಸಲಾದ ಫೋಟೋಗಳನ್ನು ಹೊರತುಪಡಿಸಿ ನಿಮ್ಮ ಎಲ್ಲಾ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳು", "partner_can_access_location": "ನಿಮ್ಮ ಫೋಟೋಗಳನ್ನು ತೆಗೆದ ಸ್ಥಳ", "partner_page_empty_message": "ನಿಮ್ಮ ಫೋಟೋಗಳನ್ನು ಇನ್ನೂ ಯಾವುದೇ ಪಾಲುದಾರರೊಂದಿಗೆ ಹಂಚಿಕೊಂಡಿಲ್ಲ.", "partner_page_no_more_users": "ಸೇರಿಸಲು ಇನ್ನು ಬಳಕೆದಾರರಿಲ್ಲ", + "partner_page_partner_add_failed": "ಪಾಲುದಾರರನ್ನು ಸೇರಿಸಲು ವಿಫಲವಾಗಿದೆ", + "partner_page_stop_sharing_content": "{partner} ಇನ್ನು ಮುಂದೆ ನಿಮ್ಮ ಫೋಟೋಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.", + "partners": "ಪಾಲುದಾರರು", + "password": "ಪಾಸ್ವರ್ಡ್", "password_does_not_match": "ಪಾಸ್‌ವರ್ಡ್ ಹೊಂದಿಕೆಯಾಗುತ್ತಿಲ್ಲ", + "path": "ಹಾದಿ", + "pattern": "ಪ್ಯಾಟರ್ನ್", + "pause": "ವಿರಾಮ", + "pending": "ಬಾಕಿ ಉಳಿದಿದೆ", + "people": "ಜನರು", "people_feature_description": "ಜನರಿಂದ ಗುಂಪು ಮಾಡಲಾದ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಬ್ರೌಸ್ ಮಾಡಲಾಗುತ್ತಿದೆ", "people_sidebar_description": "ಸೈಡ್‌ಬಾರ್‌ನಲ್ಲಿ ಜನರು ಎಂಬ ಲಿಂಕ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸಿ", "permanent_deletion_warning_setting_description": "ಸ್ವತ್ತುಗಳನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸುವಾಗ ಎಚ್ಚರಿಕೆಯನ್ನು ತೋರಿಸಿ", @@ -998,27 +1202,52 @@ "permission_onboarding_permission_granted": "ಅನುಮತಿ ನೀಡಲಾಗಿದೆ! ನೀವು ಸಿದ್ಧರಾಗಿದ್ದೀರಿ.", "permission_onboarding_permission_limited": "ಅನುಮತಿ ಸೀಮಿತವಾಗಿದೆ. ಇಮ್ಮಿಚ್ ನಿಮ್ಮ ಸಂಪೂರ್ಣ ಗ್ಯಾಲರಿ ಸಂಗ್ರಹವನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲು ಮತ್ತು ನಿರ್ವಹಿಸಲು, ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಫೋಟೋ ಮತ್ತು ವೀಡಿಯೊ ಅನುಮತಿಗಳನ್ನು ನೀಡಿ.", "permission_onboarding_request": "ನಿಮ್ಮ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಇಮ್ಮಿಚ್‌ಗೆ ಅನುಮತಿ ಬೇಕು.", + "person": "ವ್ಯಕ್ತಿ", "photo_shared_all_users": "ನೀವು ನಿಮ್ಮ ಫೋಟೋಗಳನ್ನು ಎಲ್ಲಾ ಬಳಕೆದಾರರೊಂದಿಗೆ ಹಂಚಿಕೊಂಡಿರುವಂತೆ ಕಾಣುತ್ತಿದೆ ಅಥವಾ ಹಂಚಿಕೊಳ್ಳಲು ನಿಮ್ಮ ಬಳಿ ಯಾವುದೇ ಬಳಕೆದಾರರಿಲ್ಲ.", + "photos": "ಫೋಟೋಗಳು", "photos_from_previous_years": "ಹಿಂದಿನ ವರ್ಷಗಳ ಫೋಟೋಗಳು", "pin_code_setup_successfully": "ಪಿನ್ ಕೋಡ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಹೊಂದಿಸಲಾಗಿದೆ", + "place": "ಸ್ಥಳ", + "places": "ಸ್ಥಳಗಳು", + "play": "ಪ್ಲೇ ಮಾಡಿ", "play_or_pause_video": "ವೀಡಿಯೊ ಪ್ಲೇ ಮಾಡಿ ಅಥವಾ ವಿರಾಮಗೊಳಿಸಿ", "play_original_video_setting_description": "ಟ್ರಾನ್ಸ್‌ಕೋಡ್ ಮಾಡಿದ ವೀಡಿಯೊಗಳಿಗಿಂತ ಮೂಲ ವೀಡಿಯೊಗಳ ಪ್ಲೇಬ್ಯಾಕ್‌ಗೆ ಆದ್ಯತೆ ನೀಡಿ. ಮೂಲ ಸ್ವತ್ತು ಹೊಂದಾಣಿಕೆಯಾಗದಿದ್ದರೆ ಅದು ಸರಿಯಾಗಿ ಪ್ಲೇಬ್ಯಾಕ್ ಆಗದಿರಬಹುದು.", + "port": "ಪೋರ್ಟ್", + "preferences_settings_subtitle": "ಅಪ್ಲಿಕೇಶನ್‌ನ ಆದ್ಯತೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ", + "preset": "ಮೊದಲೇ", + "preview": "ಪೂರ್ವವೀಕ್ಷಣೆ", + "previous": "ಹಿಂದಿನ", + "primary": "ಪ್ರಾಥಮಿಕ", + "privacy": "ಗೌಪ್ಯತೆ", "profile_drawer_client_server_up_to_date": "ಕ್ಲೈಂಟ್ ಮತ್ತು ಸರ್ವರ್ ನವೀಕೃತವಾಗಿವೆ", + "profile_drawer_readonly_mode": "ಓದಲು-ಮಾತ್ರ ಮೋಡ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ನಿರ್ಗಮಿಸಲು ಬಳಕೆದಾರರ ಅವತಾರ್ ಐಕಾನ್ ಅನ್ನು ದೀರ್ಘಕಾಲ ಒತ್ತಿರಿ.", "profile_image_of_user": "{user} ರ ಪ್ರೊಫೈಲ್ ಚಿತ್ರ", + "purchase_account_info": "ಬೆಂಬಲಿಗ", "purchase_activated_subtitle": "ಇಮ್ಮಿಚ್ ಮತ್ತು ಓಪನ್ ಸೋರ್ಸ್ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ಬೆಂಬಲಿಸಿದ್ದಕ್ಕಾಗಿ ಧನ್ಯವಾದಗಳು", "purchase_activated_title": "ನಿಮ್ಮ ಕೀಲಿಯನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ", + "purchase_button_buy": "ಖರೀದಿಸಿ", "purchase_button_reminder": "30 ದಿನಗಳಲ್ಲಿ ನನಗೆ ನೆನಪಿಸಿ", + "purchase_button_select": "ಆಯ್ಕೆಮಾಡಿ", "purchase_failed_activation": "ಸಕ್ರಿಯಗೊಳಿಸಲು ವಿಫಲವಾಗಿದೆ! ಸರಿಯಾದ ಉತ್ಪನ್ನ ಕೀಲಿಗಾಗಿ ದಯವಿಟ್ಟು ನಿಮ್ಮ ಇಮೇಲ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ!", + "purchase_individual_title": "ವೈಯಕ್ತಿಕ", "purchase_input_suggestion": "ಉತ್ಪನ್ನ ಕೀಲಿ ಇದೆಯೇ? ಕೆಳಗೆ ಕೀಲಿಯನ್ನು ನಮೂದಿಸಿ", + "purchase_license_subtitle": "ಸೇವೆಯ ನಿರಂತರ ಅಭಿವೃದ್ಧಿಯನ್ನು ಬೆಂಬಲಿಸಲು ಇಮ್ಮಿಚ್ ಅನ್ನು ಖರೀದಿಸಿ", "purchase_panel_info_1": "ಇಮ್ಮಿಚ್ ನಿರ್ಮಾಣವು ಸಾಕಷ್ಟು ಸಮಯ ಮತ್ತು ಶ್ರಮವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ, ಮತ್ತು ಅದನ್ನು ಸಾಧ್ಯವಾದಷ್ಟು ಉತ್ತಮಗೊಳಿಸಲು ನಾವು ಪೂರ್ಣ ಸಮಯದ ಎಂಜಿನಿಯರ್‌ಗಳನ್ನು ಹೊಂದಿದ್ದೇವೆ. ಓಪನ್-ಸೋರ್ಸ್ ಸಾಫ್ಟ್‌ವೇರ್ ಮತ್ತು ನೈತಿಕ ವ್ಯವಹಾರ ಅಭ್ಯಾಸಗಳು ಡೆವಲಪರ್‌ಗಳಿಗೆ ಸುಸ್ಥಿರ ಆದಾಯದ ಮೂಲವಾಗುವುದು ಮತ್ತು ಶೋಷಣೆಯ ಕ್ಲೌಡ್ ಸೇವೆಗಳಿಗೆ ನಿಜವಾದ ಪರ್ಯಾಯಗಳೊಂದಿಗೆ ಗೌಪ್ಯತೆಯನ್ನು ಗೌರವಿಸುವ ಪರಿಸರ ವ್ಯವಸ್ಥೆಯನ್ನು ರಚಿಸುವುದು ನಮ್ಮ ಧ್ಯೇಯವಾಗಿದೆ.", "purchase_panel_info_2": "ನಾವು ಪೇವಾಲ್‌ಗಳನ್ನು ಸೇರಿಸದಿರಲು ಬದ್ಧರಾಗಿರುವುದರಿಂದ, ಈ ಖರೀದಿಯು ಇಮ್ಮಿಚ್‌ನಲ್ಲಿ ನಿಮಗೆ ಯಾವುದೇ ಹೆಚ್ಚುವರಿ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ನೀಡುವುದಿಲ್ಲ. ಇಮ್ಮಿಚ್‌ನ ನಡೆಯುತ್ತಿರುವ ಅಭಿವೃದ್ಧಿಯನ್ನು ಬೆಂಬಲಿಸಲು ನಾವು ನಿಮ್ಮಂತಹ ಬಳಕೆದಾರರನ್ನು ಅವಲಂಬಿಸಿದ್ದೇವೆ.", + "purchase_remove_product_key_prompt": "ನೀವು ಉತ್ಪನ್ನ ಕೀಲಿಯನ್ನು ತೆಗೆದುಹಾಕಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", "purchase_remove_server_product_key": "ಸರ್ವರ್ ಉತ್ಪನ್ನ ಕೀಲಿಯನ್ನು ತೆಗೆದುಹಾಕಿ", "purchase_remove_server_product_key_prompt": "ನೀವು ಸರ್ವರ್ ಉತ್ಪನ್ನ ಕೀಲಿಯನ್ನು ತೆಗೆದುಹಾಕಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", "purchase_server_description_1": "ಇಡೀ ಸರ್ವರ್‌ಗೆ", + "purchase_server_title": "ಸರ್ವರ್", + "purchase_settings_server_activated": "ಸರ್ವರ್ ಉತ್ಪನ್ನ ಕೀಲಿಯನ್ನು ನಿರ್ವಾಹಕರು ನಿರ್ವಹಿಸುತ್ತಾರೆ", "rating_description": "ಮಾಹಿತಿ ಫಲಕದಲ್ಲಿ EXIF ರೇಟಿಂಗ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸಿ", + "reassign": "ಮರುಹಂಚುವಿಕೆ", "reassigned_assets_to_existing_person": "{count, plural, one {# ಆಸ್ತಿ} other {# ಆಸ್ತಿಗಳು}} ಅನ್ನು {name, select, null {ಒಂದು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ವ್ಯಕ್ತಿ} other {{name}}} ಗೆ ಮರು ನಿಯೋಜಿಸಲಾಗಿದೆ", "reassing_hint": "ಆಯ್ದ ಸ್ವತ್ತುಗಳನ್ನು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ವ್ಯಕ್ತಿಗೆ ನಿಯೋಜಿಸಿ", + "refresh": "ರಿಫ್ರೆಶ್", + "refreshed": "ರಿಫ್ರೆಶ್ ಮಾಡಲಾಗಿದೆ", "refreshes_every_file": "ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಮತ್ತು ಹೊಸ ಎಲ್ಲಾ ಫೈಲ್‌ಗಳನ್ನು ಪುನಃ ಓದುತ್ತದೆ", + "remove": "ತೆಗೆದುಹಾಕಿ", "remove_assets_album_confirmation": "ನೀವು ಆಲ್ಬಮ್‌ನಿಂದ {count, plural, one {# asset} other {# assets}} ಅನ್ನು ತೆಗೆದುಹಾಕಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", "remove_assets_shared_link_confirmation": "ಈ ಹಂಚಿಕೆಯ ಲಿಂಕ್‌ನಿಂದ {count, plural, one {# asset} other {# assets}} ಅನ್ನು ತೆಗೆದುಹಾಕಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", "remove_custom_date_range": "ಕಸ್ಟಮ್ ದಿನಾಂಕ ಶ್ರೇಣಿಯನ್ನು ತೆಗೆದುಹಾಕಿ", @@ -1029,20 +1258,35 @@ "remove_photo_from_memory": "ಈ ನೆನಪಿನಿಂದ ಫೋಟೋ ತೆಗೆದುಹಾಕಿ", "removed_api_key": "ತೆಗೆದುಹಾಕಲಾದ API ಕೀ: {name}", "removed_photo_from_memory": "ನೆನಪಿನಿಂದ ಫೋಟೋ ತೆಗೆದುಹಾಕಲಾಗಿದೆ", + "rename": "ಮರುಹೆಸರಿಸಿ", + "repair": "ದುರಸ್ತಿ", "repair_no_results_message": "ಟ್ರ್ಯಾಕ್ ಮಾಡದ ಮತ್ತು ಕಾಣೆಯಾದ ಫೈಲ್‌ಗಳು ಇಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ", + "repository": "ರೆಪೊಸಿಟರಿ", "require_user_to_change_password_on_first_login": "ಮೊದಲ ಲಾಗಿನ್‌ನಲ್ಲಿ ಬಳಕೆದಾರರು ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾಯಿಸಬೇಕಾಗುತ್ತದೆ", + "reset": "ಮರುಹೊಂದಿಸಿ", "reset_pin_code_description": "ನಿಮ್ಮ ಪಿನ್ ಕೋಡ್ ಅನ್ನು ನೀವು ಮರೆತಿದ್ದರೆ, ಅದನ್ನು ಮರುಹೊಂದಿಸಲು ನೀವು ಸರ್ವರ್ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಬಹುದು", + "reset_pin_code_with_password": "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ನೊಂದಿಗೆ ನೀವು ಯಾವಾಗಲೂ ನಿಮ್ಮ ಪಿನ್ ಕೋಡ್ ಅನ್ನು ಮರುಹೊಂದಿಸಬಹುದು", "reset_sqlite_confirmation": "ನೀವು ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಇದು ಎಲ್ಲಾ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡುತ್ತದೆ.", "reset_sqlite_confirmation_note": "ಗಮನಿಸಿ: ತೆರವುಗೊಳಿಸಿದ ನಂತರ ನೀವು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕಾಗುತ್ತದೆ.", + "reset_sqlite_done": "ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಲಾಗಿದೆ. ದಯವಿಟ್ಟು ಇಮ್ಮಿಚ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಮತ್ತೆ ಲಾಗಿನ್ ಮಾಡಿ.", "reset_sqlite_success": "SQLite ಡೇಟಾಬೇಸ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಮರುಹೊಂದಿಸಲಾಗಿದೆ", + "restore": "ಮರುಸ್ಥಾಪಿಸಿ", + "resume": "ಪುನರಾರಂಭ", + "role": "ಪಾತ್ರ", "scaffold_body_error_unrecoverable": "ಸರಿಪಡಿಸಲಾಗದ ದೋಷ ಸಂಭವಿಸಿದೆ. ದಯವಿಟ್ಟು ದೋಷವನ್ನು ಹಂಚಿಕೊಳ್ಳಿ ಮತ್ತು ಡಿಸ್ಕಾರ್ಡ್ ಅಥವಾ ಗಿಟ್‌ಹಬ್‌ನಲ್ಲಿ ಟ್ರೇಸ್ ಅನ್ನು ಸ್ಟ್ಯಾಕ್ ಮಾಡಿ ಇದರಿಂದ ನಾವು ಸಹಾಯ ಮಾಡಬಹುದು. ಸಲಹೆ ನೀಡಿದರೆ, ನೀವು ಕೆಳಗಿನ ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಬಹುದು.", "search_by_description_example": "ಸಾಪಾದಲ್ಲಿ ಪಾದಯಾತ್ರೆಯ ದಿನ", "search_by_filename": "ಫೈಲ್ ಹೆಸರು ಅಥವಾ ವಿಸ್ತರಣೆಯ ಮೂಲಕ ಹುಡುಕಿ", "search_by_filename_example": "ಅಂದರೆ IMG_1234.JPG ಅಥವಾ PNG", + "search_filter_date_title": "ದಿನಾಂಕ ಶ್ರೇಣಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ", + "search_filter_filename": "ಫೈಲ್ ಹೆಸರಿನ ಮೂಲಕ ಹುಡುಕಿ", "search_for_existing_person": "ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ವ್ಯಕ್ತಿಯನ್ನು ಹುಡುಕಿ", "search_no_people_named": "\"{name}\" ಹೆಸರಿನ ಯಾವುದೇ ಜನರಿಲ್ಲ", + "search_no_result": "ಯಾವುದೇ ಫಲಿತಾಂಶಗಳು ಕಂಡುಬಂದಿಲ್ಲ, ಬೇರೆ ಹುಡುಕಾಟ ಪದ ಅಥವಾ ಸಂಯೋಜನೆಯನ್ನು ಪ್ರಯತ್ನಿಸಿ", + "search_page_no_objects": "ಯಾವುದೇ ವಸ್ತುಗಳ ಮಾಹಿತಿ ಲಭ್ಯವಿಲ್ಲ", + "search_page_no_places": "ಯಾವುದೇ ಸ್ಥಳಗಳ ಮಾಹಿತಿ ಲಭ್ಯವಿಲ್ಲ", "search_page_search_photos_videos": "ನಿಮ್ಮ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಹುಡುಕಿ", "select_person_to_tag": "ಟ್ಯಾಗ್ ಮಾಡಲು ವ್ಯಕ್ತಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ", + "select_user_for_sharing_page_err_album": "ಆಲ್ಬಮ್ ರಚಿಸಲು ವಿಫಲವಾಗಿದೆ", "server_restarting_description": "ಈ ಪುಟವು ಕ್ಷಣಮಾತ್ರದಲ್ಲಿ ರಿಫ್ರೆಶ್ ಆಗುತ್ತದೆ.", "set_as_album_cover": "ಆಲ್ಬಮ್ ಕವರ್ ಆಗಿ ಹೊಂದಿಸಿ", "set_as_featured_photo": "ವೈಶಿಷ್ಟ್ಯಗೊಳಿಸಿದ ಫೋಟೋ ಎಂದು ಹೊಂದಿಸಿ", @@ -1053,66 +1297,278 @@ "setting_image_viewer_help": "ವಿವರ ವೀಕ್ಷಕವು ಮೊದಲು ಸಣ್ಣ ಥಂಬ್‌ನೇಲ್ ಅನ್ನು ಲೋಡ್ ಮಾಡುತ್ತದೆ, ನಂತರ ಮಧ್ಯಮ ಗಾತ್ರದ ಪೂರ್ವವೀಕ್ಷಣೆಯನ್ನು ಲೋಡ್ ಮಾಡುತ್ತದೆ (ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದರೆ), ಅಂತಿಮವಾಗಿ ಮೂಲವನ್ನು ಲೋಡ್ ಮಾಡುತ್ತದೆ (ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದರೆ).", "setting_image_viewer_original_subtitle": "ಮೂಲ ಪೂರ್ಣ-ರೆಸಲ್ಯೂಶನ್ ಚಿತ್ರವನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಕ್ರಿಯಗೊಳಿಸಿ (ದೊಡ್ಡದು!). ಡೇಟಾ ಬಳಕೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಲು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ (ನೆಟ್‌ವರ್ಕ್ ಮತ್ತು ಸಾಧನದ ಸಂಗ್ರಹ ಎರಡರಲ್ಲೂ).", "setting_image_viewer_preview_subtitle": "ಮಧ್ಯಮ ರೆಸಲ್ಯೂಶನ್ ಚಿತ್ರವನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಕ್ರಿಯಗೊಳಿಸಿ. ಮೂಲವನ್ನು ನೇರವಾಗಿ ಲೋಡ್ ಮಾಡಲು ಅಥವಾ ಥಂಬ್‌ನೇಲ್ ಅನ್ನು ಮಾತ್ರ ಬಳಸಲು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ.", + "setting_languages_subtitle": "ಅಪ್ಲಿಕೇಶನ್‌ನ ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಿ", "setting_notifications_notify_failures_grace_period": "ಹಿನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ವೈಫಲ್ಯಗಳನ್ನು ಸೂಚಿಸಿ: {duration}", "setting_notifications_single_progress_subtitle": "ಪ್ರತಿ ಸ್ವತ್ತಿನ ವಿವರವಾದ ಅಪ್‌ಲೋಡ್ ಪ್ರಗತಿ ಮಾಹಿತಿ", "setting_notifications_single_progress_title": "ಹಿನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ವಿವರ ಪ್ರಗತಿಯನ್ನು ತೋರಿಸಿ", + "setting_notifications_subtitle": "ನಿಮ್ಮ ಅಧಿಸೂಚನೆ ಆದ್ಯತೆಗಳನ್ನು ಹೊಂದಿಸಿ", "setting_notifications_total_progress_subtitle": "ಒಟ್ಟಾರೆ ಅಪ್‌ಲೋಡ್ ಪ್ರಗತಿ (ಮುಗಿದಿದೆ/ಒಟ್ಟು ಸ್ವತ್ತುಗಳು)", "setting_notifications_total_progress_title": "ಹಿನ್ನೆಲೆ ಬ್ಯಾಕಪ್ ಒಟ್ಟು ಪ್ರಗತಿಯನ್ನು ತೋರಿಸಿ", "setting_video_viewer_auto_play_subtitle": "ವೀಡಿಯೊಗಳು ತೆರೆದಾಗ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಪ್ಲೇ ಆಗಲು ಪ್ರಾರಂಭಿಸಿ", "setting_video_viewer_original_video_subtitle": "ಸರ್ವರ್‌ನಿಂದ ವೀಡಿಯೊವನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡುವಾಗ, ಟ್ರಾನ್ಸ್‌ಕೋಡ್ ಲಭ್ಯವಿದ್ದರೂ ಸಹ ಮೂಲವನ್ನು ಪ್ಲೇ ಮಾಡಿ. ಬಫರಿಂಗ್‌ಗೆ ಕಾರಣವಾಗಬಹುದು. ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಲೆಕ್ಕಿಸದೆ ಸ್ಥಳೀಯವಾಗಿ ಲಭ್ಯವಿರುವ ವೀಡಿಯೊಗಳನ್ನು ಮೂಲ ಗುಣಮಟ್ಟದಲ್ಲಿ ಪ್ಲೇ ಮಾಡಲಾಗುತ್ತದೆ.", "settings_require_restart": "ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಅನ್ವಯಿಸಲು ದಯವಿಟ್ಟು ಇಮ್ಮಿಚ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ", "shared_album_activity_remove_content": "ನೀವು ಈ ಚಟುವಟಿಕೆಯನ್ನು ಅಳಿಸಲು ಬಯಸುವಿರಾ?", + "shared_album_section_people_action_error": "ಆಲ್ಬಮ್ ತೊರೆಯುವಾಗ/ತೆಗೆದುಹಾಕುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ", + "shared_album_section_people_action_leave": "ಆಲ್ಬಮ್‌ನಿಂದ ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ", + "shared_album_section_people_action_remove_user": "ಆಲ್ಬಮ್‌ನಿಂದ ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ", + "shared_intent_upload_button_progress_text": "{current} / {total} ಅಪ್‌ಲೋಡ್ ಮಾಡಲಾಗಿದೆ", "shared_link_create_error": "ಹಂಚಿಕೊಂಡ ಲಿಂಕ್ ರಚಿಸುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ", "shared_link_custom_url_description": "ಕಸ್ಟಮ್ URL ನೊಂದಿಗೆ ಈ ಹಂಚಿಕೊಂಡ ಲಿಂಕ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ", + "shared_link_edit_description_hint": "ಹಂಚಿಕೆ ವಿವರಣೆಯನ್ನು ನಮೂದಿಸಿ", + "shared_link_edit_password_hint": "ಹಂಚಿಕೆ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ", "shared_link_error_server_url_fetch": "ಸರ್ವರ್ url ಅನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", + "shared_link_expires_day": "{count} ದಿನದಲ್ಲಿ ಮುಕ್ತಾಯಗೊಳ್ಳುತ್ತದೆ", + "shared_link_expires_days": "{count} ದಿನಗಳಲ್ಲಿ ಅವಧಿ ಮುಗಿಯುತ್ತದೆ", + "shared_link_expires_hour": "{count} ಗಂಟೆಯುಲ್ಲಿ ಅವಧಿ ಮುಗಿಯುತ್ತದೆ", + "shared_link_expires_hours": "{count} ಗಂಟೆಗಳಲ್ಲಿ ಅವಧಿ ಮುಗಿಯುತ್ತದೆ", + "shared_link_expires_minute": "{count} ನಿಮಿಷದಲ್ಲಿ ಅವಧಿ ಮುಗಿಯುತ್ತದೆ", + "shared_link_expires_minutes": "{count} ನಿಮಿಷಗಳಲ್ಲಿ ಅವಧಿ ಮುಗಿಯುತ್ತದೆ", + "shared_link_expires_second": "{count} ಸೆಕೆಂಡ್‌ನಲ್ಲಿ ಅವಧಿ ಮುಗಿಯುತ್ತದೆ", + "shared_link_expires_seconds": "{count} ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಅವಧಿ ಮುಗಿಯುತ್ತದೆ", "shared_link_password_description": "ಈ ಹಂಚಿಕೊಂಡ ಲಿಂಕ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಪಾಸ್‌ವರ್ಡ್ ಅಗತ್ಯವಿದೆ", "shared_links_description": "ಲಿಂಕ್ ಮೂಲಕ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ", "sharing_enter_password": "ಈ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಲು ದಯವಿಟ್ಟು ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ.", "sharing_page_description": "ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿರುವ ಜನರೊಂದಿಗೆ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಹಂಚಿದ ಆಲ್ಬಮ್‌ಗಳನ್ನು ರಚಿಸಿ.", "sharing_sidebar_description": "ಸೈಡ್‌ಬಾರ್‌ನಲ್ಲಿ ಹಂಚಿಕೆಗೆ ಲಿಂಕ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸಿ", "shift_to_permanent_delete": "ಆಸ್ತಿಯನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲು ⇧ ಒತ್ತಿರಿ", + "show_and_hide_people": "ಜನರನ್ನು ತೋರಿಸಿ ಮತ್ತು ಮರೆಮಾಡಿ", + "show_in_timeline_setting_description": "ಈ ಬಳಕೆದಾರರ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ನಿಮ್ಮ ಟೈಮ್‌ಲೈನ್‌ನಲ್ಲಿ ತೋರಿಸಿ", + "show_or_hide_info": "ಮಾಹಿತಿಯನ್ನು ತೋರಿಸಿ ಅಥವಾ ಮರೆಮಾಡಿ", + "show_supporter_badge_description": "ಬೆಂಬಲಿಗರ ಬ್ಯಾಡ್ಜ್ ತೋರಿಸಿ", + "sidebar_display_description": "ಸೈಡ್‌ಬಾರ್‌ನಲ್ಲಿ ವೀಕ್ಷಣೆಗೆ ಲಿಂಕ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸಿ", "slideshow_repeat_description": "ಸ್ಲೈಡ್‌ಶೋ ಕೊನೆಗೊಂಡಾಗ ಆರಂಭಕ್ಕೆ ಹಿಂತಿರುಗಿ", + "sort_created": "ದಿನಾಂಕ ರಚಿಸಲಾಗಿದೆ", + "sort_items": "ವಸ್ತುಗಳ ಸಂಖ್ಯೆ", + "sort_modified": "ದಿನಾಂಕ ಮಾರ್ಪಡಿಸಲಾಗಿದೆ", + "sort_newest": "ಹೊಸ ಫೋಟೋ", + "sort_oldest": "ಹಳೆಯ ಫೋಟೋ", + "sort_people_by_similarity": "ಹೋಲಿಕೆಯ ಆಧಾರದ ಮೇಲೆ ಜನರನ್ನು ವಿಂಗಡಿಸಿ", + "sort_recent": "ತೀರಾ ಇತ್ತೀಚಿನ ಫೋಟೋ", + "sort_title": "ಶೀರ್ಷಿಕೆ", + "stack": "ಸ್ಟಾಕ್", + "stack_duplicates": "ಸ್ಟಾಕ್ ನಕಲುಗಳು", "stack_select_one_photo": "ಸ್ಟ್ಯಾಕ್‌ಗಾಗಿ ಒಂದು ಮುಖ್ಯ ಫೋಟೋವನ್ನು ಆಯ್ಕೆಮಾಡಿ", + "stack_selected_photos": "ಆಯ್ದ ಫೋಟೋಗಳನ್ನು ಜೋಡಿಸಿ", + "stacktrace": "ಸ್ಟಾಕ್ಟ್ರೇಸ್", + "start": "ಪ್ರಾರಂಭ", + "start_date": "ಪ್ರಾರಂಭ ದಿನಾಂಕ", "start_date_before_end_date": "ಆರಂಭದ ದಿನಾಂಕವು ಅಂತಿಮ ದಿನಾಂಕಕ್ಕಿಂತ ಮೊದಲು ಇರಬೇಕು", + "state": "ರಾಜ್ಯ", + "status": "ಸ್ಥಿತಿ", + "stop_casting": "ಬಿತ್ತರಿಸುವಿಕೆಯನ್ನು ನಿಲ್ಲಿಸಿ", + "stop_motion_photo": "ಚಲನೆಯ ಫೋಟೋವನ್ನು ನಿಲ್ಲಿಸಿ", + "stop_photo_sharing": "ನಿಮ್ಮ ಫೋಟೋಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳುವುದನ್ನು ನಿಲ್ಲಿಸುವುದೇ?", + "stop_photo_sharing_description": "{partner} ಇನ್ನು ಮುಂದೆ ನಿಮ್ಮ ಫೋಟೋಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.", "stop_sharing_photos_with_user": "ಈ ಬಳಕೆದಾರರೊಂದಿಗೆ ನಿಮ್ಮ ಫೋಟೋಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳುವುದನ್ನು ನಿಲ್ಲಿಸಿ", + "storage": "ಶೇಖರಣಾ ಸ್ಥಳ", + "storage_label": "ಶೇಖರಣಾ ಲೇಬಲ್", + "storage_quota": "ಶೇಖರಣಾ ಕೋಟಾ", + "submit": "ಸಲ್ಲಿಸಿ", + "success": "ಯಶಸ್ಸು", + "suggestions": "ಸಲಹೆಗಳು", + "sunrise_on_the_beach": "ಕಡಲತೀರದಲ್ಲಿ ಸೂರ್ಯೋದಯ", + "support": "ಬೆಂಬಲ", + "support_and_feedback": "ಬೆಂಬಲ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ", "support_third_party_description": "ನಿಮ್ಮ ಇಮ್ಮಿಚ್ ಸ್ಥಾಪನೆಯನ್ನು ಮೂರನೇ ವ್ಯಕ್ತಿಯಿಂದ ಪ್ಯಾಕೇಜ್ ಮಾಡಲಾಗಿದೆ. ನೀವು ಅನುಭವಿಸುವ ಸಮಸ್ಯೆಗಳು ಆ ಪ್ಯಾಕೇಜ್‌ನಿಂದ ಉಂಟಾಗಿರಬಹುದು, ಆದ್ದರಿಂದ ದಯವಿಟ್ಟು ಕೆಳಗಿನ ಲಿಂಕ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಮೊದಲ ಸಂದರ್ಭದಲ್ಲಿ ಅವರೊಂದಿಗೆ ಸಮಸ್ಯೆಗಳನ್ನು ಎತ್ತಿಕೊಳ್ಳಿ.", + "supporter": "ಬೆಂಬಲಿಗ", + "swap_merge_direction": "ಸ್ವಾಪ್ ವಿಲೀನ ನಿರ್ದೇಶನ", + "sync": "ಸಿಂಕ್", + "sync_albums": "ಆಲ್ಬಮ್ ಗಳನ್ನು ಸಿಂಕ್ ಮಾಡಿ", "sync_albums_manual_subtitle": "ಅಪ್‌ಲೋಡ್ ಮಾಡಿದ ಎಲ್ಲಾ ವೀಡಿಯೊಗಳು ಮತ್ತು ಫೋಟೋಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿದ ಬ್ಯಾಕಪ್ ಆಲ್ಬಮ್‌ಗಳಿಗೆ ಸಿಂಕ್ ಮಾಡಿ", + "sync_local": "ಸ್ಥಳೀಯ ಸಿಂಕ್ ಮಾಡಿ", + "sync_remote": "ಸಿಂಕ್ ರಿಮೋಟ್", + "sync_status": "ಸಿಂಕ್ ಸ್ಥಿತಿ", "sync_status_subtitle": "ಸಿಂಕ್ ವ್ಯವಸ್ಥೆಯನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ನಿರ್ವಹಿಸಿ", "sync_upload_album_setting_subtitle": "ಇಮ್ಮಿಚ್‌ನಲ್ಲಿ ಆಯ್ದ ಆಲ್ಬಮ್‌ಗಳಿಗೆ ನಿಮ್ಮ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ರಚಿಸಿ ಮತ್ತು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ", + "tag": "ಟ್ಯಾಗ್ ಮಾಡಿ", + "tag_assets": "ಟ್ಯಾಗ್ ಸ್ವತ್ತುಗಳು", + "tag_feature_description": "ತಾರ್ಕಿಕ ಟ್ಯಾಗ್ ವಿಷಯಗಳ ಮೂಲಕ ಗುಂಪು ಮಾಡಲಾದ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಬ್ರೌಸ್ ಮಾಡುವುದು", "tag_not_found_question": "ಟ್ಯಾಗ್ ಸಿಗುತ್ತಿಲ್ಲವೇ? Create a new tag.", + "tag_people": "ಟ್ಯಾಗ್ ಜನರು", + "tags": "ಟ್ಯಾಗ್ಗಳು", + "tap_to_run_job": "ಕೆಲಸವನ್ನು ಚಲಾಯಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ", + "template": "ಟೆಂಪ್ಲೇಟು", + "text_recognition": "ಪಠ್ಯ ಗುರುತಿಸುವಿಕೆ", + "theme": "ಥೀಮ್", + "theme_selection": "ಥೀಮ್ ಆಯ್ಕೆ", "theme_selection_description": "ನಿಮ್ಮ ಬ್ರೌಸರ್‌ನ ಸಿಸ್ಟಂ ಆದ್ಯತೆಯ ಆಧಾರದ ಮೇಲೆ ಥೀಮ್ ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬೆಳಕು ಅಥವಾ ಗಾಢಕ್ಕೆ ಹೊಂದಿಸಿ", "theme_setting_asset_list_storage_indicator_title": "ಸ್ವತ್ತಿನ ಟೈಲ್‌ಗಳಲ್ಲಿ ಸಂಗ್ರಹಣಾ ಸೂಚಕವನ್ನು ತೋರಿಸಿ", "theme_setting_asset_list_tiles_per_row_title": "ಪ್ರತಿ ಸಾಲಿನಲ್ಲಿರುವ ಸ್ವತ್ತುಗಳ ಸಂಖ್ಯೆ ({count})", "theme_setting_colorful_interface_subtitle": "ಹಿನ್ನೆಲೆ ಮೇಲ್ಮೈಗಳಿಗೆ ಪ್ರಾಥಮಿಕ ಬಣ್ಣವನ್ನು ಅನ್ವಯಿಸಿ.", + "theme_setting_colorful_interface_title": "ವರ್ಣರಂಜಿತ ಇಂಟರ್ಫೇಸ್", "theme_setting_image_viewer_quality_subtitle": "ವಿವರ ಚಿತ್ರ ವೀಕ್ಷಕರ ಗುಣಮಟ್ಟವನ್ನು ಹೊಂದಿಸಿ", + "theme_setting_image_viewer_quality_title": "ಚಿತ್ರ ವೀಕ್ಷಕರ ಗುಣಮಟ್ಟ", "theme_setting_primary_color_subtitle": "ಪ್ರಾಥಮಿಕ ಕ್ರಿಯೆಗಳು ಮತ್ತು ಉಚ್ಚಾರಣೆಗಳಿಗೆ ಬಣ್ಣವನ್ನು ಆರಿಸಿ.", + "theme_setting_primary_color_title": "ಪ್ರಾಥಮಿಕ ಬಣ್ಣ", + "theme_setting_system_primary_color_title": "ಸಿಸ್ಟಮ್ ಬಣ್ಣವನ್ನು ಬಳಸಿ", + "theme_setting_system_theme_switch": "ಸ್ವಯಂಚಾಲಿತ (ಸಿಸ್ಟಂ ಸೆಟ್ಟಿಂಗ್ ಅನುಸರಿಸಿ)", "theme_setting_theme_subtitle": "ಆ್ಯಪ್‌ನ ಥೀಮ್ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಆರಿಸಿ", "theme_setting_three_stage_loading_subtitle": "ಮೂರು-ಹಂತದ ಲೋಡಿಂಗ್ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಹೆಚ್ಚಿಸಬಹುದು ಆದರೆ ಗಮನಾರ್ಹವಾಗಿ ಹೆಚ್ಚಿನ ನೆಟ್‌ವರ್ಕ್ ಲೋಡ್‌ಗೆ ಕಾರಣವಾಗುತ್ತದೆ", + "theme_setting_three_stage_loading_title": "ಮೂರು ಹಂತದ ಲೋಡಿಂಗ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ", + "then": "ನಂತರ", "they_will_be_merged_together": "ಅವುಗಳನ್ನು ಒಟ್ಟಿಗೆ ವಿಲೀನಗೊಳಿಸಲಾಗುತ್ತದೆ", + "third_party_resources": "ಮೂರನೇ ಭಾಗದ ಸಂಪನ್ಮೂಲಗಳು", + "time": "ಸಮಯ", + "time_based_memories": "ಸಮಯ ಆಧಾರಿತ ನೆನಪುಗಳು", "time_based_memories_duration": "ಪ್ರತಿ ಚಿತ್ರವನ್ನು ಪ್ರದರ್ಶಿಸಲು ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆ.", + "timeline": "ಟೈಮ್ ಲೈನ್", + "timezone": "ಸಮಯವಲಯ", + "to_archive": "ಆರ್ಕೈವ್", + "to_change_password": "ಪಾಸ್ವರ್ಡ್ ಬದಲಾಯಿಸಿ", + "to_favorite": "ನೆಚ್ಚಿನ", + "to_login": "ಲಾಗಿನ್", + "to_multi_select": "ಬಹು ಆಯ್ಕೆಗೆ", + "to_parent": "ಪೋಷಕರ ಬಳಿಗೆ ಹೋಗಿ", + "to_select": "ಆಯ್ಕೆ ಮಾಡಲು", + "to_trash": "ಅನುಪಯುಕ್ತ", + "toggle_settings": "ಸೆಟ್ಟಿಂಗ್ ಗಳನ್ನು ಟಾಗಲ್ ಮಾಡಿ", + "toggle_theme_description": "ಥೀಮ್ ಅನ್ನು ಟಾಗಲ್ ಮಾಡಿ", + "total": "ಒಟ್ಟು", + "total_usage": "ಒಟ್ಟು ಬಳಕೆ", + "trash": "ಅನುಪಯುಕ್ತ", + "trash_all": "ಎಲ್ಲಾ ಅನುಪಯುಕ್ತ", + "trash_delete_asset": "ಅನುಪಯುಕ್ತ / ಅಳಿಸು ಆಸ್ತಿ", + "trash_emptied": "ಖಾಲಿ ಕಸ", "trash_no_results_message": "ಅನುಪಯುಕ್ತಕ್ಕೆ ವರ್ಗಾಯಿಸಲಾದ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳು ಇಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ.", + "trash_page_delete_all": "ಎಲ್ಲವನ್ನೂ ಅಳಿಸಿ", "trash_page_empty_trash_dialog_content": "ನಿಮ್ಮ ಅನುಪಯುಕ್ತ ಸ್ವತ್ತುಗಳನ್ನು ಖಾಲಿ ಮಾಡಲು ನೀವು ಬಯಸುವಿರಾ? ಈ ಐಟಂಗಳನ್ನು ಇಮ್ಮಿಚ್‌ನಿಂದ ಶಾಶ್ವತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ", "trash_page_info": "ಅನುಪಯುಕ್ತಕ್ಕೆ ಸೇರಿಸಿದ ಐಟಂಗಳನ್ನು {days} ದಿನಗಳ ನಂತರ ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ", + "trash_page_no_assets": "ಕಸದ ಆಸ್ತಿ ಇಲ್ಲ", + "trash_page_restore_all": "ಎಲ್ಲವನ್ನು ಮರುಸ್ಥಾಪಿಸಿ", + "trash_page_select_assets_btn": "ಸ್ವತ್ತುಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ", + "trigger": "ಟ್ರಿಗ್ಗರ್", + "trigger_asset_uploaded": "ಆಸ್ತಿ ಅಪ್ ಲೋಡ್ ಮಾಡಲಾಗಿದೆ", "trigger_asset_uploaded_description": "ಹೊಸ ಸ್ವತ್ತನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿದಾಗ ಟ್ರಿಗರ್ ಮಾಡಲಾಗುತ್ತದೆ", "trigger_description": "ಕೆಲಸದ ಹರಿವನ್ನು ಪ್ರಾರಂಭಿಸುವ ಒಂದು ಘಟನೆ", + "trigger_person_recognized": "ವ್ಯಕ್ತಿ ಗುರುತಿಸಲಾಗಿದೆ", "trigger_person_recognized_description": "ಒಬ್ಬ ವ್ಯಕ್ತಿಯನ್ನು ಪತ್ತೆಹಚ್ಚಿದಾಗ ಪ್ರಚೋದಿಸಲಾಗುತ್ತದೆ", + "trigger_type": "ಟ್ರಿಗ್ಗರ್ ಪ್ರಕಾರ", + "troubleshoot": "ತೊಂದರೆ", + "type": "ಟೈಪ್ ಮಾಡಿ", "unable_to_change_pin_code": "ಪಿನ್ ಕೋಡ್ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "unable_to_check_version": "ಅಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಸರ್ವರ್ ಆವೃತ್ತಿಯನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "unable_to_setup_pin_code": "ಪಿನ್ ಕೋಡ್ ಸೆಟಪ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", + "unarchive": "ಅರಾಜಕತಾವಾದಿ", + "unfavorite": "ಅಹಿತಕರ", + "unhide_person": "ಸಹಾಯಕ ವ್ಯಕ್ತಿ", + "unknown": "ಅಜ್ಞಾತ", + "unknown_country": "ಅಜ್ಞಾತ ದೇಶ", + "unknown_date": "ಅಜ್ಞಾತ ದಿನಾಂಕ", + "unknown_year": "ಅಜ್ಞಾತ ವರ್ಷ", + "unlimited": "ಅನಿಯಮಿತ", + "unlink_motion_video": "ಚಲನೆಯ ವೀಡಿಯೊವನ್ನು ಅನ್ಲಿಂಕ್ ಮಾಡಿ", + "unmute_memories": "ಅನುಚಿತ ನೆನಪುಗಳು", + "unnamed_album": "ಹೆಸರಿಸದ ಆಲ್ಬಮ್", + "unnamed_album_delete_confirmation": "ನೀವು ಈ ಆಲ್ಬಮ್ ಅನ್ನು ಅಳಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", + "unnamed_share": "ಹೆಸರಿಸದ ಪಾಲು", + "unsaved_change": "ಉಳಿಸದ ಬದಲಾವಣೆ", + "unselect_all": "ಎಲ್ಲವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ", + "unselect_all_duplicates": "ಎಲ್ಲಾ ನಕಲುಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಬೇಡಿ", + "unstack": "ಅನ್-ಸ್ಟಾಕ್", + "unsupported_field_type": "ಬೆಂಬಲಿಸದ ಕ್ಷೇತ್ರ ಪ್ರಕಾರ", "unsupported_file_type": "{file} ಫೈಲ್ ಪ್ರಕಾರವು ಬೆಂಬಲಿತವಾಗಿಲ್ಲದ {type} ಕಾರಣ ಅದನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ.", + "untagged": "ಅನ್ಟಾಗ್ಡ್", + "untitled_workflow": "ಶೀರ್ಷಿಕೆರಹಿತ ಕೆಲಸದ ಹರಿವು", + "up_next": "ಮುಂದಿನ ಅಪ್", "update_location_action_prompt": "{count} ಆಯ್ಕೆಮಾಡಿದ ಸ್ವತ್ತುಗಳ ಸ್ಥಳವನ್ನು ಇದರೊಂದಿಗೆ ನವೀಕರಿಸಿ:", + "updated_at": "ನವೀಕರಿಸಲಾಗಿದೆ", + "updated_password": "ಪಾಸ್ವರ್ಡ್ ನವೀಕರಿಸಲಾಗಿದೆ", + "upload": "ಅಪ್ ಲೋಡ್ ಮಾಡಿ", + "upload_concurrency": "ಅಪ್ ಲೋಡ್ ಕನ್ಕ್ಯುರೆನ್ಸಿ", + "upload_details": "ಅಪ್ ಲೋಡ್ ವಿವರಗಳು", "upload_dialog_info": "ಆಯ್ಕೆಮಾಡಿದ ಸ್ವತ್ತು(ಗಳನ್ನು) ಸರ್ವರ್‌ಗೆ ಬ್ಯಾಕಪ್ ಮಾಡಲು ನೀವು ಬಯಸುವಿರಾ?", + "upload_dialog_title": "ಅಪ್ಲೋಡ್ ಆಸ್ತಿ", "upload_errors": "{count, plural, one {# ದೋಷ} other {# ದೋಷಗಳು}} ನೊಂದಿಗೆ ಅಪ್‌ಲೋಡ್ ಪೂರ್ಣಗೊಂಡಿದೆ, ಹೊಸ ಅಪ್‌ಲೋಡ್ ಸ್ವತ್ತುಗಳನ್ನು ನೋಡಲು ಪುಟವನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ.", + "upload_finished": "ಅಪ್ಲೋಡ್ ಮುಗಿದಿದೆ", + "upload_status_duplicates": "ನಕಲು", + "upload_status_errors": "ದೋಷಗಳು", + "upload_status_uploaded": "ಅಪ್ ಲೋಡ್ ಮಾಡಲಾಗಿದೆ", + "upload_success": "ಅಪ್‌ಲೋಡ್ ಯಶಸ್ವಿಯಾಗಿದೆ, ಹೊಸ ಅಪ್‌ಲೋಡ್ ಸ್ವತ್ತುಗಳನ್ನು ನೋಡಲು ಪುಟವನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ.", + "upload_to_immich": "ಇಮ್ಮಿಚ್ ({count}) ಗೆ ಅಪ್‌ಲೋಡ್ ಮಾಡಿ", + "uploading": "ಅಪ್ ಲೋಡ್ ಆಗುತ್ತಿದೆ", + "uploading_media": "ಮಾಧ್ಯಮವನ್ನು ಅಪ್ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ", + "usage": "ಬಳಕೆ", + "use_biometric": "ಬಯೋಮೆಟ್ರಿಕ್ ಬಳಸಿ", + "use_browser_locale": "ಬ್ರೌಸರ್ ಲೊಕೇಲ್ ಬಳಸಿ", + "use_browser_locale_description": "ನಿಮ್ಮ ಬ್ರೌಸರ್ ಸ್ಥಳವನ್ನು ಆಧರಿಸಿ ದಿನಾಂಕಗಳು, ಸಮಯಗಳು ಮತ್ತು ಸಂಖ್ಯೆಗಳನ್ನು ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಿ", + "use_current_connection": "ಪ್ರಸ್ತುತ ಸಂಪರ್ಕವನ್ನು ಬಳಸಿ", "use_custom_date_range": "ಬದಲಿಗೆ ಕಸ್ಟಮ್ ದಿನಾಂಕ ಶ್ರೇಣಿಯನ್ನು ಬಳಸಿ", + "user": "ಬಳಕೆದಾರ", "user_has_been_deleted": "ಈ ಬಳಕೆದಾರರನ್ನು ಅಳಿಸಲಾಗಿದೆ.", + "user_id": "ಬಳಕೆದಾರ ID", + "user_pin_code_settings": "ಪಿನ್ ಕೋಡ್", + "user_pin_code_settings_description": "ನಿಮ್ಮ ಪಿನ್ ಕೋಡ್ ಅನ್ನು ನಿರ್ವಹಿಸಿ", + "user_privacy": "ಬಳಕೆದಾರರ ಗೌಪ್ಯತೆ", + "user_purchase_settings": "ಖರೀದಿ", + "user_purchase_settings_description": "ನಿಮ್ಮ ಖರೀದಿಯನ್ನು ನಿರ್ವಹಿಸಿ", + "user_usage_detail": "ಬಳಕೆದಾರರ ಬಳಕೆಯ ವಿವರ", + "user_usage_stats": "ಖಾತೆ ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳು", + "user_usage_stats_description": "ಖಾತೆ ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳನ್ನು ವೀಕ್ಷಿಸಿ", + "username": "ಬಳಕೆದಾರಹೆಸರು", + "users": "ಬಳಕೆದಾರರು", + "utilities": "ಉಪಯುಕ್ತತೆಗಳು", + "validate": "ಮೌಲ್ಯೀಕರಿಸಿ", "validate_endpoint_error": "ದಯವಿಟ್ಟು ಮಾನ್ಯವಾದ URL ಅನ್ನು ನಮೂದಿಸಿ", + "validation_error": "ಕ್ರಮಬದ್ಧ ದೋಷ", + "variables": "ಅಸ್ಥಿರಗಳು", + "version": "ಆವೃತ್ತಿ", + "version_announcement_closing": "ನಿಮ್ಮ ಸ್ನೇಹಿತ, ಅಲೆಕ್ಸ್", "version_announcement_message": "ನಮಸ್ಕಾರ! ಇಮ್ಮಿಚ್‌ನ ಹೊಸ ಆವೃತ್ತಿ ಲಭ್ಯವಿದೆ. ಯಾವುದೇ ತಪ್ಪು ಸಂರಚನೆಗಳನ್ನು ತಡೆಗಟ್ಟಲು ನಿಮ್ಮ ಸೆಟಪ್ ನವೀಕೃತವಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು, ವಿಶೇಷವಾಗಿ ನೀವು ವಾಚ್‌ಟವರ್ ಅಥವಾ ನಿಮ್ಮ ಇಮ್ಮಿಚ್ ನಿದರ್ಶನವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನವೀಕರಿಸುವುದನ್ನು ನಿರ್ವಹಿಸುವ ಯಾವುದೇ ಕಾರ್ಯವಿಧಾನವನ್ನು ಬಳಸುತ್ತಿದ್ದರೆ, ದಯವಿಟ್ಟು release notes ಓದಲು ಸ್ವಲ್ಪ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಿ.", + "version_history": "ಆವೃತ್ತಿ ಇತಿಹಾಸ", + "version_history_item": "{date} ರಂದು {version} ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿದೆ", + "video": "ವೀಡಿಯೊ", "video_hover_setting": "ಹೋವರ್‌ನಲ್ಲಿ ವೀಡಿಯೊ ಥಂಬ್‌ನೇಲ್ ಪ್ಲೇ ಮಾಡಿ", "video_hover_setting_description": "ಮೌಸ್ ಐಟಂ ಮೇಲೆ ಸುಳಿದಾಡುತ್ತಿರುವಾಗ ವೀಡಿಯೊ ಥಂಬ್‌ನೇಲ್ ಪ್ಲೇ ಮಾಡಿ. ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದರೂ ಸಹ, ಪ್ಲೇ ಐಕಾನ್ ಮೇಲೆ ಸುಳಿದಾಡುವ ಮೂಲಕ ಪ್ಲೇಬ್ಯಾಕ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಬಹುದು.", + "videos": "ವೀಡಿಯೊಗಳು", + "videos_only": "ವೀಡಿಯೊಗಳು ಮಾತ್ರ", + "view": "ವೀಕ್ಷಿಸಿ", + "view_album": "ಆಲ್ಬಮ್ ವೀಕ್ಷಿಸಿ", + "view_all": "ಎಲ್ಲವನ್ನೂ ವೀಕ್ಷಿಸಿ", + "view_all_users": "ಎಲ್ಲಾ ಬಳಕೆದಾರರನ್ನು ವೀಕ್ಷಿಸಿ", + "view_asset_owners": "ಆಸ್ತಿ ಮಾಲೀಕರನ್ನು ವೀಕ್ಷಿಸಿ", + "view_details": "ವಿವರಗಳನ್ನು ವೀಕ್ಷಿಸಿ", + "view_in_timeline": "ಟೈಮ್ ಲೈನ್ ನಲ್ಲಿ ವೀಕ್ಷಿಸಿ", + "view_link": "ಲಿಂಕ್ ವೀಕ್ಷಿಸಿ", + "view_links": "ಲಿಂಕ್ ಗಳನ್ನು ವೀಕ್ಷಿಸಿ", + "view_name": "ವೀಕ್ಷಿಸಿ", + "view_next_asset": "ಮುಂದಿನ ಆಸ್ತಿಯನ್ನು ವೀಕ್ಷಿಸಿ", + "view_previous_asset": "ಹಿಂದಿನ ಆಸ್ತಿಯನ್ನು ವೀಕ್ಷಿಸಿ", + "view_qr_code": "ಕ್ಯೂಆರ್ ಕೋಡ್ ವೀಕ್ಷಿಸಿ", + "view_similar_photos": "ಇದೇ ರೀತಿಯ ಫೋಟೋಗಳನ್ನು ವೀಕ್ಷಿಸಿ", + "view_stack": "ಸ್ಟಾಕ್ ವೀಕ್ಷಿಸಿ", + "view_user": "ಬಳಕೆದಾರರನ್ನು ವೀಕ್ಷಿಸಿ", + "viewer_remove_from_stack": "ಸ್ಟಾಕ್ನಿಂದ ತೆಗೆದುಹಾಕಿ", + "viewer_stack_use_as_main_asset": "ಮುಖ್ಯ ಆಸ್ತಿಯಾಗಿ ಬಳಸಿ", + "viewer_unstack": "ಅನ್-ಸ್ಟಾಕ್", + "visibility": "ಗೋಚರತೆ", + "visual": "ವಿಷುಯಲ್", + "visual_builder": "ವಿಷುಯಲ್ ಬಿಲ್ಡರ್", + "waiting": "ಕಾಯಲಾಗುತ್ತಿದೆ", + "warning": "ಎಚ್ಚರಿಕೆ", + "week": "ವಾರ", + "welcome": "ಸ್ವಾಗತ", + "welcome_to_immich": "ಸ್ವಾಗತ ಇಮ್ಮಿಚ್", + "width": "ಅಗಲ", + "wifi_name": "ವೈ-ಫೈ ಹೆಸರು", "workflow_delete_prompt": "ಈ ವರ್ಕ್‌ಫ್ಲೋ ಅನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", + "workflow_deleted": "ಕೆಲಸದ ಹರಿವು ಅಳಿಸಲಾಗಿದೆ", + "workflow_description": "ಕೆಲಸದ ಹರಿವಿನ ವಿವರಣೆ", + "workflow_info": "ಕೆಲಸದ ಹರಿವಿನ ಮಾಹಿತಿ", + "workflow_json": "ಕೆಲಸದ ಹರಿವು JSON", "workflow_json_help": "JSON ಸ್ವರೂಪದಲ್ಲಿ ಕೆಲಸದ ಹರಿವಿನ ಸಂರಚನೆಯನ್ನು ಸಂಪಾದಿಸಿ. ಬದಲಾವಣೆಗಳು ದೃಶ್ಯ ಬಿಲ್ಡರ್‌ಗೆ ಸಿಂಕ್ ಆಗುತ್ತವೆ.", + "workflow_name": "ಕೆಲಸದ ಹರಿವಿನ ಹೆಸರು", "workflow_navigation_prompt": "ನಿಮ್ಮ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸದೆಯೇ ನೀವು ಹೊರಡಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", + "workflow_summary": "ಕೆಲಸದ ಹರಿವಿನ ಸಾರಾಂಶ", + "workflow_update_success": "ಕೆಲಸದ ಹರಿವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ನವೀಕರಿಸಲಾಗಿದೆ", + "workflow_updated": "ಕೆಲಸದ ಹರಿವನ್ನು ನವೀಕರಿಸಲಾಗಿದೆ", + "workflows": "ಕೆಲಸದ ಹರಿವುಗಳು", "workflows_help_text": "ಟ್ರಿಗ್ಗರ್‌ಗಳು ಮತ್ತು ಫಿಲ್ಟರ್‌ಗಳ ಆಧಾರದ ಮೇಲೆ ನಿಮ್ಮ ಸ್ವತ್ತುಗಳ ಮೇಲಿನ ಕ್ರಿಯೆಗಳನ್ನು ಕೆಲಸದ ಹರಿವುಗಳು ಸ್ವಯಂಚಾಲಿತಗೊಳಿಸುತ್ತವೆ", + "wrong_pin_code": "ತಪ್ಪಾದ ಪಿನ್ ಕೋಡ್", + "year": "ವರ್ಷ", + "yes": "ಹೌದು", "you_dont_have_any_shared_links": "ನೀವು ಯಾವುದೇ ಹಂಚಿಕೊಂಡ ಲಿಂಕ್‌ಗಳನ್ನು ಹೊಂದಿಲ್ಲ", - "zero_to_clear_rating": "ಆಸ್ತಿ ರೇಟಿಂಗ್ ಅನ್ನು ತೆರವುಗೊಳಿಸಲು 0 ಒತ್ತಿರಿ" + "your_wifi_name": "ನಿಮ್ಮ ವೈ-ಫೈ ಹೆಸರು", + "zero_to_clear_rating": "ಆಸ್ತಿ ರೇಟಿಂಗ್ ಅನ್ನು ತೆರವುಗೊಳಿಸಲು 0 ಒತ್ತಿರಿ", + "zoom_image": "ಜೂಮ್ ಇಮೇಜ್", + "zoom_to_bounds": "ಮಡಿಕಲು" } diff --git a/i18n/ko.json b/i18n/ko.json index e17b3a4693..5e167c7bf3 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -891,10 +891,6 @@ "day": "일", "days": "일", "deduplicate_all": "모두 삭제", - "deduplication_criteria_1": "이미지 크기 (바이트)", - "deduplication_criteria_2": "EXIF 정보 항목 수", - "deduplication_info": "비슷한 항목 정보", - "deduplication_info_description": "항목을 자동으로 미리 선택하고, 비슷한 항목을 구분할 때 다음 정보를 참고합니다:", "delete": "삭제", "delete_action_confirmation_message": "이 항목을 삭제하시겠습니까? 서버에서는 항목을 휴지통으로 이동시키며, 로컬에서도 삭제할 것인지 확인 메시지가 표시됩니다.", "delete_action_prompt": "{count}개 항목 삭제됨", diff --git a/i18n/lt.json b/i18n/lt.json index 1e652d14ac..5c232f8a04 100644 --- a/i18n/lt.json +++ b/i18n/lt.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Užfiksuota", "crop_aspect_ratio_free": "Nefiksuota", "crop_aspect_ratio_original": "Originalus", + "crop_aspect_ratio_square": "Kvadratas", "curated_object_page_title": "Daiktai", "current_device": "Dabartinis įrenginys", "current_pin_code": "Dabartinis PIN kodas", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, MMM dd", "daily_title_text_date_year": "E, MMM dd, yyyy", "dark": "Tamsi", - "dark_theme": "Perjungti tamsią temą", + "dark_theme": "Perjungti į tamsią temą", "date": "Data", "date_after": "Data po", "date_and_time": "Data ir laikas", @@ -891,10 +892,8 @@ "day": "Diena", "days": "Dienų", "deduplicate_all": "Šalinti visus dublikatus", - "deduplication_criteria_1": "Failo dydis baitais", - "deduplication_criteria_2": "EXIF metaduomenų įrašų skaičius", - "deduplication_info": "Dublikatų šalinimo informacija", - "deduplication_info_description": "Automatinis elementų parinkimas ir masinis dublikatų šalinimas atliekamas atsižvelgiant į:", + "default_locale": "Numatytoji Vietovė", + "default_locale_description": "Formatuoti datas ir skaičius pagal savo naršyklės lokalę", "delete": "Ištrinti", "delete_action_confirmation_message": "Ar tikrai norite ištrinti šį elementą? Šis veiksmas perkels elementą į serverio šiukšliadėžę ir paklaus ar norite ištrinti vietiniame įrenginyje", "delete_action_prompt": "{count} ištrinta", @@ -970,7 +969,7 @@ "downloading_media": "Atsisiunčiama medija", "drop_files_to_upload": "Užkelkite failus bet kurioje vietoje kad įkeltumėte", "duplicates": "Dublikatai", - "duplicates_description": "Sutvarkykite kiekvieną elementų grupę nurodydami elementus, kurie yra dublikatai (jei tokių yra)", + "duplicates_description": "Tvarkyti kiekvieną elementų grupę nurodant elementus, kurie yra dublikatai (jei tokių yra).", "duration": "Trukmė", "edit": "Redaguoti", "edit_album": "Redaguoti albumą", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Albumo pavadinimas", "licenses": "Licencijos", "light": "Šviesi", + "light_theme": "Perjungti į šviesią temą", "like": "Kaip", "like_deleted": "Kaip ištrintas", "link_motion_video": "Susieti judesio vaizdo įrašą", + "link_to_docs": "Daugiau informacijos rasite dokumentacijoje.", "link_to_oauth": "Susieti su OAuth", "linked_oauth_account": "Susieta OAuth paskyra", "list": "Sąrašas", @@ -1651,7 +1652,8 @@ "only_favorites": "Tik mėgstamiausi", "open": "Atverti", "open_calendar": "Atidaryti kalendorių", - "open_in_map_view": "Atverti žemėlapio peržiūroje", + "open_in_browser": "Atverti naršyklėje", + "open_in_map_view": "Atverti žemėlapyje", "open_in_openstreetmap": "Atverti per OpenStreetMap", "open_the_search_filters": "Atidaryti paieškos filtrus", "options": "Pasirinktys", @@ -2393,6 +2395,7 @@ "viewer_remove_from_stack": "Pašalinti iš Grupės", "viewer_stack_use_as_main_asset": "Naudoti, kaip pagrindinį elementą", "viewer_unstack": "Išgrupuoti", + "visibility": "Matomumas", "visibility_changed": "Matomumas pasikeitė {count, plural, one {# asmeniui} few {# asmenims} other {# asmenų}}", "visual": "Išdėstymas", "visual_builder": "Išdėstymo koreguotojas", diff --git a/i18n/lv.json b/i18n/lv.json index f9e37722e3..8ad03da2b8 100644 --- a/i18n/lv.json +++ b/i18n/lv.json @@ -746,10 +746,6 @@ "day": "Diena", "days": "Dienas", "deduplicate_all": "Dedublicēt visus", - "deduplication_criteria_1": "Attēla izmēru baitos", - "deduplication_criteria_2": "EXIF datu skaitu", - "deduplication_info": "Deduplicēšanas informācija", - "deduplication_info_description": "Lai automātiski atzīmētu failus un masveidā noņemtu dublikātus, mēs skatāmies uz:", "delete": "Dzēst", "delete_album": "Dzēst albumu", "delete_dialog_alert": "Šie vienumi tiks neatgriezeniski dzēsti no Immich un jūsu ierīces", diff --git a/i18n/ml.json b/i18n/ml.json index 2a4d54b4af..5b8a4ab7c4 100644 --- a/i18n/ml.json +++ b/i18n/ml.json @@ -822,10 +822,6 @@ "day": "ദിവസം", "days": "ദിവസങ്ങൾ", "deduplicate_all": "എല്ലാ ഡ്യൂപ്ലിക്കേറ്റുകളും ഒഴിവാക്കുക", - "deduplication_criteria_1": "ചിത്രത്തിന്റെ വലുപ്പം (ബൈറ്റുകളിൽ)", - "deduplication_criteria_2": "EXIF ഡാറ്റയുടെ എണ്ണം", - "deduplication_info": "ഡ്യൂപ്ലിക്കേഷൻ ഒഴിവാക്കൽ വിവരം", - "deduplication_info_description": "അസറ്റുകൾ യാന്ത്രികമായി മുൻകൂട്ടി തിരഞ്ഞെടുക്കുന്നതിനും ഡ്യൂപ്ലിക്കേറ്റുകൾ ബൾക്കായി നീക്കം ചെയ്യുന്നതിനും, ഞങ്ങൾ ഇവ പരിഗണിക്കുന്നു:", "delete": "ഇല്ലാതാക്കുക", "delete_action_confirmation_message": "ഈ അസറ്റ് ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ഈ പ്രവർത്തനം അസറ്റിനെ സെർവറിന്റെ ട്രാഷിലേക്ക് മാറ്റും, കൂടാതെ ഇത് പ്രാദേശികമായി ഇല്ലാതാക്കണോ എന്ന് ചോദിക്കുകയും ചെയ്യും", "delete_action_prompt": "{count} എണ്ണം ഇല്ലാതാക്കി", diff --git a/i18n/mr.json b/i18n/mr.json index 1a6fa4adc9..8b6244b94e 100644 --- a/i18n/mr.json +++ b/i18n/mr.json @@ -810,10 +810,6 @@ "day": "दिवस", "days": "अनेक दिवस", "deduplicate_all": "सर्व डुप्लिकेट काढा", - "deduplication_criteria_1": "प्रतिमेचा आकार (बाइट्स)", - "deduplication_criteria_2": "EXIF डेटा प्रमाण", - "deduplication_info": "डुप्लिकेट निवारण माहिती", - "deduplication_info_description": "डुप्लिकेट स्वयंचलितपणे निवडून काढण्यासाठी खालील निकष वापरले जातात:", "delete": "हटवा", "delete_action_confirmation_message": "तुम्हाला ही फाईल हटवायची आहे का? ही क्रिया सर्व्हरच्या ट्रॅशमध्ये हलवेल आणि स्थानिकपणे हटवायचे का ते विचारेल", "delete_action_prompt": "{count} हटवले", diff --git a/i18n/ms.json b/i18n/ms.json index 705919bff8..5459b78450 100644 --- a/i18n/ms.json +++ b/i18n/ms.json @@ -5,6 +5,7 @@ "acknowledge": "Akui", "action": "Tindakan", "action_common_update": "Kemaskini", + "action_description": "Satu set tindakan untuk dilakukan atas aset yang ditapis", "actions": "Tindakan", "active": "Aktif", "active_count": "Aktif: {count}", @@ -16,6 +17,7 @@ "add_a_name": "Tambah nama", "add_a_title": "Tambah tajuk", "add_action": "Tambah Tindakan", + "add_assets": "Tambah aset", "add_birthday": "Tambah hari jadi", "add_endpoint": "Tambah titik akhir", "add_exclusion_pattern": "Tambahkan corak pengecualian", @@ -433,10 +435,6 @@ "album_user_left": "Kiri {album}", "album_user_removed": "{user} telah dibuang", "album_with_link_access": "Benarkan sesiapa yang mempunyai pautan melihat foto dan individu dalam album ini.", - "deduplication_criteria_1": "Saiz imej dalam bait", - "deduplication_criteria_2": "Kiraan data EXIF", - "deduplication_info": "Maklumat Pendeduplikasian", - "deduplication_info_description": "Untuk prapilih aset secara automatik dan mengalih keluar pendua secara pukal, kami melihat pada:", "delete": "Padam", "delete_album": "Padam album", "delete_api_key_prompt": "Adakah anda pasti mahu memadam kunci API ini?", diff --git a/i18n/nb_NO.json b/i18n/nb_NO.json index 6b2c3862c3..5e34ef2918 100644 --- a/i18n/nb_NO.json +++ b/i18n/nb_NO.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Fikset", "crop_aspect_ratio_free": "Lagret", "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Firkant", "curated_object_page_title": "Ting", "current_device": "Nåværende enhet", "current_pin_code": "Nåværende PIN kode", @@ -880,7 +881,7 @@ "daily_title_text_date": "E MMM. dd", "daily_title_text_date_year": "E MMM. dddd, yyyy", "dark": "Mørk", - "dark_theme": "Aktiver mørk-modus", + "dark_theme": "Skift til mørkt tema", "date": "Dato", "date_after": "Dato etter", "date_and_time": "Dato og tid", @@ -891,12 +892,10 @@ "day": "Dag", "days": "Dager", "deduplicate_all": "De-dupliser alle", - "deduplication_criteria_1": "Bilde størrelse i bytes", - "deduplication_criteria_2": "Antall av EXIF data", - "deduplication_info": "Dedupliseringsinformasjon", - "deduplication_info_description": "For å automatisk forhåndsvelge eiendeler og fjerne duplikater samtidig, ser vi på:", + "default_locale": "Standardspråk", + "default_locale_description": "Formater datoer og tall basert på din nettlesers språkinnstillinger", "delete": "Slett", - "delete_action_confirmation_message": "Vil du virkelig slette dette elementet? Dette vil flytte elementet til papirkurvn og vil gi deg beskjed om du vil slette det lokalt", + "delete_action_confirmation_message": "Vil du virkelig slette dette elementet? Dette vil flytte elementet til papirkurven og vil gi deg beskjed om du vil slette det lokalt", "delete_action_prompt": "{count} slettet", "delete_album": "Slett album", "delete_api_key_prompt": "Vil du virkelig slette denne API-nøkkelen?", @@ -970,7 +969,7 @@ "downloading_media": "Laster ned media", "drop_files_to_upload": "Slipp filer hvor som helst for å laste opp", "duplicates": "Duplikater", - "duplicates_description": "Løs hver gruppe ved å angi hvilke, hvis noen, er duplikater", + "duplicates_description": "Løs hver gruppe ved å angi hvilke, hvis noen, er duplikater.", "duration": "Varighet", "edit": "Rediger", "edit_album": "Rediger album", @@ -1007,8 +1006,8 @@ "editor_edits_applied_success": "Lagring av endringer vellykket", "editor_flip_horizontal": "Roter horisontalt", "editor_flip_vertical": "Roter vertikalt", - "editor_handle_corner": "{corner, select, top_left {Øvre venstre} top_right {Øvre høyre} bottom_left {Nedre venstre} bottom_right {Nedre høyre} other {A}} hjørnehåndtak", - "editor_handle_edge": "{edge, select, top {Øvre} bottom {Nedre} left {Venstre} right {Høyre} other {Et}} kanthåndtak", + "editor_handle_corner": "{corner, select, top_left {Øverst venstre} top_right {Øverst høyre} bottom_left {Nederst venstre} bottom_right {Nederst høyre} other {A}} hjørnehåndtak", + "editor_handle_edge": "{edge, select, top {Øverst} bottom {Nederst} left {Venstre} right {Høyre} other {Et}} kanthåndtak", "editor_orientation": "Orientering", "editor_reset_all_changes": "Tilbakestill endringer", "editor_rotate_left": "Roter 90° mot klokken", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Albumtittel", "licenses": "Lisenser", "light": "Lys", + "light_theme": "Skift til lyst tema", "like": "Lik", "like_deleted": "Som slettede", "link_motion_video": "Koble bevegelsesvideo", + "link_to_docs": "For mer informasjon, se dokumentasjonen.", "link_to_oauth": "Lenke til OAuth", "linked_oauth_account": "Lenket til OAuth-konto", "list": "Liste", @@ -1651,6 +1652,7 @@ "only_favorites": "Bare favoritter", "open": "Åpne", "open_calendar": "Åpne kalender", + "open_in_browser": "Åpne i nettleser", "open_in_map_view": "Åpne i kartvisning", "open_in_openstreetmap": "Åpne i OpenStreetMap", "open_the_search_filters": "Åpne søkefiltrene", @@ -1719,9 +1721,9 @@ "permission_onboarding_permission_limited": "Begrenset tilgang. For å la Immich sikkerhetskopiere og håndtere galleriet, tillatt bilde- og video-tilgang i Innstillinger.", "permission_onboarding_request": "Immich trenger tilgang til å se dine bilder og videoer.", "person": "Person", - "person_age_months": "{months, plural, one {# month} other {# months}} gammel", - "person_age_year_months": "1 år, {months, plural, one {# month} other {# months}} gammel", - "person_age_years": "{years, plural, other {# years}} gammel", + "person_age_months": "{months, plural, one {# måned} other {# måneder}} gammel", + "person_age_year_months": "1 år, {months, plural, one {# måned} other {# måneder}} gammel", + "person_age_years": "{years, plural, other {# år}} gammel", "person_birthdate": "Født den {date}", "person_hidden": "{name}{hidden, select, true { (skjult)} other {}}", "person_recognized": "Person gjenkjent", @@ -2393,6 +2395,7 @@ "viewer_remove_from_stack": "Fjern fra stabling", "viewer_stack_use_as_main_asset": "Bruk som hovedelement", "viewer_unstack": "avstable", + "visibility": "Synlighet", "visibility_changed": "Synlighet endret for {count, plural, one {# person} other {# people}}", "visual": "Visuell", "visual_builder": "Visuell oppbygging", diff --git a/i18n/nl.json b/i18n/nl.json index e38ef7bd7a..57c898d728 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -349,7 +349,7 @@ "template_email_update_album": "Update in album sjabloon", "template_email_welcome": "Welkomstmail sjabloon", "template_settings": "Melding sjablonen", - "template_settings_description": "Beheer aangepast sjablonen voor meldingen", + "template_settings_description": "Beheer aangepaste sjablonen voor meldingen", "theme_custom_css_settings": "Aangepaste CSS", "theme_custom_css_settings_description": "Met Cascading Style Sheets kan het ontwerp van Immich worden aangepast.", "theme_settings": "Thema-instellingen", @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Vast", "crop_aspect_ratio_free": "Vrij", "crop_aspect_ratio_original": "Origineel", + "crop_aspect_ratio_square": "Vierkant", "curated_object_page_title": "Dingen", "current_device": "Huidig apparaat", "current_pin_code": "Huidige pincode", @@ -876,11 +877,11 @@ "custom_url": "Aangepaste URL", "cutoff_date_description": "Bewaar foto's van de laatste…", "cutoff_day": "{count, plural, one {dag} other {dagen}}", - "cutoff_year": "{count, plural, one {jaar} other {jaar}}", + "cutoff_year": "{count, plural, one {jaar} other {jaren}}", "daily_title_text_date": "E dd MMM", "daily_title_text_date_year": "E dd MMM yyyy", "dark": "Donker", - "dark_theme": "Donker thema in- of uitschakelen", + "dark_theme": "Wissel naar donker thema", "date": "Datum", "date_after": "Datum na", "date_and_time": "Datum en tijd", @@ -891,10 +892,8 @@ "day": "Dag", "days": "Dagen", "deduplicate_all": "Alles dedupliceren", - "deduplication_criteria_1": "Grootte van afbeelding in bytes", - "deduplication_criteria_2": "Aantal EXIF data", - "deduplication_info": "Deduplicatie-info", - "deduplication_info_description": "Om automatisch items te preselecteren en duplicaten te verwijderen in bulk, kijken we naar:", + "default_locale": "Standaard landinstelling", + "default_locale_description": "Formatteer datums en getallen op basis van de taalinstellingen van uw browser", "delete": "Verwijderen", "delete_action_confirmation_message": "Weet je zeker dat je dit item wilt verwijderen? Deze actie zorgt ervoor dat het item naar de prullenbak van de server wordt verplaatst en je wordt gevraagd of je deze ook lokaal wilt verwijderen", "delete_action_prompt": "{count} item(s) verwijderd", @@ -970,7 +969,7 @@ "downloading_media": "Media aan het downloaden", "drop_files_to_upload": "Zet bestanden ergens neer om ze te uploaden", "duplicates": "Duplicaten", - "duplicates_description": "Kies voor iedere groep welke, indien aanwezig, duplicaten zijn", + "duplicates_description": "Kies voor iedere groep welke, indien aanwezig, duplicaten zijn.", "duration": "Tijdsduur", "edit": "Bewerken", "edit_album": "Album bewerken", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Albumtitel", "licenses": "Licenties", "light": "Licht", + "light_theme": "Wissel naar lichte thema", "like": "Vind ik leuk", "like_deleted": "Like verwijderd", "link_motion_video": "Koppel bewegende video", + "link_to_docs": "Raadpleeg voor meer informatie de documentatie.", "link_to_oauth": "Koppel OAuth", "linked_oauth_account": "Gekoppeld OAuth account", "list": "Lijst", @@ -2394,6 +2395,7 @@ "viewer_remove_from_stack": "Verwijder van stapel", "viewer_stack_use_as_main_asset": "Zet bovenaan de stapel", "viewer_unstack": "Ontstapel", + "visibility": "Zichtbaarheid", "visibility_changed": "Zichtbaarheid gewijzigd voor {count, plural, one {# persoon} other {# mensen}}", "visual": "Visueel", "visual_builder": "Visuele bouwer", diff --git a/i18n/pl.json b/i18n/pl.json index 507781c79a..6cd4f39886 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -91,7 +91,7 @@ "failed_job_command": "Polecenie {command} nie powiodło się dla zadania: {job}", "force_delete_user_warning": "UWAGA: Użytkownik i wszystkie zasoby użytkownika zostaną natychmiast trwale usunięte. Nie można tego cofnąć, a plików nie będzie można przywrócić.", "image_format": "Format", - "image_format_description": "Użycie formatu WebP skutkuje utworzeniem plików o rozmiarze mniejszym niż w przypadku JPEG ale jego kodowanie trwa dłużej.", + "image_format_description": "Format WebP generuje mniejsze pliki niż JPEG, ale ich kodowanie trwa dłużej.", "image_fullsize_description": "Pełnowymiarowy obraz z usuniętymi metadanymi, używany przy powiększeniu", "image_fullsize_enabled": "Włącz generowanie obrazów o pełnym wymiarze", "image_fullsize_enabled_description": "Generuje pełnowymiarowe obrazy dla formatów nieprzyjaznych stronom internetowym. Gdy opcja „Preferuj osadzony podgląd” jest włączona, osadzone podglądy są używane bezpośrednio bez konwersji. Nie wpływa na formaty przyjazne stronom internetowym, takie jak JPEG.", @@ -138,7 +138,7 @@ "library_updated": "Zaktualizowana biblioteka", "library_watching_enable_description": "Przejrzyj zewnętrzne biblioteki w poszukiwaniu zmienionych plików", "library_watching_settings": "Obserwowanie bibliotek [EKSPERYMENTALNE]", - "library_watching_settings_description": "Automatycznie obserwuj zmienione pliki", + "library_watching_settings_description": "Automatycznie poszukuj zmian w plikach", "logging_enable_description": "Uruchom zapisywanie logów", "logging_level_description": "Kiedy włączone, jakiego poziomu użyć.", "logging_settings": "Rejestrowanie logów", @@ -849,9 +849,12 @@ "create_link_to_share": "Utwórz link do udostępnienia", "create_link_to_share_description": "Pozwól każdemu z dostępem do linku zobaczyć wybrane zdjęcie/zdjęcia", "create_new": "UTWÓRZ NOWY", + "create_new_face": "Utwórz nową twarz", "create_new_person": "Stwórz nową osobę", "create_new_person_hint": "Przypisz wybrane zasoby do nowej osoby", "create_new_user": "Stwórz nowego użytkownika", + "create_person": "Utwórz osobę", + "create_person_subtitle": "Dodaj nazwę do wybranej twarzy aby utworzyć i oznaczyć nową osobę", "create_shared_album_page_share_add_assets": "DODAJ ZASOBY", "create_shared_album_page_share_select_photos": "Zaznacz Zdjęcia", "create_shared_link": "Utwórz link udostępniający", @@ -866,6 +869,7 @@ "crop_aspect_ratio_fixed": "Stałe", "crop_aspect_ratio_free": "Dowolne", "crop_aspect_ratio_original": "Oryginalne", + "crop_aspect_ratio_square": "Kwadrat", "curated_object_page_title": "Rzeczy", "current_device": "Obecne urządzenie", "current_pin_code": "Aktualny kod PIN", @@ -880,7 +884,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM, yyyy", "dark": "Ciemny", - "dark_theme": "Przełącz ciemny motyw", + "dark_theme": "Przełącz na ciemny motyw", "date": "Data", "date_after": "Data po", "date_and_time": "Data i godzina", @@ -891,10 +895,8 @@ "day": "Dzień", "days": "Dni", "deduplicate_all": "Usuń duplikaty", - "deduplication_criteria_1": "Rozmiar obrazu w bajtach", - "deduplication_criteria_2": "Ilość plików EXIF", - "deduplication_info": "Stan duplikatów", - "deduplication_info_description": "Aby zakwalifikować elementy jako duplikaty do masowego usunięcia, sprawdzane jest:", + "default_locale": "Domyślne ustawienia regionalne", + "default_locale_description": "Formatuj daty i liczby zgodnie z ustawieniami regionalnymi przeglądarki", "delete": "Usuń", "delete_action_confirmation_message": "Jesteś pewien, że chcesz usunąć ten zasób? Ta czynność przeniesie zasób do kosza na serwerze i wyświetli komunikat z pytaniem, czy chcesz go usunąć lokalnie", "delete_action_prompt": "{count} usuniętych", @@ -970,7 +972,7 @@ "downloading_media": "Pobieranie multimediów", "drop_files_to_upload": "Upuść pliki w dowolnym miejscu, aby je przesłać", "duplicates": "Duplikaty", - "duplicates_description": "Rozstrzygnij każdą grupę, określając, które zasoby są duplikatami, jeżeli są duplikatami", + "duplicates_description": "Rozstrzygnij każdą grupę, określając, które zasoby są duplikatami, jeżeli są duplikatami.", "duration": "Czas trwania", "edit": "Edytuj", "edit_album": "Edytuj album", @@ -1007,6 +1009,8 @@ "editor_edits_applied_success": "Zmiany zostały pomyślnie zastosowane", "editor_flip_horizontal": "Odwróć poziomo", "editor_flip_vertical": "Odwróć pionowo", + "editor_handle_corner": "{corner, select, top_left {Top-left} top_right {Top-right} bottom_left {Bottom-left} bottom_right {Bottom-right} other {A}} uchwyt narożny", + "editor_handle_edge": "{edge, select, top {Top} bottom {Bottom} left {Left} right {Right} other {An}} uchwyt krawędziowy", "editor_orientation": "Orientacja", "editor_reset_all_changes": "Zresetuj zmiany", "editor_rotate_left": "Obróć o 90° przeciwnie do ruchu wskazówek zegara", @@ -1385,9 +1389,11 @@ "library_page_sort_title": "Tytuł albumu", "licenses": "Licencje", "light": "Jasny", + "light_theme": "Przełącz na jasny motyw", "like": "Polub", "like_deleted": "Polubienie usunięte", "link_motion_video": "Podłącz ruchome wideo", + "link_to_docs": "Więcej informacji znajdziesz w dokumentacji.", "link_to_oauth": "Połącz z OAuth", "linked_oauth_account": "Połączone konto OAuth", "list": "Lista", @@ -1567,7 +1573,7 @@ "network_requirements_updated": "Zmieniono wymagania sieciowe, resetowanie kolejki kopii zapasowych", "networking_settings": "Sieć", "networking_subtitle": "Zarządzaj ustawieniami punktu końcowego serwera", - "never": "nigdy", + "never": "Nigdy", "new_album": "Nowy album", "new_api_key": "Nowy Klucz API", "new_date_range": "Nowy zakres dat", @@ -2211,6 +2217,7 @@ "tag": "Etykieta", "tag_assets": "Ustaw etykiety zasobów", "tag_created": "Stworzono etykietę: {tag}", + "tag_face": "Oznacz twarz", "tag_feature_description": "Przeglądanie zdjęć i filmów pogrupowanych według logicznych etykiet wskazujących temat", "tag_not_found_question": "Nie możesz znaleźć etykiety? Utwórz ją tutaj", "tag_people": "Dodaj etykiety osób", @@ -2392,6 +2399,7 @@ "viewer_remove_from_stack": "Usuń ze stosu", "viewer_stack_use_as_main_asset": "Użyj jako głównego zasobu", "viewer_unstack": "Rozdziel stos", + "visibility": "Widoczność", "visibility_changed": "Zmieniono widoczność dla {count, plural, one {# osoby} other {# osób}}", "visual": "Wizualny", "visual_builder": "Edytor wizualny", diff --git a/i18n/pt.json b/i18n/pt.json index f5794b482e..2cafc1fdc6 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Fixo", "crop_aspect_ratio_free": "Livre", "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Quadrado", "curated_object_page_title": "Objetos", "current_device": "Dispositivo atual", "current_pin_code": "Código PIN atual", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM, yyyy", "dark": "Escuro", - "dark_theme": "Alternar tema escuro", + "dark_theme": "Alterar para o tema escuro", "date": "Data", "date_after": "Data após", "date_and_time": "Data e Hora", @@ -891,10 +892,8 @@ "day": "Dia", "days": "Dias", "deduplicate_all": "Remover todos os duplicados", - "deduplication_criteria_1": "Tamanho da imagem em bytes", - "deduplication_criteria_2": "Quantidade de dados EXIF", - "deduplication_info": "Informações sobre remoção de duplicados", - "deduplication_info_description": "Para selecionar automaticamente itens e remover duplicados em massa, iremos ver o seguinte:", + "default_locale": "Localização Padrão", + "default_locale_description": "Formatar datas e números baseados na definição de localização do navegador", "delete": "Eliminar", "delete_action_confirmation_message": "Tem a certeza de que quer eliminar este ficheiro? Está ação irá mover o ficheiro para a reciclagem do servidor e perguntar se quer apagá-lo localmente", "delete_action_prompt": "{count} eliminados", @@ -970,7 +969,7 @@ "downloading_media": "A descarregar ficheiro", "drop_files_to_upload": "Solte os ficheiros em qualquer lugar para os enviar", "duplicates": "Itens duplicados", - "duplicates_description": "Marque cada grupo indicando quais ficheiros, se algum, são duplicados", + "duplicates_description": "Marca cada grupo ao indicar quais ficheiros, se algum, são duplicados.", "duration": "Duração", "edit": "Editar", "edit_album": "Editar álbum", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Título do álbum", "licenses": "Licenças", "light": "Claro", + "light_theme": "Alterar para o tema claro", "like": "Gosto", "like_deleted": "Gosto removido", "link_motion_video": "Relacionar video animado", + "link_to_docs": "Para mais informações, veja a documentação.", "link_to_oauth": "Link do OAuth", "linked_oauth_account": "Conta OAuth Associada", "list": "Lista", @@ -1651,6 +1652,7 @@ "only_favorites": "Apenas favoritos", "open": "Abrir", "open_calendar": "Abrir calendário", + "open_in_browser": "Abrir no navegador", "open_in_map_view": "Abrir na visualização de mapa", "open_in_openstreetmap": "Abrir no OpenStreetMap", "open_the_search_filters": "Abrir os filtros de pesquisa", @@ -2393,6 +2395,7 @@ "viewer_remove_from_stack": "Remover da pilha", "viewer_stack_use_as_main_asset": "Usar como foto principal", "viewer_unstack": "Desempilhar", + "visibility": "Visibilidade", "visibility_changed": "Visibilidade alterada para {count, plural, one {# pessoa} other {# pessoas}}", "visual": "Visual", "visual_builder": "Construtor visual", diff --git a/i18n/pt_BR.json b/i18n/pt_BR.json index cade2bb400..20d376289f 100644 --- a/i18n/pt_BR.json +++ b/i18n/pt_BR.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Fixo", "crop_aspect_ratio_free": "Livre", "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Quadrado", "curated_object_page_title": "Objetos", "current_device": "Dispositivo atual", "current_pin_code": "Código PIN atual", @@ -891,10 +892,7 @@ "day": "Dia", "days": "Dias", "deduplicate_all": "Limpar todas Duplicidades", - "deduplication_criteria_1": "Tamanho do arquivo em bytes", - "deduplication_criteria_2": "Quantidade de dados EXIF", - "deduplication_info": "Informações", - "deduplication_info_description": "Ao selecionar os arquivos que serão marcados para remoção por duplicidade, será considerado os parâmetros:", + "default_locale": "Local padrão", "delete": "Excluir", "delete_action_confirmation_message": "Tem certeza? O arquivo será enviado para a lixeira do servidor, depois você poderá confirmar se deseja também deletar do seu dispositivo local", "delete_action_prompt": "{count} deletados", @@ -1387,9 +1385,11 @@ "library_page_sort_title": "Título do álbum", "licenses": "Licenças", "light": "Claro", + "light_theme": "Mudar para tema claro", "like": "Curtir", "like_deleted": "Curtida excluída", "link_motion_video": "Relacionar video animado", + "link_to_docs": "Para mais informações, veja", "link_to_oauth": "Link do OAuth", "linked_oauth_account": "Conta OAuth Vinculada", "list": "Lista", @@ -2394,6 +2394,7 @@ "viewer_remove_from_stack": "Remover do grupo", "viewer_stack_use_as_main_asset": "Usar como foto principal", "viewer_unstack": "Desagrupar", + "visibility": "Visibilidade", "visibility_changed": "A visibilidade de {count, plural, one {# pessoa foi alterada} other {# pessoas foram alteradas}}", "visual": "Visual", "visual_builder": "Construtor visual", diff --git a/i18n/ro.json b/i18n/ro.json index 947da3de4d..a4f7e94eaa 100644 --- a/i18n/ro.json +++ b/i18n/ro.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Reparat", "crop_aspect_ratio_free": "Liber", "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Pătrat", "curated_object_page_title": "Obiecte", "current_device": "Dispozitiv curent", "current_pin_code": "Codul PIN actual", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, LLL zz", "daily_title_text_date_year": "E, LLL zz, aaaa", "dark": "Întunecat", - "dark_theme": "Comută tema întunecată", + "dark_theme": "Comută la tema întunecată", "date": "Dată", "date_after": "După data", "date_and_time": "Dată și oră", @@ -891,10 +892,8 @@ "day": "Zi", "days": "Zile", "deduplicate_all": "Deduplicați Toate", - "deduplication_criteria_1": "Marimea imagini în octeți", - "deduplication_criteria_2": "Numărul de date EXIF", - "deduplication_info": "Informați despre deduplicare", - "deduplication_info_description": "Ca să preselecționăm activele și să scoatem duplicatele în vrac , ne uităm la:", + "default_locale": "Localizare implicită", + "default_locale_description": "Formatează datele și numerele în funcție de localizarea browser-ului", "delete": "Ștergere", "delete_action_confirmation_message": "Sigur vrei să ștergi acest element? Această acțiune va muta elementul în coșul de gunoi al serverului și te va întreba dacă vrei să-l ștergi local", "delete_action_prompt": "{count} șterse", @@ -970,7 +969,7 @@ "downloading_media": "Se descarcă fișierele media", "drop_files_to_upload": "Trageți fișierele aici pentru a le încărca", "duplicates": "Duplicate", - "duplicates_description": "Rezolvați fiecare grup indicând care sunt duplicate, dacă există", + "duplicates_description": "Rezolvați fiecare grup indicând care sunt duplicate, dacă există.", "duration": "Durată", "edit": "Editare", "edit_album": "Editare album", diff --git a/i18n/ru.json b/i18n/ru.json index c5c8b9b39c..5aba7df109 100644 --- a/i18n/ru.json +++ b/i18n/ru.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Фиксированный", "crop_aspect_ratio_free": "Свободно", "crop_aspect_ratio_original": "Оригинал", + "crop_aspect_ratio_square": "Квадрат", "curated_object_page_title": "Предметы", "current_device": "Текущее устройство", "current_pin_code": "Текущий PIN-код", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, MMM dd", "daily_title_text_date_year": "E, MMM dd, yyyy", "dark": "Тёмная", - "dark_theme": "Включить/выключить тёмную тему", + "dark_theme": "Переключиться на тёмную тему", "date": "Дата", "date_after": "Дата после", "date_and_time": "Дата и время", @@ -891,10 +892,8 @@ "day": "День", "days": "Дни", "deduplicate_all": "Убрать все дубликаты", - "deduplication_criteria_1": "Размер изображения в байтах", - "deduplication_criteria_2": "Количество EXIF данных", - "deduplication_info": "Информация о дедупликации", - "deduplication_info_description": "Для автоматического выбора лучших объектов среди дубликатов анализируется следующая информация:", + "default_locale": "Локаль по умолчанию", + "default_locale_description": "Форматирование дат и чисел в соответствии с языковыми настройками вашего браузера", "delete": "Удалить", "delete_action_confirmation_message": "Вы действительно хотите удалить этот объект? Это действие переместит объект в корзину сервера и попробует удалить его локально.", "delete_action_prompt": "Объекты удалены ({count} шт.)", @@ -970,7 +969,7 @@ "downloading_media": "Загрузка медиа", "drop_files_to_upload": "Перенесите файлы в любое место для загрузки", "duplicates": "Дубликаты", - "duplicates_description": "Просмотрите найденные дубликаты и в каждой группе укажите, какие объекты оставить, а какие удалить", + "duplicates_description": "Просмотрите найденные дубликаты и в каждой группе укажите, какие объекты оставить, а какие удалить.", "duration": "Продолжительность", "edit": "Изменить", "edit_album": "Изменить альбом", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Название альбома", "licenses": "Лицензии", "light": "Светлая", + "light_theme": "Переключиться на светлую тему", "like": "Нравится", "like_deleted": "Лайк удален", "link_motion_video": "Ссылка на движущееся видео", + "link_to_docs": "Дополнительная информация доступна в документации.", "link_to_oauth": "Присоединение к OAuth", "linked_oauth_account": "Присоединённый аккаунт OAuth", "list": "Список", @@ -1915,7 +1916,7 @@ "saved_settings": "Настройки сохранены", "say_something": "Напишите что-нибудь", "scaffold_body_error_occurred": "Возникла ошибка", - "scaffold_body_error_unrecoverable": "Произошла неустранимая ошибка. Пожалуйста, сообщите об ошибке в Discord или на GitHub, чтобы разработчики могли помочь. Если советуют, вы можете полностью очистить данные приложения.", + "scaffold_body_error_unrecoverable": "Произошла неустранимая ошибка. Пожалуйста, сообщите об этой ошибке разработчикам в Discord или на GitHub. В качестве решения можно попробовать очистить данные приложения.", "scan": "Поиск", "scan_all_libraries": "Сканировать все библиотеки", "scan_library": "Сканировать", @@ -2394,6 +2395,7 @@ "viewer_remove_from_stack": "Убрать из группы", "viewer_stack_use_as_main_asset": "Использовать в качестве основного объекта", "viewer_unstack": "Разгруппировать", + "visibility": "Видимость", "visibility_changed": "Изменена видимость у {count, plural, one {# человека} other {# человек}}", "visual": "Визуальный", "visual_builder": "Визуальный конструктор", diff --git a/i18n/sk.json b/i18n/sk.json index 7f25d21b7c..d18c2fc23b 100644 --- a/i18n/sk.json +++ b/i18n/sk.json @@ -849,9 +849,12 @@ "create_link_to_share": "Vytvoriť odkaz na zdieľanie", "create_link_to_share_description": "Umožniť každému, kto má odkaz, zobraziť vybrané fotografie", "create_new": "VYTVORIŤ NOVÉ", + "create_new_face": "Vytvoriť novú tvár", "create_new_person": "Vytvoriť novú osobu", "create_new_person_hint": "Priradiť vybrané položky novej osobe", "create_new_user": "Vytvorenie nového používateľa", + "create_person": "Vytvoriť osobu", + "create_person_subtitle": "Pridajte meno k vybranej tvári, aby ste vytvorili a označili novú osobu", "create_shared_album_page_share_add_assets": "PRIDAŤ POLOŽKY", "create_shared_album_page_share_select_photos": "Vybrať fotografie", "create_shared_link": "Vytvoriť zdieľaný odkaz", @@ -866,6 +869,7 @@ "crop_aspect_ratio_fixed": "Pevný pomer", "crop_aspect_ratio_free": "Voľný", "crop_aspect_ratio_original": "Originálny", + "crop_aspect_ratio_square": "Štvorec", "curated_object_page_title": "Veci", "current_device": "Súčasné zariadenie", "current_pin_code": "Aktuálny PIN kód", @@ -880,7 +884,7 @@ "daily_title_text_date": "EEEE, d. MMMM", "daily_title_text_date_year": "EEEE, d. MMMM y", "dark": "Tmavá", - "dark_theme": "Prepnúť tmavú tému", + "dark_theme": "Prepnúť na tmavú tému", "date": "Dátum", "date_after": "Dátum po", "date_and_time": "Dátum a Čas", @@ -891,10 +895,8 @@ "day": "Deň", "days": "Dní", "deduplicate_all": "Deduplikovať všetko", - "deduplication_criteria_1": "Veľkosť obrázku v bajtoch", - "deduplication_criteria_2": "Počet EXIF údajov", - "deduplication_info": "Info o deduplikácii", - "deduplication_info_description": "Na automatický predvýber položiek a hromadné odstránenie duplicít, sa pozeráme do:", + "default_locale": "Predvolený jazyk", + "default_locale_description": "Formátovať dátumy a čísla podľa jazyka vášho prehliadača", "delete": "Vymazať", "delete_action_confirmation_message": "Naozaj chcete túto položku odstrániť? Táto akcia presunie položku do koša na serveri a zobrazí sa otázka, či ju chcete odstrániť aj lokálne", "delete_action_prompt": "{count} vymazaných", @@ -970,7 +972,7 @@ "downloading_media": "Sťahovanie médií", "drop_files_to_upload": "Umiestnite súbory kamkoľvek na nahratie", "duplicates": "Duplikáty", - "duplicates_description": "Vysporiadať sa s každou skupinou tak, že sa duplicitné označia ako duplicitné", + "duplicates_description": "Vyriešiť jednotlivé skupiny tak, že sa označia tie, ktoré z nich sú duplicitné, ak nejaké sú.", "duration": "Trvanie", "edit": "Upraviť", "edit_album": "Upraviť album", @@ -1387,9 +1389,11 @@ "library_page_sort_title": "Podľa názvu albumu", "licenses": "Licencie", "light": "Svetlá", + "light_theme": "Prepnúť na svetlú tému", "like": "Páči sa mi", "like_deleted": "Like odstránený", "link_motion_video": "Pripojiť pohyblivé video", + "link_to_docs": "Ďalšie informácie nájdete v dokumentácii.", "link_to_oauth": "Prepojiť s OAuth", "linked_oauth_account": "Pripojený OAuth účet", "list": "Zoznam", @@ -2213,6 +2217,7 @@ "tag": "Štítok", "tag_assets": "Pridať štítky", "tag_created": "Vytvorený štítok: {tag}", + "tag_face": "Označiť tvár", "tag_feature_description": "Prehliadanie fotiek a videá zoskupených podľa tematických štítkov", "tag_not_found_question": "Neviete nájsť štítok? Vytvorte nový štítok.", "tag_people": "Označiť ľudí", @@ -2394,6 +2399,7 @@ "viewer_remove_from_stack": "Odstrániť zo zoskupenia", "viewer_stack_use_as_main_asset": "Použiť ako hlavnú fotku", "viewer_unstack": "Zrušiť zoskupenie", + "visibility": "Viditeľnosť", "visibility_changed": "Viditeľnosť zmenená pre {count, plural, one {# osobu} few {# osoby} other {# osôb}}", "visual": "Vizuálny", "visual_builder": "Vizuálny nástroj na tvorbu", diff --git a/i18n/sl.json b/i18n/sl.json index 53452866dc..38c4aa3dcc 100644 --- a/i18n/sl.json +++ b/i18n/sl.json @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Fiksno", "crop_aspect_ratio_free": "Poljubno", "crop_aspect_ratio_original": "Izvirno", + "crop_aspect_ratio_square": "Kvadrat", "curated_object_page_title": "Stvari", "current_device": "Trenutna naprava", "current_pin_code": "Trenutna PIN koda", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, MMM dd", "daily_title_text_date_year": "E, MMM dd, yyyy", "dark": "Temno", - "dark_theme": "Preklopi temno temo", + "dark_theme": "Preklopi na temno temo", "date": "Datum", "date_after": "Datum po", "date_and_time": "Datum in ura", @@ -891,10 +892,8 @@ "day": "Dan", "days": "Dnevi", "deduplicate_all": "Odstrani vse podvojene", - "deduplication_criteria_1": "Velikost slike v bajtih", - "deduplication_criteria_2": "Število podatkov EXIF", - "deduplication_info": "Informacije o zaznavanju dvojnikov", - "deduplication_info_description": "Za samodejno vnaprejšnjo izbiro sredstev in množično odstranjevanje dvojnikov si ogledamo:", + "default_locale": "Privzete jezikovne nastavitve", + "default_locale_description": "Oblikujte datume in številke glede na jezikovne nastavitve brskalnika", "delete": "Izbriši", "delete_action_confirmation_message": "Ali ste prepričani, da želite izbrisati to sredstvo? S tem dejanjem boste sredstvo premaknili v koš na strežniku in vas pozvali, ali ga želite izbrisati lokalno", "delete_action_prompt": "izbrisano {count}", @@ -970,7 +969,7 @@ "downloading_media": "Prenašanje medijev", "drop_files_to_upload": "Spustite datoteke kamor koli, da jih naložite", "duplicates": "Dvojniki", - "duplicates_description": "Razrešite vsako skupino tako, da navedete, kateri so dvojniki, če obstajajo", + "duplicates_description": "Vsako skupino razrešite tako, da navedete, kateri so, če sploh, dvojniki.", "duration": "Trajanje", "edit": "Uredi", "edit_album": "Uredi album", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Naslov albuma", "licenses": "Licence", "light": "Svetlo", + "light_theme": "Preklopi na svetlo temo", "like": "Všeč mi je", "like_deleted": "Všeček izbrisan", "link_motion_video": "Povezava videa gibanja", + "link_to_docs": "Za več informacij glejte dokumentacijo.", "link_to_oauth": "Povezava do OAuth", "linked_oauth_account": "Povezan račun OAuth", "list": "Seznam", @@ -2394,6 +2395,7 @@ "viewer_remove_from_stack": "Odstrani iz sklada", "viewer_stack_use_as_main_asset": "Uporabi kot glavno sredstvo", "viewer_unstack": "Razkladi", + "visibility": "Vidljivost", "visibility_changed": "Vidnost spremenjena za {count, plural, one {# osebo} two {# osebi} few {# osebe} other {# oseb}}", "visual": "Vizualno", "visual_builder": "Vizualni graditelj", diff --git a/i18n/sr_Cyrl.json b/i18n/sr_Cyrl.json index 7840b1c810..1472b111a4 100644 --- a/i18n/sr_Cyrl.json +++ b/i18n/sr_Cyrl.json @@ -733,10 +733,6 @@ "day": "Дан", "days": "Дани", "deduplicate_all": "Де-дуплицирај све", - "deduplication_criteria_1": "Величина слике у бајтовима", - "deduplication_criteria_2": "Број EXIF података", - "deduplication_info": "Информације о дедупликацији", - "deduplication_info_description": "Да бисмо аутоматски унапред одабрали датотеке и уклонили дупликате групно, гледамо:", "delete": "Обриши", "delete_album": "Обриши албум", "delete_api_key_prompt": "Да ли сте сигурни да желите да избришете овај АПИ кључ (кеy)?", diff --git a/i18n/sr_Latn.json b/i18n/sr_Latn.json index 8747fdeb83..b7f71ba4b8 100644 --- a/i18n/sr_Latn.json +++ b/i18n/sr_Latn.json @@ -879,10 +879,6 @@ "day": "Dan", "days": "Dani", "deduplicate_all": "De-dupliciraj sve", - "deduplication_criteria_1": "Veličina slike u bajtovima", - "deduplication_criteria_2": "Broj EXIF podataka", - "deduplication_info": "Informacije o deduplikaciji", - "deduplication_info_description": "Da bismo automatski unapred odabrali datoteke i uklonili duplikate grupno, gledamo:", "delete": "Obriši", "delete_action_confirmation_message": "Da li sigurno želiš da obrišeš ovu stvar? Ova akcija će pomeriti stvar u serversku kantu i ponuditi da li želiš da je obrišeš i lokalno", "delete_action_prompt": "{count} obrisano", diff --git a/i18n/sv.json b/i18n/sv.json index ab1067529f..e76f23c9a4 100644 --- a/i18n/sv.json +++ b/i18n/sv.json @@ -425,10 +425,10 @@ "unlink_all_oauth_accounts_description": "Kom ihåg att ta bort länken till alla OAuth-konton innan du migrerar till en ny leverantör.", "unlink_all_oauth_accounts_prompt": "Är du säker på att du vill ta bort länken till alla OAuth-konton? Detta återställer OAuth-ID:t för varje användare och kan inte ångras.", "user_cleanup_job": "Användarrensning", - "user_delete_delay": "{user} 's konto och objekt kommer att schemaläggas för permanent radering om {delay, plural, one {# day} other {# days}}.", + "user_delete_delay": "{user}s konto och resurser kommer att schemaläggas för permanent radering om {delay, plural, one {# dag} other {# dagar}}.", "user_delete_delay_settings": "Borttagningsfördröjning", "user_delete_delay_settings_description": "Antal dagar efter borttagning för att permanent radera en användares konto och objekt. Arbetet med borttagning av användare körs vid midnatt för att söka efter användare som är redo för radering. Ändringar av denna inställning kommer att utvärderas vid nästa körning.", - "user_delete_immediately": "{user} konto och objekt kommer att stå i kö för permanent radering.", + "user_delete_immediately": "{user}s konto och resurser kommer att stå i kö för omedelbar permanent radering.", "user_delete_immediately_checkbox": "Köa användare och objekt för omedelbar radering", "user_details": "Användardetaljer", "user_management": "Användarhantering", @@ -558,16 +558,16 @@ "asset_action_delete_err_read_only": "Kan inte ta bort skrivskyddade objekt, hoppar över", "asset_action_share_err_offline": "Kan inte hämta offline-objekt, hoppar över", "asset_added_to_album": "Lades till i album", - "asset_adding_to_album": "Lägger till i album...…", + "asset_adding_to_album": "Lägger till i album…", "asset_created": "Objekt skapad", "asset_description_updated": "Objektbeskrivning har uppdaterats", "asset_filename_is_offline": "Objektet {filename} är offline", "asset_has_unassigned_faces": "Objektet har otilldelade ansikten", - "asset_hashing": "Hashing...…", + "asset_hashing": "Hashning…", "asset_list_group_by_sub_title": "Gruppera på", "asset_list_layout_settings_dynamic_layout_title": "Dynamisk layout", "asset_list_layout_settings_group_automatically": "Automatiskt", - "asset_list_layout_settings_group_by": "Gruppera bilder efter", + "asset_list_layout_settings_group_by": "Gruppera resurser efter", "asset_list_layout_settings_group_by_month_day": "Månad + dag", "asset_list_layout_sub_title": "Layout", "asset_list_settings_subtitle": "Layoutinställningar för bildrutnät", @@ -583,32 +583,32 @@ "asset_trashed": "Objekt kasserat", "asset_troubleshoot": "Felsökning av objekt", "asset_uploaded": "Uppladdad", - "asset_uploading": "Laddar upp...…", - "asset_viewer_settings_subtitle": "Hantera inställningar för gallerivisare", + "asset_uploading": "Laddar upp…", + "asset_viewer_settings_subtitle": "Hantera inställningar för gallerivisning", "asset_viewer_settings_title": "Objektvisare", "assets": "Objekt", - "assets_added_count": "La till {count, plural, one {# asset} other {# assets}}", - "assets_added_to_album_count": "Lade till {count, plural, one {# asset} other {# assets}} i albumet", - "assets_added_to_albums_count": "Lade till {assetTotal, plural, one {# asset} other {# assets}} till {albumTotal, plural, one {# album} other {# albums}}", - "assets_cannot_be_added_to_album_count": "{count, plural, one {Asset} other {Assets}} kan inte läggas till i albumet", - "assets_cannot_be_added_to_albums": "{count, plural, one {Asset} other {Assets}} kan inte läggas till i något av albumen", + "assets_added_count": "Lade till {count, plural, one {# resurs} other {# resurser}}", + "assets_added_to_album_count": "Lade till {count, plural, one {# resurs} other {# resurser}} i albumet", + "assets_added_to_albums_count": "Lade till {assetTotal, plural, one {# resurs} other {# resurser}} till {albumTotal, plural, one {# album} other {# album}}", + "assets_cannot_be_added_to_album_count": "{count, plural, one {Resurs} other {Resurser}} kan inte läggas till i albumet", + "assets_cannot_be_added_to_albums": "{count, plural, one {Resurs} other {Resurser}} kan inte läggas till i något av albumen", "assets_count": "{count, plural, one {# objekt} other {# objekt}}", - "assets_deleted_permanently": "{count} objekt har tagits bort permanent", - "assets_deleted_permanently_from_server": "{count} objekt har tagits bort permanent från Immich-servern", - "assets_downloaded_failed": "{count, plural, one {Nedladdad # fil - {error} fil misslyckades} other {Nedladdade # filer - {error} filer misslyckades}}", - "assets_downloaded_successfully": "{count, plural, one {Nedladdade # fil framgångsrikt} other {Nedladdade # filer framgångsrikt}}", - "assets_moved_to_trash_count": "Flyttade {count, plural, one {# asset} other {# assets}} till papperskorgen", - "assets_permanently_deleted_count": "Raderad permanent {count, plural, one {# asset} other {# assets}}", - "assets_removed_count": "Tog bort {count, plural, one {# asset} other {# assets}}", - "assets_removed_permanently_from_device": "{count} objekt har raderats permanent från din enhet", - "assets_restore_confirmation": "Är du säker på att du vill återställa alla dina papperskorgen? Du kan inte ångra den här åtgärden! Observera att offlineobjekt inte kan återställas på detta sätt.", - "assets_restored_count": "Återställd {count, plural, one {# asset} other {# assets}}", - "assets_restored_successfully": "{count} objekt har återställts", - "assets_trashed": "{count} objekt raderade", - "assets_trashed_count": "Till Papperskorgen {count, plural, one {# asset} other {# assets}}", + "assets_deleted_permanently": "{count, plural, one {# resurs} other {# resurser}} har raderats permanent", + "assets_deleted_permanently_from_server": "{count, plural, one {# resurs} other {# resurser}} har permanent raderats från Immich-servern", + "assets_downloaded_failed": "{count, plural, one {Nerladdning av # fil - {error} fil misslyckades} other {Nerladdning av # filer - {error} filer misslyckades}}", + "assets_downloaded_successfully": "{count, plural, one {# fil framgångsrikt nerladdad} other {# filer framgångsrikt nerladdade}}", + "assets_moved_to_trash_count": "Flyttade {count, plural, one {# resurs} other {# resurser}} till papperskorgen", + "assets_permanently_deleted_count": "{count, plural, one {# resurs} other {# resurser}} permanent raderade", + "assets_removed_count": "Tog bort {count, plural, one {# resurs} other {# resurser}}", + "assets_removed_permanently_from_device": "{count, plural, one {# resurs} other {# resurser}} har raderats permanent från din enhet", + "assets_restore_confirmation": "Är du säker på att du vill återställa alla dina slängda resurser? Du kan inte ångra den här åtgärden! Observera att offlineresurser inte kan återställas på detta sätt.", + "assets_restored_count": "Återställde {count, plural, one {# resurs} other {# resurser}}", + "assets_restored_successfully": "{count, plural, one {# resurs} other {# resurser}} har framgångsrikt återställts", + "assets_trashed": "{count, plural, one {# resurs} other {# resurser}} {count, plural, one {flyttad} other {flyttade}} till papperskorgen", + "assets_trashed_count": "{count, plural, one {# resurs} other {# resurser}} {count, plural, one {flyttad} other {flyttade}} till papperskorgen", "assets_trashed_from_server": "{count} objekt raderade från Immich-servern", - "assets_were_part_of_album_count": "{count, plural, one {Asset was} other {Asset were}} är redan en del av albumet", - "assets_were_part_of_albums_count": "{count, plural, one {Asset was} other {Asset were}} redan del av albumen", + "assets_were_part_of_album_count": "{count, plural, one {Resursen} other {Resurserna}} tillhör redan albumet", + "assets_were_part_of_albums_count": "{count, plural, one {Resursen} other {Resurserna}} tillhör redan albumen", "authorized_devices": "Auktoriserade enheter", "automatic_endpoint_switching_subtitle": "Anslut lokalt via det angivna Wi-Fi-nätverket när det är tillgängligt och använd alternativa anslutningar på andra platser", "automatic_endpoint_switching_title": "Automatisk URL-växling", @@ -622,14 +622,14 @@ "backup": "Säkerhetskopiera", "backup_album_selection_page_albums_device": "Album på enhet ({count})", "backup_album_selection_page_albums_tap": "Tryck en gång för att inkludera, tryck två gånger för att exkludera", - "backup_album_selection_page_assets_scatter": "Objekt kan vara utspridda över flera album. Därför kan album inkluderas eller exkluderas under säkerhetskopieringsprocessen.", + "backup_album_selection_page_assets_scatter": "Resurser kan vara utspridda över flera album. Därför kan album inkluderas eller exkluderas under säkerhetskopieringsprocessen.", "backup_album_selection_page_select_albums": "Välj album", "backup_album_selection_page_selection_info": "Info om valda objekt", - "backup_album_selection_page_total_assets": "Antal unika objekt", + "backup_album_selection_page_total_assets": "Antal unika resurser", "backup_albums_sync": "Backup-albumsynkronisering", "backup_all": "Allt", - "backup_background_service_backup_failed_message": "Säkerhetskopiering av foton och videor misslyckades. Försöker igen…", - "backup_background_service_complete_notification": "Säkerhetskopiering av objekt klar", + "backup_background_service_backup_failed_message": "Säkerhetskopiering av resurser misslyckades. Försöker igen…", + "backup_background_service_complete_notification": "Säkerhetskopiering av resurser slutfört", "backup_background_service_connection_failed_message": "Anslutning till servern misslyckades. Försöker igen…", "backup_background_service_current_upload_notification": "Laddar upp {filename}", "backup_background_service_default_notification": "Söker efter nya objekt…", @@ -678,7 +678,7 @@ "backup_controller_page_uploading_file_info": "Laddar upp filinformation", "backup_err_only_album": "Kan inte ta bort det enda albumet", "backup_error_sync_failed": "Synkroniseringen misslyckades. Det går inte att bearbeta säkerhetskopian.", - "backup_info_card_assets": "objekt", + "backup_info_card_assets": "resurser", "backup_manual_cancelled": "Avbrutet", "backup_manual_in_progress": "Uppladdning pågår redan. Försök igen om en liten stund", "backup_manual_success": "Klart", @@ -700,8 +700,8 @@ "build": "Bygge", "build_image": "Byggfil", "bulk_delete_duplicates_confirmation": "Är du säker på att du vill massradera {count, plural, one {# dublettobjekt} other {# dublettobjekt}}? Detta kommer att behålla det största objektet i varje grupp och permanent radera alla andra dubbletter. Du kan inte ångra den här åtgärden!", - "bulk_keep_duplicates_confirmation": "Är du säker på att du vill behålla {count, plural, one {# duplicate asset} other {# duplicate assets}}? Detta kommer att lösa alla dubbletter av grupper utan att ta bort någonting.", - "bulk_trash_duplicates_confirmation": "Är du säker på att du vill skicka {count, plural, one {# dublettobjekt} other {# dublettobjekt}} till papperskorgen? Detta kommer att behålla det största objektet i varje grupp och alla andra dubbletter kasseras.", + "bulk_keep_duplicates_confirmation": "Är du säker på att du vill behålla {count, plural, one {# dublett} other {# dubletter}}? Detta kommer att lösa alla grupper av dubbletter utan att ta bort någonting.", + "bulk_trash_duplicates_confirmation": "Är du säker på att du vill skicka {count, plural, one {# dublett} other {# dubletter}} till papperskorgen? Detta kommer att behålla det största objektet i varje grupp och alla andra dubbletter kasseras.", "buy": "Köp Immich", "cache_settings_clear_cache_button": "Rensa cacheminnet", "cache_settings_clear_cache_button_title": "Rensar appens cacheminne. Detta kommer att avsevärt påverka appens prestanda tills cachen har byggts om.", @@ -752,22 +752,22 @@ "changed_visibility_successfully": "Synligheten har ändrats", "charging": "Laddar", "charging_requirement_mobile_backup": "Bakgrundssäkerhetskopiering kräver att enheten laddas", - "check_corrupt_asset_backup": "Kontrollera om det finns korrupta säkerhetskopior av objekt", + "check_corrupt_asset_backup": "Kontrollera om det finns korrupta resursbackuper", "check_corrupt_asset_backup_button": "Kontrollera", - "check_corrupt_asset_backup_description": "Kör kontrollen endast över Wi-Fi och när alla objekt har säkerhetskopierats. Det kan ta några minuter.", + "check_corrupt_asset_backup_description": "Kör kontrollen endast över Wi-Fi och när alla resurser har säkerhetskopierats. Det kan ta några minuter.", "check_logs": "Kontrollera loggar", "checksum": "Checksumma", "choose_matching_people_to_merge": "Välj matchande personer att slå samman", "city": "Stad", - "cleanup_confirm_description": "Immich hittade {count} material (skapade före {date} som säkerhetskopierats säkert till servern. Ta bort de lokala kopiorna från den här enheten?", + "cleanup_confirm_description": "Immich hittade {count} resurser (skapade före {date}) som säkerhetskopierats säkert till servern. Ta bort de lokala kopiorna från den här enheten?", "cleanup_confirm_prompt_title": "Ta bort från den här enheten?", - "cleanup_deleted_assets": "Flyttade {count} material till enhetens papperskorg", + "cleanup_deleted_assets": "Flyttade {count, plural, one {# resurs} other {# resurser}} till enhetens papperskorg", "cleanup_deleting": "Flyttar till papperskorg...", - "cleanup_found_assets": "Hittade {count} säkerhetskopierade material", + "cleanup_found_assets": "Hittade {count} {count, plural, one {säkerhetskopierad resurs} other {säkerhetskopierade resurser}}", "cleanup_found_assets_with_size": "Hittade {count} säkerhetskopierade objekt ({size})", "cleanup_icloud_shared_albums_excluded": "iCloud delade album exkluderas från skanningen", - "cleanup_no_assets_found": "Inga objekt hittades som matchar kriterierna ovan. Frigör utrymme kan bara ta bort objekt som har säkerhetskopierats till servern", - "cleanup_preview_title": "Material att ta bort {count}", + "cleanup_no_assets_found": "Inga objekt hittades som matchar kriterierna ovan. Frigör Utrymme kan bara ta bort objekt som har säkerhetskopierats till servern", + "cleanup_preview_title": "Resurser att ta bort ({count})", "cleanup_step3_description": "Skanna efter säkerhetskopierade objekt som matchar ditt datum och behåll inställningarna.", "cleanup_step4_summary": "{count} objekt (skapade före {date}) att tas bort från din lokala enhet. Foton kommer att förbli tillgängliga från Immich-appen.", "cleanup_trash_hint": "För att helt frigöra lagringsutrymme, öppna systemgalleriappen och töm papperskorgen", @@ -807,7 +807,7 @@ "completed": "Klar", "confirm": "Bekräfta", "confirm_admin_password": "Bekräfta administratörslösenord", - "confirm_delete_face": "Är du säker på att du vill ta bort {name}'s ansikte från objektet?", + "confirm_delete_face": "Är du säker på att du vill ta bort {name}s ansikte från objektet?", "confirm_delete_shared_link": "Är du säker på att du vill ta bort den här delade länken?", "confirm_keep_this_delete_others": "Alla objekt förutom den här tas bort från högen. Är du säker på att du vill fortsätta?", "confirm_new_pin_code": "Bekräfta ny PIN-kod", @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Fixat", "crop_aspect_ratio_free": "Fritt", "crop_aspect_ratio_original": "Original", + "crop_aspect_ratio_square": "Kvadrat", "curated_object_page_title": "Objekt", "current_device": "Aktuell enhet", "current_pin_code": "Nuvarande PIN-kod", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM, yyyy", "dark": "Mörk", - "dark_theme": "Växla mörkt tema", + "dark_theme": "Växla till mörkt tema", "date": "Datum", "date_after": "Datum efter", "date_and_time": "Datum och Tid", @@ -891,10 +892,8 @@ "day": "Dag", "days": "Dagar", "deduplicate_all": "Deduplicera alla", - "deduplication_criteria_1": "Bildstorlek i bytes", - "deduplication_criteria_2": "Räkning av EXIF-data", - "deduplication_info": "Dedupliceringsinformation", - "deduplication_info_description": "För att automatiskt välja filer och ta bort dubletter i bulk analyserar vi:", + "default_locale": "Standardspråk", + "default_locale_description": "Formatera datum och siffror baserat på din webbläsares språkinställningar", "delete": "Radera", "delete_action_confirmation_message": "Är du säker på att du vill ta bort det här objektet? Den här åtgärden flyttar objektet till serverns papperskorg och frågar om du vill ta bort den lokalt", "delete_action_prompt": "{count} raderade", @@ -923,7 +922,7 @@ "delete_tag_confirmation_prompt": "Är du säker på att du vill ta bort {tagName}-taggen?", "delete_user": "Ta bort användare", "deleted_shared_link": "Ta bort delad länk", - "deletes_missing_assets": "Tar bort objekt som saknas från disken", + "deletes_missing_assets": "Tar bort objekt som saknas på disken", "description": "Beskrivning", "description_input_hint_text": "Lägg till beskrivning...", "description_input_submit_error": "Fel vid uppdatering av beskrivning, se loggen för fler detaljer", @@ -959,18 +958,18 @@ "download_original": "Ladda ner ursprunglig fil", "download_paused": "Nedladdning pausad", "download_settings": "Ladda ner", - "download_settings_description": "Hantera inställningar relaterade till nedladdning av objekt", + "download_settings_description": "Hantera inställningar relaterade till nedladdning av resurser", "download_started": "Nedladdning påbörjad", "download_sucess": "Nedladdning lyckades", "download_sucess_android": "Media har laddats ner till DCIM/Immich", "download_waiting_to_retry": "Väntar på omförsök", "downloading": "Laddar ner", - "downloading_asset_filename": "Laddar ned objekt {filename}", + "downloading_asset_filename": "Laddar ner objekt {filename}", "downloading_from_icloud": "Laddar ner från iCloud", "downloading_media": "Laddar ner media", "drop_files_to_upload": "Släpp filer var som helst för att ladda upp", "duplicates": "Dubletter", - "duplicates_description": "Lös varje grupp genom att ange vilka, om några, är dubbletter", + "duplicates_description": "Lös varje grupp genom att ange vilka, om några, är dubbletter.", "duration": "Varaktighet", "edit": "Redigera", "edit_album": "Redigera album", @@ -1007,6 +1006,8 @@ "editor_edits_applied_success": "Redigeringarna har tillämpats framgångsrikt", "editor_flip_horizontal": "Vänd horisontellt", "editor_flip_vertical": "Vänd vertikalt", + "editor_handle_corner": "{corner, select, top_left {Övre vänstra} top_right {Övre högra} bottom_left {Nedre vänstra} bottom_right {Nedre högra} other {A}} hörn handtag", + "editor_handle_edge": "{edge, select, top {Övre} bottom {Nedre} left {Vänster} right {Höger} other {En}} hörnhandtag", "editor_orientation": "Orientering", "editor_reset_all_changes": "Återställ ändringar", "editor_rotate_left": "Rotera 90° moturs", @@ -1042,8 +1043,8 @@ "cannot_navigate_previous_asset": "Det går inte att navigera till föregående objekt", "cant_apply_changes": "Det går inte att tillämpa ändringar", "cant_change_activity": "Kan inte {enabled, select, true {avaktivera} other {aktivera}} aktivitet", - "cant_change_asset_favorite": "Det går inte att byta favorit mot objekt", - "cant_change_metadata_assets_count": "Det går inte att ändra metadata för {count, plural, one {# asset} other {# assets}}", + "cant_change_asset_favorite": "Det går inte att byta favorit för objekt", + "cant_change_metadata_assets_count": "Det går inte att ändra metadata för {count, plural, one {# resurs} other {# resurser}}", "cant_get_faces": "Kan inte få ansikten", "cant_get_number_of_comments": "Kan inte få antal kommentarer", "cant_search_people": "Kan inte söka efter personer", @@ -1060,7 +1061,7 @@ "failed_to_create_shared_link": "Det gick inte att skapa delad länk", "failed_to_edit_shared_link": "Det gick inte att redigera delad länk", "failed_to_get_people": "Det gick inte att hämta personer", - "failed_to_keep_this_delete_others": "Misslyckades att behålla detta objekt radera övriga objekt", + "failed_to_keep_this_delete_others": "Misslyckades att behålla detta objekt och radera övriga objekt", "failed_to_load_asset": "Det gick inte att ladda objekt", "failed_to_load_assets": "Det gick inte att ladda objekten", "failed_to_load_notifications": "Misslyckades med att ladda notifikationer", @@ -1273,17 +1274,17 @@ "hide_schema": "Göm schema", "hide_text_recognition": "Dölj textigenkänning", "hide_unnamed_people": "Göm personer utan namn", - "home_page_add_to_album_conflicts": "Lade till {added} foton och videor i albumet {album}. {failed} foton och videor finns redan i albumet.", + "home_page_add_to_album_conflicts": "Lade till {added} resurser i albumet {album}. {failed} resurser finns redan i albumet.", "home_page_add_to_album_err_local": "Kan inte lägga till lokala objekt till album ännu, hoppar över", - "home_page_add_to_album_success": "Lade till {added} foton och videor i albumet {album}.", + "home_page_add_to_album_success": "Lade till {added} resurser i albumet {album}.", "home_page_album_err_partner": "Kan inte lägga till partner-objekt till album ännu, hoppar över", "home_page_archive_err_local": "Kan inte arkivera lokala objekt ännu, hoppar över", "home_page_archive_err_partner": "Kan inte arkivera partner-objekt, hoppar över", "home_page_building_timeline": "Bygger tidslinjen", "home_page_delete_err_partner": "Kan inte ta bort partner-objekt, hoppar över", "home_page_delete_remote_err_local": "Lokala objekt i urvalet för att ta bort från servern, hoppar över", - "home_page_favorite_err_local": "Kan inte favorisera lokala objekt ännu, hoppar över", - "home_page_favorite_err_partner": "Kan inte favorisera partner-objekt ännu, hoppar över", + "home_page_favorite_err_local": "Kan inte favoritmarkera lokala objekt ännu, hoppar över", + "home_page_favorite_err_partner": "Kan inte favoritmarkera partner-objekt ännu, hoppar över", "home_page_first_time_notice": "Om det här är första gången du använder appen, välj ett eller flera backup-album så att tidslinjen kan fyllas med foton och videor från albumen", "home_page_locked_error_local": "Kan inte flytta lokala resurser till låst mapp, hoppar över", "home_page_locked_error_partner": "Kan inte flytta partnerresurser till låst mapp, hoppar över", @@ -1321,7 +1322,7 @@ "in_year_selector": "In", "include_archived": "Inkludera arkiverade", "include_shared_albums": "Inkludera delade album", - "include_shared_partner_assets": "Inkludera delade partners objekt", + "include_shared_partner_assets": "Inkludera partnerdelade resurser", "individual_share": "Enskild delning", "individual_shares": "Individuella delningar", "info": "Information", @@ -1385,9 +1386,11 @@ "library_page_sort_title": "Albumtitel", "licenses": "Licenser", "light": "Ljus", + "light_theme": "Ändra till ljust tema", "like": "Gilla", "like_deleted": "Gilla borttagen", "link_motion_video": "Länka rörlig video", + "link_to_docs": "För mer information, se dokumentationen.", "link_to_oauth": "Länk till OAuth", "linked_oauth_account": "Länkat OAuth konto", "list": "Lista", @@ -2392,6 +2395,7 @@ "viewer_remove_from_stack": "Ta bort från Stapeln", "viewer_stack_use_as_main_asset": "Använd som Huvudobjekt", "viewer_unstack": "Stapla Av", + "visibility": "Synlighet", "visibility_changed": "Synlighet ändrad för {count, plural, one {# person} other {# personer}}", "visual": "Visuellt", "visual_builder": "Visuell byggare", diff --git a/i18n/ta.json b/i18n/ta.json index 1f9b981ff3..482be2e993 100644 --- a/i18n/ta.json +++ b/i18n/ta.json @@ -61,8 +61,8 @@ "backup_onboarding_1_description": "மேகம் அல்லது வேறு இடத்தில் நகல்.", "backup_onboarding_2_description": "வெவ்வேறு சாதனங்களில் உள்ள நகல் பிரதிகள். இதில் முக்கிய கோப்புகள் மற்றும் அந்தக் கோப்புகளின் நகல் காப்புப்பிரதி ஆகியவை அடங்கும்.", "backup_onboarding_3_description": "உங்கள் தரவின் மொத்த கோப்புகள் அசல் மற்றும் நகல்கள் உட்பட. இதில் 1 வெளிப்புற நகல் மற்றும் 2 சாதனப் பிரதிகள் அடங்கும்.", - "backup_onboarding_description": "உங்கள் தரவை பாதுகாப்பதற்காக ஒரு 3-2-1 காப்புப் பிரதி பரிந்துரைக்கப்படுகிறது. முழுமையான காப்பு பாதுகாப்பு தீர்விற்காக, நீங்கள் பதிவேற்றிய புகைப்படங்கள்/வீடியோக்கள் மற்றும் Immich தரவுத்தளத்தின் நகல்களையும் வைத்திருக்க வேண்டும்.", - "backup_onboarding_footer": "Immich-ஐ தரவு நகல் காப்பு எடுப்பது பற்றிய மேலும் தகவலுக்கு, தயவுசெய்து ஆவணத்தை பார்க்கவும்.", + "backup_onboarding_description": "உங்கள் தரவைப் பாதுகாப்பதற்காக ஒரு 3-2-1 காப்புப் பிரதி பரிந்துரைக்கப்படுகிறது. முழுமையான காப்பு பாதுகாப்பு தீர்விற்காக, நீங்கள் பதிவேற்றிய புகைப்படங்கள்/வீடியோக்கள் மற்றும் Immich தரவுத்தளத்தின் நகல்களையும் வைத்திருக்க வேண்டும்.", + "backup_onboarding_footer": "இம்மிச்-ஐ தரவு நகல் காப்பு எடுப்பது பற்றிய மேலும் தகவலுக்கு, தயவுசெய்து ஆவணத்தை பார்க்கவும்.", "backup_onboarding_parts_title": "3-2-1 காப்புப்பிரதியில் பின்வருவன அடங்கும்:", "backup_onboarding_title": "காப்புப்பிரதிகள்", "backup_settings": "தரவுத்தள திணிப்பு அமைப்புகள்", @@ -104,6 +104,8 @@ "image_preview_description": "அகற்றப்பட்ட மெட்டாடேட்டாவுடன் நடுத்தர அளவிலான படம், ஒற்றை சொத்தைப் பார்க்கும்போது மற்றும் இயந்திர கற்றலுக்காகப் பயன்படுத்தப்படுகிறது", "image_preview_quality_description": "1-100 முதல் தரத்தை முன்னோட்டமிடுங்கள். உயர்ந்தது சிறந்தது, ஆனால் பெரிய கோப்புகளை உருவாக்குகிறது மற்றும் பயன்பாட்டு மறுமொழியைக் குறைக்கும். குறைந்த மதிப்பை அமைப்பது இயந்திர கற்றல் தரத்தை பாதிக்கலாம்.", "image_preview_title": "அமைப்புகள் முன்னோட்டம்", + "image_progressive": "முற்போக்கானது", + "image_progressive_description": "படிப்படியாக ஏற்றப்படும் காட்சிக்கு JPEG படங்களை படிப்படியாக குறியாக்கம் செய்யவும். இது WebP படங்களில் எந்த விளைவையும் ஏற்படுத்தாது.", "image_quality": "தரம்", "image_resolution": "பகுத்தல்", "image_resolution_description": "அதிக தீர்மானங்கள் அதிக விவரங்களை பாதுகாக்க முடியும், ஆனால் குறியாக்க அதிக நேரம் எடுக்கும், பெரிய கோப்பு அளவுகளைக் கொண்டிருக்கலாம் மற்றும் பயன்பாட்டு மறுமொழியைக் குறைக்கலாம்.", @@ -189,10 +191,20 @@ "machine_learning_smart_search_enabled_description": "முடக்கப்பட்டிருந்தால், ஸ்மார்ட் தேடலுக்காக படங்கள் குறியாக்கம் செய்யப்படாது.", "machine_learning_url_description": "இயந்திர கற்றல் சேவையகத்தின் முகவரி. ஒன்றுக்கு மேற்பட்ட முகவரி வழங்கப்பட்டால், ஒவ்வொரு சேவையகமும் ஒவ்வொன்றாக வெற்றிகரமாக பதிலளிக்கும் வரை, முதலில் இருந்து கடைசி வரை முயற்சிக்கப்படும். பதிலளிக்காத சேவையகங்கள் மீண்டும் ஆன்லைனில் வரும் வரை தற்காலிகமாகப் புறக்கணிக்கப்படும்.", "maintenance_delete_backup": "காப்புக்களை நீக்கவும்", + "maintenance_delete_backup_description": "இந்தக் கோப்பு மீளமுடியாமல் நீக்கப்படும்.", + "maintenance_delete_error": "காப்புப்பிரதியை நீக்க முடியவில்லை.", + "maintenance_restore_backup": "காப்புப்பிரதியை மீட்டமை", + "maintenance_restore_backup_description": "தேர்ந்தெடுக்கப்பட்ட காப்புப்பிரதியிலிருந்து இம்மிச் துடைக்கப்பட்டு மீட்டமைக்கப்படும். தொடர்வதற்கு முன் காப்புப்பிரதி உருவாக்கப்படும்.", + "maintenance_restore_backup_different_version": "இந்த காப்புப்பிரதி இம்மிச்சின் வேறுபட்ட பதிப்பைக் கொண்டு உருவாக்கப்பட்டது!", + "maintenance_restore_backup_unknown_version": "காப்புப் பதிப்பைத் தீர்மானிக்க முடியவில்லை.", + "maintenance_restore_database_backup": "தரவுத்தள காப்புப்பிரதியை மீட்டமைக்கவும்", + "maintenance_restore_database_backup_description": "காப்புப் பிரதி கோப்பைப் பயன்படுத்தி முந்தைய தரவுத்தள நிலைக்கு திரும்பவும்", "maintenance_settings": "பராமரிப்பு", "maintenance_settings_description": "இம்மிச்சை பராமரிப்பு முறையில் வைக்கவும்.", - "maintenance_start": "பராமரிப்பு பயன்முறையைத் தொடங்கு", + "maintenance_start": "பராமரிப்பு முறைக்கு மாறவும்", "maintenance_start_error": "பராமரிப்பு பயன்முறையைத் தொடங்க முடியவில்லை.", + "maintenance_upload_backup": "தரவுத்தள காப்பு கோப்பை பதிவேற்றவும்", + "maintenance_upload_backup_error": "காப்புப்பிரதியைப் பதிவேற்ற முடியவில்லை, இது .sql/.sql.gz கோப்பாகுமா?", "manage_concurrency": "ஒத்திசைவை நிர்வகிக்கவும்", "manage_concurrency_description": "வேலை ஒருங்கிணைவை நிர்வகிக்க வேலைகள் பக்கத்திற்குச் செல்லவும்", "manage_log_settings": "பதிவு அமைப்புகளை நிர்வகிக்கவும்", @@ -206,7 +218,7 @@ "map_reverse_geocoding": "புவி இருப்பிடத்தை தீர்மானித்தல்", "map_reverse_geocoding_enable_description": "புவிஇருப்பிட தீர்மானத்தை செயல்படுத்தவும்", "map_reverse_geocoding_settings": "புவிஇருப்பிடத்தை தீர்மானித்தல் அமைப்புகள்", - "map_settings": "மேப் & ஜிபிஎஸ் (GPS) அமைப்புகள்", + "map_settings": "வரைபடம்", "map_settings_description": "மேப் அமைப்புகளை நிர்வகிக்கவும்", "map_style_description": "style.json மேப் தீமுக்கான URL", "memory_cleanup_job": "நினைவகத்தை சுத்தம் செய்தல்", @@ -260,7 +272,7 @@ "oauth_auto_register": "தானியங்கு பதிவு", "oauth_auto_register_description": "OAuth உடன் உள்நுழைந்த பிறகு தானாகவே புதிய பயனர்களைப் பதிவுசெய்யவும்", "oauth_button_text": "பட்டன் உரை", - "oauth_client_secret_description": "அவசியம், OAuth வழங்குநரால் PKCE (குறியீட்டுப் பரிமாற்றத்திற்கான ஆதார விசை) ஆதரிக்கப்படாவிட்டால்", + "oauth_client_secret_description": "ரகசிய வாடிக்கையாளருக்குத் தேவை, அல்லது பொது கிளையண்டிற்கு PKCE (குறியீட்டு பரிமாற்றத்திற்கான ஆதார விசை) ஆதரிக்கப்படாவிட்டால்.", "oauth_enable_description": "OAuth மூலம் உள்நுழைக", "oauth_mobile_redirect_uri": "மொபைல் வழிமாற்று URI", "oauth_mobile_redirect_uri_override": "மொபைல் வழிமாற்று URI மேலெழுதுதல்", @@ -269,7 +281,7 @@ "oauth_role_claim_description": "இந்தக் கோரிக்கையின் இருப்பின் அடிப்படையில் தானாகவே நிர்வாகி அணுகலை வழங்கவும். கோரிக்கையில் 'பயனர்' அல்லது 'நிர்வாகி' இருக்கலாம்.", "oauth_settings": "ஓஆத்", "oauth_settings_description": "OAuth உள்நுழைவு அமைப்புகளை நிர்வகிக்கவும்", - "oauth_settings_more_details": "இந்த அம்சத்தைப் பற்றிய கூடுதல் விவரங்களுக்கு, டாக்ஸ் ஐப் பார்க்கவும்.", + "oauth_settings_more_details": "இந்த நற்பண்பைப் பற்றிய கூடுதல் விவரங்களுக்கு, ஆவணங்களை ஐப் பார்.", "oauth_storage_label_claim": "சேமிப்பக லேபிள் உரிமைகோரல்", "oauth_storage_label_claim_description": "பயனரின் சேமிப்பக லேபிளை இந்த உரிமைகோரலின் மதிப்புக்கு தானாக அமைக்கவும்.", "oauth_storage_quota_claim": "சேமிப்பக ஒதுக்கீடு உரிமைகோரல்", @@ -285,10 +297,13 @@ "paths_validated_successfully": "அனைத்து பாதைகளும் வெற்றிகரமாக சரிபார்க்கப்பட்டன", "person_cleanup_job": "நபர் தூய்மைப்படுத்துதல்", "queue_details": "வரிசை விவரங்கள்", + "queues": "வேலை வரிசைகள்", + "queues_page_description": "நிர்வாகி வேலை வரிசைகள் பக்கம்", "quota_size_gib": "ஒதுக்கீடு அளவு (GiB)", "refreshing_all_libraries": "அனைத்து நூலகங்களையும் புதுப்பிக்கிறது", "registration": "நிர்வாக பதிவு", "registration_description": "நீங்கள் கணினியில் முதல் பயனராக இருப்பதால், நீங்கள் நிர்வாகியாக நியமிக்கப்படுவீர்கள் மற்றும் நிர்வாகப் பணிகளுக்குப் பொறுப்பாவீர்கள், மேலும் உங்களால் கூடுதல் பயனர்கள் உருவாக்கப்படுவார்கள்.", + "remove_failed_jobs": "தோல்வியுற்ற வேலைகளை அகற்றவும்", "require_password_change_on_login": "முதல் உள்நுழைவில் பயனர் கடவுச்சொல்லை மாற்ற வேண்டும்", "reset_settings_to_default": "அமைப்புகளை இயல்புநிலைக்கு மீட்டமைக்கவும்", "reset_settings_to_recent_saved": "அண்மையில் சேமிக்கப்பட்ட அமைப்புகளுக்கு அமைப்புகளை மீட்டமைக்கவும்", @@ -296,7 +311,7 @@ "search_jobs": "வேலைகளைத் தேடுங்கள்…", "send_welcome_email": "வரவேற்பு மின்னஞ்சலை அனுப்பவும்", "server_external_domain_settings": "வெளிப்புற களம்", - "server_external_domain_settings_description": "HTTP (கள்) உட்பட பொது பகிரப்பட்ட இணைப்புகளுக்கான டொமைன்: //", + "server_external_domain_settings_description": "வெளிப்புற இணைப்புகளுக்கு டொமைன் பயன்படுத்தப்படுகிறது", "server_public_users": "பொது பயனர்கள்", "server_public_users_description": "பகிரப்பட்ட ஆல்பங்களில் பயனரைச் சேர்க்கும்போது அனைத்து பயனர்களும் (பெயர் மற்றும் மின்னஞ்சல்) பட்டியலிடப்பட்டுள்ளன. முடக்கப்பட்டால், பயனர் பட்டியல் நிர்வாக பயனர்களுக்கு மட்டுமே கிடைக்கும்.", "server_settings": "சேவையக அமைப்புகள்", @@ -318,8 +333,8 @@ "storage_template_migration_description": "ஏற்கனவே பதிவேற்றிய புகைப்படங்களுக்கு தற்போதைய {template} ஐப் பயன்படுத்தவும்", "storage_template_migration_info": "சேமிப்பக வார்ப்புரு அனைத்து நீட்டிப்புகளையும் சிறிய எழுத்துக்களுக்கு மாற்றும். டெம்ப்ளேட் மாற்றங்கள் புதிய படங்களுக்கு மட்டுமே பொருந்தும். முன்பு பதிவேற்றிய படங்களுக்கு டெம்ப்ளேட்டைப் பயன்படுத்த, {job} ஐ இயக்கவும்.", "storage_template_migration_job": "ஸ்டோரேஜ் டெம்ப்ளேட் இடம்பெயர்வு வேலை", - "storage_template_more_details": "இந்த அம்சத்தைப் பற்றிய கூடுதல் விவரங்களுக்கு, Storage Template மற்றும் அதன் தாக்கங்கள் ஐப் பார்க்கவும்", - "storage_template_onboarding_description_v2": "இயக்கப்பட்டால், இந்த அம்சம் பயனர் வரையறுக்கப்பட்ட டெம்ப்ளேட்டின் அடிப்படையில் கோப்புகளை தானாக ஒழுங்கமைக்கும். மேலும் தகவலுக்கு, ஆவணங்கள் ஐப் பார்க்கவும்.", + "storage_template_more_details": "இந்த நற்பண்பைப் பற்றிய கூடுதல் விவரங்களுக்கு, Storage Template மற்றும் அதன் தாக்கங்கள் ஐப் பார்க்கவும்", + "storage_template_onboarding_description_v2": "இயக்கப்பட்டால், இந்த நற்பண்பைப் பயனர் வரையறுக்கப்பட்ட டெம்ப்ளேட்டின் அடிப்படையில் கோப்புகளைத் தானாக ஒழுங்கமைக்கும். மேலும் தகவலுக்கு, ஆவணங்கள் ஐப் பார்.", "storage_template_path_length": "தோராயமான பாதை நீள வரம்பு: {length, number}/{limit, number}", "storage_template_settings": "ஸ்டோரேஜ் டெம்ப்ளேட்", "storage_template_settings_description": "பதிவேற்ற புகைப்படங்களின் கோப்புறை அமைப்பு மற்றும் கோப்பு பெயரை நிர்வகிக்கவும்", @@ -336,7 +351,7 @@ "template_settings": "அறிவிப்பு வார்ப்புருக்கள்", "template_settings_description": "அறிவிப்புகளுக்கு தனிப்பயன் வார்ப்புருக்கள் நிர்வகிக்கவும்", "theme_custom_css_settings": "தனிப்பயன் CSS", - "theme_custom_css_settings_description": "CSS அம்சம் Immich வடிவமைப்பை தனிப்பயனாக்க அனுமதிக்கிறது.", + "theme_custom_css_settings_description": "அடுக்கு நடை தாள்கள் நற்பண்பைப் இம்மிச் வடிவமைப்பைத் தனிப்பயனாக்க அனுமதிக்கிறது.", "theme_settings": "தீம் அமைப்புகள்", "theme_settings_description": "இம்மிச் வலை இடைமுகத்தின் தனிப்பயனாக்கத்தை நிர்வகிக்கவும்", "thumbnail_generation_job": "சிறுபடங்களை உருவாக்கவும்", @@ -396,7 +411,7 @@ "transcoding_tone_mapping": "தொனி-மேப்பிங்", "transcoding_tone_mapping_description": "எச்.டி.ஆராக மாற்றப்படும்போது எச்.டி.ஆர் வீடியோக்களின் தோற்றத்தை பாதுகாக்க முயற்சிகள். ஒவ்வொரு வழிமுறையும் வண்ணம், விவரம் மற்றும் பிரகாசத்திற்கு வெவ்வேறு பரிமாற்றங்களை உருவாக்குகிறது. அபிள் விவரங்களை பாதுகாக்கிறார், மொபியச் நிறத்தை பாதுகாக்கிறார், மற்றும் ரெய்ன்ஆர்ட் பிரகாசத்தை பாதுகாக்கிறார்.", "transcoding_transcode_policy": "டிரான்ச்கோட் கொள்கை", - "transcoding_transcode_policy_description": "ஒரு வீடியோ எப்போது மாற்றப்பட வேண்டும் என்பதற்கான கொள்கை. எச்.டி.ஆர் வீடியோக்கள் எப்போதும் டிரான்ச்கோட் செய்யப்படும் (டிரான்ச்கோடிங் முடக்கப்பட்டிருந்தால் தவிர).", + "transcoding_transcode_policy_description": "வீடியோ எப்போது டிரான்ச்கோட் செய்யப்பட வேண்டும் என்பதற்கான கொள்கை. HDR வீடியோ மற்றும் YUV 4:2:0 தவிர வேறு படப்புள்ளி வடிவத்துடன் கூடிய வீடியோக்கள் எப்பொழுதும் டிரான்ச்கோட் செய்யப்படும் (டிரான்ச்கோடிங் முடக்கப்பட்டிருந்தால் தவிர).", "transcoding_two_pass_encoding": "இரண்டு-பாச் குறியாக்கம்", "transcoding_two_pass_encoding_setting_description": "சிறந்த குறியாக்கப்பட்ட வீடியோக்களை உருவாக்க இரண்டு பாச்களில் டிரான்ச்கோட். மேக்ச் பிட்ரேட் இயக்கப்பட்டிருக்கும்போது (H.264 மற்றும் HEVC உடன் வேலை செய்ய இது தேவைப்படுகிறது), இந்த பயன்முறை அதிகபட்ச பிட்ரேட்டை அடிப்படையாகக் கொண்ட பிட்ரேட் வரம்பைப் பயன்படுத்துகிறது மற்றும் CRF ஐ புறக்கணிக்கிறது. VP9 ஐப் பொறுத்தவரை, அதிகபட்ச பிட்ரேட் முடக்கப்பட்டிருந்தால் CRF ஐப் பயன்படுத்தலாம்.", "transcoding_video_codec": "வீடியோ கோடெக்", @@ -413,7 +428,7 @@ "user_delete_delay": "{user}இன் கணக்கு மற்றும் சொத்துக்கள் {delay, plural, one {# நாள்} other {# நாள்கள்}}இல் நிரந்தர நீக்கத் திட்டமிடப்படும்.", "user_delete_delay_settings": "தாமதத்தை நீக்கு", "user_delete_delay_settings_description": "எண் of days after நீக்கும் பெறுநர் permanently நீக்கு a user's account and assets. நீக்குவதற்கு தயாராக இருக்கும் பயனர்களைச் சரிபார்க்க பயனர் நீக்குதல் வேலை நள்ளிரவில் இயங்குகிறது. இந்த அமைப்பில் மாற்றங்கள் அடுத்த மரணதண்டனையில் மதிப்பீடு செய்யப்படும்.", - "user_delete_immediately": " {user} இன் கணக்கு மற்றும் சொத்துக்கள் நிரந்தர நீக்குதலுக்காக வரிசையில் நிற்கப்படும் உடனடியாக .", + "user_delete_immediately": "{user} இன் கணக்கு மற்றும் சொத்துக்கள் நிரந்தர நீக்குதலுக்காக வரிசையில் நிற்கப்படும் உடனடியாக.", "user_delete_immediately_checkbox": "உடனடியாக நீக்க பயனர் மற்றும் சொத்துக்கள்", "user_details": "பயனர் விவரங்கள்", "user_management": "பயனர் மேலாண்மை", @@ -436,6 +451,9 @@ "admin_password": "நிர்வாகி கடவுச்சொல்", "administration": "நிர்வாகம்", "advanced": "மேம்பட்ட", + "advanced_settings_clear_image_cache": "படத்தை தற்காலிக சேமிப்பை அழிக்கவும்", + "advanced_settings_clear_image_cache_error": "படத்தின் தற்காலிக சேமிப்பை அழிக்க முடியவில்லை", + "advanced_settings_clear_image_cache_success": "{size} வெற்றிகரமாக அழிக்கப்பட்டது", "advanced_settings_enable_alternate_media_filter_subtitle": "மாற்று அளவுகோல்களின் அடிப்படையில் ஒத்திசைவின் போது மீடியாவை வடிகட்ட இந்த விருப்பத்தைப் பயன்படுத்தவும். எல்லா ஆல்பங்களையும் ஆப்ஸ் கண்டறிவதில் சிக்கல்கள் இருந்தால் மட்டுமே இதை முயற்சிக்கவும்.", "advanced_settings_enable_alternate_media_filter_title": "[பரிசோதனைக்கு உட்பட்டது] மாற்று சாதன ஆல்ப ஒத்திசைவு வடிப்பானைப் பயன்படுத்தவும்", "advanced_settings_log_level_title": "பதிவு நிலை: {level}", @@ -472,10 +490,12 @@ "album_remove_user": "பயனரை அகற்றவா?", "album_remove_user_confirmation": "{user} ஐ அகற்ற விரும்புகிறீர்களா?", "album_search_not_found": "உங்கள் தேடலுடன் பொருந்தக்கூடிய ஆல்பங்கள் எதுவும் இல்லை", + "album_selected": "ஆல்பம் தேர்ந்தெடுக்கப்பட்டது", "album_share_no_users": "இந்த ஆல்பத்தை நீங்கள் எல்லா பயனர்களுடனும் பகிர்ந்து கொண்டதாகத் தெரிகிறது அல்லது பகிர்வதற்கு உங்களிடம் எந்த பயனரும் இல்லை.", "album_summary": "ஆல்பம் சுருக்கம்", "album_updated": "ஆல்பம் புதுப்பிக்கப்பட்டது", "album_updated_setting_description": "பகிரப்பட்ட ஆல்பத்தில் புதிய சொத்துக்கள் இருக்கும்போது மின்னஞ்சல் அறிவிப்பைப் பெறுங்கள்", + "album_upload_assets": "உங்கள் கணினியிலிருந்து சொத்துகளைப் பதிவேற்றி ஆல்பத்தில் சேர்க்கவும்", "album_user_left": "இடது {album}", "album_user_removed": "அகற்றப்பட்டது {user}", "album_viewer_appbar_delete_confirm": "இந்த ஆல்பத்தை உங்கள் கணக்கிலிருந்து நீக்க விரும்புகிறீர்களா?", @@ -493,9 +513,11 @@ "albums_default_sort_order_description": "புதிய ஆல்பங்களை உருவாக்கும்போது ஆரம்ப சொத்து வரிசைப்படுத்தல் வரிசை.", "albums_feature_description": "பிற பயனர்களுடன் பகிர்ந்து கொள்ளக்கூடிய சொத்துக்களின் தொகுப்புகள்.", "albums_on_device_count": "சாதனத்தில் ஆல்பங்கள் ({count})", + "albums_selected": "{count, plural, one {# ஆல்பம் தேர்ந்தெடுக்கப்பட்டது} other {# ஆல்பங்கள் தேர்ந்தெடுக்கப்பட்டன}}", "all": "அனைத்தும்", "all_albums": "அனைத்து ஆல்பங்களும்", "all_people": "அனைத்து மக்களும்", + "all_photos": "அனைத்து புகைப்படங்களும்", "all_videos": "அனைத்து வீடியோக்களும்", "allow_dark_mode": "இருண்ட பயன்முறையை அனுமதிக்கவும்", "allow_edits": "திருத்தங்களை அனுமதிக்கவும்", @@ -503,6 +525,9 @@ "allow_public_user_to_upload": "பொது பயனரை பதிவேற்ற அனுமதிக்கவும்", "allowed": "அனுமதித்த", "alt_text_qr_code": "QR குறியீடு படம்", + "always_keep": "எப்போதும் வைத்திருங்கள்", + "always_keep_photos_hint": "இந்தச் சாதனத்தில் உள்ள எல்லாப் படங்களையும் காலியாக்குங்கள்.", + "always_keep_videos_hint": "இந்தச் சாதனத்தில் எல்லா வீடியோக்களையும் காலியாக்கும்.", "anti_clockwise": "கடிகார எதிர்ப்பு", "api_key": "பநிஇ விசை", "api_key_description": "இந்த மதிப்பு ஒரு முறை மட்டுமே காண்பிக்கப்படும். சாளரத்தை மூடுவதற்கு முன் அதை நகலெடுக்க மறக்காதீர்கள்.", @@ -529,10 +554,12 @@ "archived_count": "{count, plural, other {காப்பகப்படுத்தப்பட்டது #}}", "are_these_the_same_person": "இவர்கள் ஒரே நபரா?", "are_you_sure_to_do_this": "இதை நீங்கள் செய்ய விரும்புகிறீர்களா?", + "array_field_not_fully_supported": "வரிசை புலங்களுக்கு கைமுறையாக சாதொபொகு திருத்தம் தேவை", "asset_action_delete_err_read_only": "சொத்து (களை) மட்டுமே படிக்க முடியாது", "asset_action_share_err_offline": "இணைப்பில்லாத சொத்து (களை) பெற முடியாது, தவிர்க்கவும்", "asset_added_to_album": "ஆல்பத்தில் சேர்க்கப்பட்டது", "asset_adding_to_album": "ஆல்பத்தில் சேர்க்கிறது…", + "asset_created": "சொத்து உருவாக்கப்பட்டது", "asset_description_updated": "சொத்து விளக்கம் புதுப்பிக்கப்பட்டுள்ளது", "asset_filename_is_offline": "சொத்து {filename} ஆஃப்லைனில் உள்ளது", "asset_has_unassigned_faces": "சொத்து ஒதுக்கப்படாத முகங்களைக் கொண்டுள்ளது", @@ -545,6 +572,9 @@ "asset_list_layout_sub_title": "மனையமைவு", "asset_list_settings_subtitle": "புகைப்பட கட்டம் தளவமைப்பு அமைப்புகள்", "asset_list_settings_title": "புகைப்பட கட்டம்", + "asset_not_found_on_device_android": "சாதனத்தில் சொத்து இல்லை", + "asset_not_found_on_device_ios": "சாதனத்தில் சொத்து இல்லை. நீங்கள் iCloud ஐப் பயன்படுத்துகிறீர்கள் எனில், iCloud இல் சேமிக்கப்பட்டுள்ள மோசமான கோப்பு காரணமாக சொத்தை அணுக முடியாமல் போகலாம்", + "asset_not_found_on_icloud": "iCloud இல் சொத்து காணப்படவில்லை. iCloud இல் சேமிக்கப்பட்டுள்ள மோசமான கோப்பு காரணமாக சொத்து அணுக முடியாததாக இருக்கலாம்", "asset_offline": "சொத்து ஆஃப்லைனில்", "asset_offline_description": "இந்த வெளிப்புற சொத்து இனி வட்டில் காணப்படவில்லை. உதவிக்கு உங்கள் இம்மிச் நிர்வாகியை தொடர்பு கொள்ளவும்.", "asset_restored_successfully": "சொத்து வெற்றிகரமாக மீட்டெடுக்கப்பட்டது", @@ -596,7 +626,7 @@ "backup_album_selection_page_select_albums": "ஆல்பங்களைத் தேர்ந்தெடுக்கவும்", "backup_album_selection_page_selection_info": "தேர்வு செய்தி", "backup_album_selection_page_total_assets": "மொத்த தனித்துவமான சொத்துக்கள்", - "backup_albums_sync": "காப்புப்பிரதி ஆல்பங்கள் ஒத்திசைவு", + "backup_albums_sync": "காப்பு ஆல்பங்கள் ஒத்திசைவு", "backup_all": "அனைத்தும்", "backup_background_service_backup_failed_message": "சொத்துக்களை காப்புப்பிரதி எடுக்கத் தவறிவிட்டது. மீண்டும் முயற்சிப்பது…", "backup_background_service_complete_notification": "சொத்து காப்புப்பிரதி முடிந்தது", @@ -657,6 +687,7 @@ "backup_options_page_title": "காப்பு விருப்பங்கள்", "backup_setting_subtitle": "பின்னணி மற்றும் முன்புற பதிவேற்ற அமைப்புகளை நிர்வகிக்கவும்", "backup_settings_subtitle": "பதிவேற்ற அமைப்புகளை நிர்வகிக்கவும்", + "backup_upload_details_page_more_details": "மேலும் விவரங்களுக்கு தட்டவும்", "backward": "பின்னோக்கு", "biometric_auth_enabled": "பயோமெட்ரிக் ஏற்பு இயக்கப்பட்டது", "biometric_locked_out": "நீங்கள் பயோமெட்ரிக் அங்கீகாரத்திலிருந்து பூட்டப்பட்டிருக்கிறீர்கள்", @@ -715,6 +746,8 @@ "change_password_form_password_mismatch": "கடவுச்சொற்கள் பொருந்தவில்லை", "change_password_form_reenter_new_password": "புதிய கடவுச்சொல்லை மீண்டும் உள்ளிடவும்", "change_pin_code": "முள் குறியீட்டை மாற்றவும்", + "change_trigger": "தூண்டுதலை மாற்றவும்", + "change_trigger_prompt": "தூண்டுதலை நிச்சயமாக மாற்ற விரும்புகிறீர்களா? இது ஏற்கனவே உள்ள அனைத்து செயல்களையும் வடிப்பான்களையும் அகற்றும்.", "change_your_password": "உங்கள் கடவுச்சொல்லை மாற்றவும்", "changed_visibility_successfully": "தெரிவுநிலை வெற்றிகரமாக மாற்றப்பட்டது", "charging": "சார்சிங்", @@ -723,8 +756,21 @@ "check_corrupt_asset_backup_button": "காசோலை செய்யுங்கள்", "check_corrupt_asset_backup_description": "இந்த காசோலையை வைஃபை மீது மட்டுமே இயக்கவும், அனைத்து சொத்துக்களும் காப்புப் பிரதி எடுக்கப்பட்டவுடன். செயல்முறை சில நிமிடங்கள் ஆகலாம்.", "check_logs": "பதிவுகளை சரிபார்க்கவும்", + "checksum": "செக்சம்", "choose_matching_people_to_merge": "ஒன்றிணைக்க பொருந்தக்கூடிய நபர்களைத் தேர்வுசெய்க", "city": "நகரம்", + "cleanup_confirm_description": "இம்மிச் {count} சொத்துக்களை ({date} க்கு முன் உருவாக்கப்பட்டது) பாதுகாப்பாக சர்வரில் காப்புப் பிரதி எடுத்துள்ளார். இந்தச் சாதனத்திலிருந்து உள்ளக நகல்களை அகற்றவா?", + "cleanup_confirm_prompt_title": "இந்தச் சாதனத்திலிருந்து அகற்றவா?", + "cleanup_deleted_assets": "{count} சொத்துக்கள் சாதனத்தின் குப்பைக்கு நகர்த்தப்பட்டன", + "cleanup_deleting": "குப்பைக்கு நகர்கிறது...", + "cleanup_found_assets": "காப்புப் பிரதி எடுக்கப்பட்ட சொத்துகள் {count} கண்டறியப்பட்டன", + "cleanup_found_assets_with_size": "{count} காப்புப் பிரதி எடுக்கப்பட்ட சொத்துகள் ({size}) கண்டறியப்பட்டன", + "cleanup_icloud_shared_albums_excluded": "iCloud பகிரப்பட்ட ஆல்பங்கள் வருடு செய்வதிலிருந்து விலக்கப்பட்டுள்ளன", + "cleanup_no_assets_found": "மேலே உள்ள அளவுகோல்களுடன் பொருந்தக்கூடிய சொத்துக்கள் எதுவும் இல்லை. இடத்தைக் காலியாக்கினால், சர்வரில் காப்புப் பிரதி எடுக்கப்பட்ட சொத்துக்களை மட்டுமே அகற்ற முடியும்", + "cleanup_preview_title": "அகற்ற வேண்டிய சொத்துக்கள் ({count})", + "cleanup_step3_description": "உங்கள் தேதியுடன் பொருந்தக்கூடிய காப்புப்பிரதி சொத்துக்களை வருடு செய்து அமைப்புகளை வைத்திருங்கள்.", + "cleanup_step4_summary": "உங்கள் உள்ளக சாதனத்திலிருந்து அகற்ற {count} சொத்துக்கள் ({date}க்கு முன் உருவாக்கப்பட்டது). இம்மிச் பயன்பாட்டிலிருந்து படங்களை அணுக முடியும்.", + "cleanup_trash_hint": "சேமிப்பக இடத்தை முழுமையாக மீட்டெடுக்க, சிச்டம் கேலரி பயன்பாட்டைத் திறந்து குப்பையை வெறுமை செய்யவும்", "clear": "தெளிவான", "clear_all": "அனைத்தையும் அழிக்கவும்", "clear_all_recent_searches": "அண்மைக் கால அனைத்து தேடல்களையும் அழிக்கவும்", @@ -736,6 +782,8 @@ "client_cert_import": "இறக்குமதி", "client_cert_import_success_msg": "கிளையன்ட் சான்றிதழ் இறக்குமதி செய்யப்படுகிறது", "client_cert_invalid_msg": "தவறான சான்றிதழ் கோப்பு அல்லது தவறான கடவுச்சொல்", + "client_cert_password_message": "இந்த சான்றிதழுக்கான கடவுச்சொல்லை உள்ளிடவும்", + "client_cert_password_title": "சான்றிதழ் கடவுச்சொல்", "client_cert_remove_msg": "கிளையன்ட் சான்றிதழ் அகற்றப்பட்டது", "client_cert_subtitle": "PKCS12 (.p12, .pfx) வடிவமைப்பை மட்டுமே ஆதரிக்கிறது. உள்நுழைவதற்கு முன் மட்டுமே சான்றிதழ் இறக்குமதி/அகற்றுதல் கிடைக்கும்", "client_cert_title": "SSL கிளையன்ட் சான்றிதழ் [பரிசோதனை]", @@ -746,6 +794,11 @@ "color": "நிறம்", "color_theme": "வண்ண கருப்பொருள்", "command": "கட்டளை", + "command_palette_prompt": "பக்கங்கள், செயல்கள் அல்லது கட்டளைகளை விரைவாகக் கண்டறியவும்", + "command_palette_to_close": "மூடுவதற்கு", + "command_palette_to_navigate": "நுழைய", + "command_palette_to_select": "தேர்ந்தெடுக்க", + "command_palette_to_show_all": "அனைத்தையும் காட்ட", "comment_deleted": "கருத்து நீக்கப்பட்டது", "comment_options": "கருத்து விருப்பங்கள்", "comments_and_likes": "கருத்துகள் மற்றும் விருப்பங்கள்", @@ -790,6 +843,7 @@ "create_album": "ஆல்பத்தை உருவாக்கவும்", "create_album_page_untitled": "தலைப்பிடப்படாத", "create_api_key": "பநிஇ விசையை உருவாக்கவும்", + "create_first_workflow": "முதல் பணிப்பாய்வு உருவாக்கவும்", "create_library": "நூலகத்தை உருவாக்கவும்", "create_link": "இணைப்பை உருவாக்கவும்", "create_link_to_share": "பகிர்வுக்கு இணைப்பை உருவாக்கவும்", @@ -804,17 +858,25 @@ "create_tag": "குறிச்சொல்லை உருவாக்கவும்", "create_tag_description": "புதிய குறிச்சொல்லை உருவாக்கவும். உள்ளமைக்கப்பட்ட குறிச்சொற்களுக்கு, முன்னோக்கி ச்லாச்கள் உட்பட குறிச்சொல்லின் முழு பாதையையும் உள்ளிடவும்.", "create_user": "பயனரை உருவாக்கு", + "create_workflow": "பணிப்பாய்வு உருவாக்கவும்", "created": "உருவாக்கப்பட்டது", "created_at": "உருவாக்கப்பட்டது", "creating_linked_albums": "இணைக்கப்பட்ட ஆல்பங்களை உருவாக்குதல் ...", "crop": "பயிர்", + "crop_aspect_ratio_fixed": "சரி செய்யப்பட்டது", + "crop_aspect_ratio_free": "இலவசம்", + "crop_aspect_ratio_original": "அசல்", "curated_object_page_title": "விசயங்கள்", "current_device": "தற்போதைய சாதனம்", "current_pin_code": "தற்போதைய முள் குறியீடு", "current_server_address": "தற்போதைய சேவையக முகவரி", - "custom_locale": "தனிப்பயன் இடம்", - "custom_locale_description": "மொழி மற்றும் பிராந்தியத்தின் அடிப்படையில் வடிவமைப்பு தேதிகள் மற்றும் எண்கள்", + "custom_date": "விருப்ப தேதி", + "custom_locale": "தனிப்பயன் மொழி", + "custom_locale_description": "தேர்ந்தெடுக்கப்பட்ட மொழி மற்றும் பிராந்தியத்தின் அடிப்படையில் தேதிகள், நேரம் மற்றும் எண்களை வடிவமைக்கவும்", "custom_url": "தனிப்பயன் முகவரி", + "cutoff_date_description": "கடைசி புகைப்படங்களை வைத்திருங்கள்…", + "cutoff_day": "{count, plural, one {நாள்} other {நாள்கள்}}", + "cutoff_year": "{count, plural, one {ஆண்டு} other {ஆண்டுகள்}}", "daily_title_text_date": "E, mmm dd", "daily_title_text_date_year": "E, mmm dd, yyyy", "dark": "இருண்ட", @@ -829,10 +891,6 @@ "day": "நாள்", "days": "நாட்கள்", "deduplicate_all": "அனைத்தையும் கழித்தல்", - "deduplication_criteria_1": "பைட்டுகளில் பட அளவு", - "deduplication_criteria_2": "EXIF தரவின் எண்ணிக்கை", - "deduplication_info": "கழித்தல் செய்தி", - "deduplication_info_description": "சொத்துக்களை தானாக முன்னெடுத்துச் செல்லவும், மொத்தமாக நகல்களை அகற்றவும், நாங்கள் பார்க்கிறோம்:", "delete": "நீக்கு", "delete_action_confirmation_message": "இந்த சொத்தை நீக்க விரும்புகிறீர்களா? இந்த நடவடிக்கை சொத்தை சேவையகத்தின் குப்பைக்கு நகர்த்தும், மேலும் நீங்கள் அதை உள்நாட்டில் நீக்க விரும்பினால் கேட்கும்", "delete_action_prompt": "{count} நீக்கப்பட்டது", @@ -868,6 +926,7 @@ "deselect_all": "அனைத்தையும் தேர்வு செய்யுங்கள்", "details": "விவரங்கள்", "direction": "திசை", + "disable": "முடக்கு", "disabled": "முடக்கப்பட்டது", "disallow_edits": "திருத்தங்களை அனுமதிக்கவும்", "discord": "முரண்பாடு", @@ -893,6 +952,7 @@ "download_include_embedded_motion_videos": "உட்பொதிக்கப்பட்ட வீடியோக்கள்", "download_include_embedded_motion_videos_description": "மோசன் புகைப்படங்களில் உட்பொதிக்கப்பட்ட வீடியோக்களை தனி கோப்பாக சேர்க்கவும்", "download_notfound": "பதிவிறக்கம் கிடைக்கவில்லை", + "download_original": "அசல் பதிவிறக்க", "download_paused": "இடைநிறுத்தப்பட்டது", "download_settings": "பதிவிறக்கம்", "download_settings_description": "சொத்து பதிவிறக்கம் தொடர்பான அமைப்புகளை நிர்வகிக்கவும்", @@ -902,6 +962,7 @@ "download_waiting_to_retry": "மீண்டும் முயற்சிக்க காத்திருக்கிறது", "downloading": "பதிவிறக்குகிறது", "downloading_asset_filename": "சொத்து பதிவிறக்கம் {filename}", + "downloading_from_icloud": "iCloud இலிருந்து பதிவிறக்குகிறது", "downloading_media": "ஊடகங்களைப் பதிவிறக்குகிறது", "drop_files_to_upload": "பதிவேற்ற எங்கும் கோப்புகளை விடுங்கள்", "duplicates": "நகல்கள்", @@ -930,9 +991,24 @@ "edit_tag": "குறிச்சொல்லைத் திருத்து", "edit_title": "தலைப்பைத் திருத்து", "edit_user": "பயனரைத் திருத்து", + "edit_workflow": "பணிப்பாய்வுகளைத் திருத்தவும்", "editor": "திருத்தி", "editor_close_without_save_prompt": "மாற்றங்கள் சேமிக்கப்படாது", "editor_close_without_save_title": "மூடு ஆசிரியர்?", + "editor_confirm_reset_all_changes": "எல்லா மாற்றங்களையும் மீட்டமைக்க விரும்புகிறீர்களா?", + "editor_discard_edits_confirm": "திருத்தங்களை நிராகரிக்கவும்", + "editor_discard_edits_prompt": "உங்களிடம் சேமிக்கப்படாத திருத்தங்கள் உள்ளன. நீங்கள் நிச்சயமாக அவற்றை நிராகரிக்க விரும்புகிறீர்களா?", + "editor_discard_edits_title": "திருத்தங்களை நிராகரிக்கவா?", + "editor_edits_applied_error": "திருத்தங்களைப் பயன்படுத்துவதில் தோல்வி", + "editor_edits_applied_success": "திருத்தங்கள் வெற்றிகரமாகப் பயன்படுத்தப்பட்டன", + "editor_flip_horizontal": "கிடைமட்டமாக புரட்டவும்", + "editor_flip_vertical": "செங்குத்தாக புரட்டவும்", + "editor_handle_corner": "{corner, select, top_left {மேல்-இடது} top_right {மேல்-வலது} bottom_left {கீழ்-இடது} bottom_right {கீழ்-வலது} other {ஒரு}} மூலை கைப்பிடி", + "editor_handle_edge": "{edge, select, top {மேலே} bottom {கீழே} left {இடது} right {வலது} other {ஒரு}} விளிம்பு கைப்பிடி", + "editor_orientation": "நோக்குநிலை", + "editor_reset_all_changes": "மாற்றங்களை மீட்டமைக்கவும்", + "editor_rotate_left": "எதிரெதிர் திசையில் 90° சுழற்று", + "editor_rotate_right": "கடிகார திசையில் 90° சுழற்று", "email": "மின்னஞ்சல்", "email_notifications": "மின்னஞ்சல் அறிவிப்புகள்", "empty_folder": "இந்த கோப்புறை காலியாக உள்ளது", @@ -951,11 +1027,14 @@ "error_change_sort_album": "ஆல்பம் வரிசை வரிசையை மாற்றத் தவறிவிட்டது", "error_delete_face": "சொத்தில் இருந்து முகத்தை நீக்குவதில் பிழை", "error_getting_places": "இடங்களைப் பெறுவதில் பிழை", + "error_loading_albums": "ஆல்பங்களை ஏற்றுவதில் பிழை", "error_loading_image": "படத்தை ஏற்றுவதில் பிழை", "error_loading_partners": "கூட்டாளர்களை ஏற்றுவதில் பிழை: {error}", + "error_retrieving_asset_information": "சொத்து தகவலை மீட்டெடுப்பதில் பிழை", "error_saving_image": "பிழை: {error}", "error_tag_face_bounding_box": "முகத்தை குறிக்கவும் பிழை - எல்லை பெட்டி ஆயத்தொலைவுகளைப் பெற முடியாது", "error_title": "பிழை - ஏதோ தவறு நடந்தது", + "error_while_navigating": "சொத்துக்கு செல்லும்போது பிழை", "errors": { "cannot_navigate_next_asset": "அடுத்த சொத்துக்கு செல்ல முடியாது", "cannot_navigate_previous_asset": "முந்தைய சொத்துக்கு செல்ல முடியாது", @@ -991,6 +1070,7 @@ "failed_to_update_notification_status": "அறிவிப்பு நிலையைப் புதுப்பிக்கத் தவறிவிட்டது", "incorrect_email_or_password": "தவறான மின்னஞ்சல் அல்லது கடவுச்சொல்", "library_folder_already_exists": "இந்த இறக்குமதி பாதை ஏற்கனவே பயன்பாட்டில் உள்ளது.", + "page_not_found": "பக்கம் கிடைக்கவில்லை", "paths_validation_failed": "தோல்வியுற்ற சரிபார்ப்பு {paths, plural, one {# பாதை} other {# பாதைகள்}}", "profile_picture_transparent_pixels": "சுயவிவரப் படங்களுக்கு வெளிப்படையான படப்புள்ளிகள் இருக்க முடியாது. தயவுசெய்து பெரிதாக்கவும்/அல்லது படத்தை நகர்த்தவும்.", "quota_higher_than_disk_size": "வட்டு அளவை விட அதிகமாக ஒதுக்கீட்டை அமைத்துள்ளீர்கள்", @@ -1012,7 +1092,8 @@ "unable_to_change_visibility": "{count, plural, one {# நபர்} other {# பேர்}}க்கான தெரிவுநிலையை மாற்ற முடியவில்லை", "unable_to_complete_oauth_login": "OAuth உள்நுழைவை முடிக்க முடியவில்லை", "unable_to_connect": "இணைக்க முடியவில்லை", - "unable_to_copy_to_clipboard": "இடைநிலைப்பலகைக்கு நகலெடுக்க முடியாது, நீங்கள் HTTPS மூலம் பக்கத்தை அணுகுகிறீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்", + "unable_to_copy_to_clipboard": "இடைநிலைப்பலகைக்கு நகலெடுக்க முடியாது, நீங்கள் உஉபநெப மூலம் பக்கத்தை அணுகுகிறீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்", + "unable_to_create": "பணிப்பாய்வுகளை உருவாக்க முடியவில்லை", "unable_to_create_admin_account": "நிர்வாக கணக்கை உருவாக்க முடியவில்லை", "unable_to_create_api_key": "புதிய பநிஇ விசையை உருவாக்க முடியவில்லை", "unable_to_create_library": "நூலகத்தை உருவாக்க முடியவில்லை", @@ -1023,6 +1104,7 @@ "unable_to_delete_exclusion_pattern": "விலக்கு முறையை நீக்க முடியவில்லை", "unable_to_delete_shared_link": "பகிரப்பட்ட இணைப்பை நீக்க முடியவில்லை", "unable_to_delete_user": "பயனரை நீக்க முடியவில்லை", + "unable_to_delete_workflow": "பணிப்பாய்வுகளை நீக்க முடியவில்லை", "unable_to_download_files": "கோப்புகளைப் பதிவிறக்க முடியவில்லை", "unable_to_edit_exclusion_pattern": "விலக்கு முறையைத் திருத்த முடியவில்லை", "unable_to_empty_trash": "குப்பைகளை வெற்று செய்ய முடியவில்லை", @@ -1062,6 +1144,7 @@ "unable_to_scan_library": "நூலகத்தை ச்கேன் செய்ய முடியவில்லை", "unable_to_set_feature_photo": "அம்ச புகைப்படத்தை அமைக்க முடியவில்லை", "unable_to_set_profile_picture": "சுயவிவரப் படத்தை அமைக்க முடியவில்லை", + "unable_to_set_rating": "மதிப்பீட்டை அமைக்க முடியவில்லை", "unable_to_submit_job": "வேலையைச் சமர்ப்பிக்க முடியவில்லை", "unable_to_trash_asset": "சொத்தை குப்பை செய்ய முடியவில்லை", "unable_to_unlink_account": "கணக்கை இணைக்க முடியவில்லை", @@ -1073,8 +1156,10 @@ "unable_to_update_settings": "அமைப்புகளை புதுப்பிக்க முடியவில்லை", "unable_to_update_timeline_display_status": "காலவரிசை காட்சி நிலையை புதுப்பிக்க முடியவில்லை", "unable_to_update_user": "பயனரைப் புதுப்பிக்க முடியவில்லை", + "unable_to_update_workflow": "பணிப்பாய்வுகளைப் புதுப்பிக்க முடியவில்லை", "unable_to_upload_file": "கோப்பைப் பதிவேற்ற முடியவில்லை" }, + "errors_text": "பிழைகள்", "exclusion_pattern": "விலக்கு முறை", "exif": "எக்ஸிஃப்", "exif_bottom_sheet_description": "விளக்கத்தைச் சேர்க்கவும் ...", @@ -1085,6 +1170,7 @@ "exif_bottom_sheet_people": "மக்கள்", "exif_bottom_sheet_person_add_person": "பெயரைச் சேர்க்கவும்", "exit_slideshow": "ச்லைடுசோவிலிருந்து வெளியேறவும்", + "expand": "விரிவாக்கு", "expand_all": "அனைத்தையும் விரிவாக்குங்கள்", "experimental_settings_new_asset_list_subtitle": "வேலை முன்னேற்றத்தில் உள்ளது", "experimental_settings_new_asset_list_title": "சோதனை புகைப்பட கட்டத்தை இயக்கவும்", @@ -1106,6 +1192,7 @@ "external_network_sheet_info": "விருப்பமான வைஃபை நெட்வொர்க்கில் இல்லாதபோது, பயன்பாடு சேவையகத்துடன் கீழே உள்ள முகவரி களின் முதல் வழியாக இணைக்கப்படும், இது மேலே இருந்து கீழே தொடங்குகிறது", "face_unassigned": "ஒதுக்கப்படாதது", "failed": "தோல்வியுற்றது", + "failed_count": "தோல்வி: {count}", "failed_to_authenticate": "அங்கீகரிக்கத் தவறிவிட்டது", "failed_to_load_assets": "சொத்துக்களை ஏற்றுவதில் தோல்வி", "failed_to_load_folder": "கோப்புறையை ஏற்றுவதில் தோல்வி", @@ -1119,12 +1206,17 @@ "features_in_development": "வளர்ச்சியில் நற்பொருத்தங்கள்", "features_setting_description": "பயன்பாட்டு அம்சங்களை நிர்வகிக்கவும்", "file_name_or_extension": "கோப்பு பெயர் அல்லது நீட்டிப்பு", + "file_name_text": "கோப்பு பெயர்", + "file_name_with_value": "கோப்பு பெயர்: {file_name}", "file_size": "கோப்பு அளவு", "filename": "கோப்புப்பெயர்", "filetype": "பைல்டைப்", "filter": "வடிப்பி", + "filter_description": "இலக்கு சொத்துக்களை வடிகட்டுவதற்கான நிபந்தனைகள்", "filter_people": "மக்களை வடிகட்டவும்", "filter_places": "இடங்களை வடிகட்டவும்", + "filter_tags": "குறிச்சொற்களை வடிகட்டி", + "filters": "வடிப்பான்கள்", "find_them_fast": "தேடலுடன் பெயரால் வேகமாக அவற்றைக் கண்டறியவும்", "first": "முதல்", "fix_incorrect_match": "தவறான போட்டியை சரிசெய்யவும்", @@ -1134,12 +1226,16 @@ "folders_feature_description": "கோப்பு முறைமையில் உள்ள புகைப்படங்கள் மற்றும் வீடியோக்களுக்கான கோப்புறை காட்சியை உலாவுதல்", "forgot_pin_code_question": "உங்கள் முள் மறந்துவிட்டீர்களா?", "forward": "முன்னோக்கி", + "free_up_space": "இடத்தை விடுவிக்கவும்", + "free_up_space_description": "சேமிப்பிடத்தைக் காலியாக்க, காப்புப் பிரதி எடுக்கப்பட்ட படங்களையும் வீடியோக்களையும் உங்கள் சாதனத்தின் குப்பைக்கு நகர்த்தவும். சர்வரில் உள்ள உங்கள் பிரதிகள் பாதுகாப்பாக இருக்கும்.", + "free_up_space_settings_subtitle": "சாதன சேமிப்பிடத்தைக் காலியாக்கவும்", "full_path": "முழு பாதை: {path}", "gcast_enabled": "கூகிள் நடிகர்கள்", "gcast_enabled_description": "இந்த நற்பொருத்தம் வேலை செய்வதற்காக Google இலிருந்து வெளிப்புற வளங்களை ஏற்றுகிறது.", "general": "பொது", "geolocation_instruction_location": "அதன் இருப்பிடத்தைப் பயன்படுத்த சி.பி.எச் ஆயத்தொலைவுகளுடன் ஒரு சொத்தில் சொடுக்கு செய்க அல்லது வரைபடத்திலிருந்து நேரடியாக ஒரு இடத்தைத் தேர்ந்தெடுக்கவும்", "get_help": "உதவி பெறு", + "get_people_error": "மக்களைப் பெறுவதில் பிழை", "get_wifiname_error": "வைஃபை பெயரைப் பெற முடியவில்லை. நீங்கள் தேவையான அனுமதிகளை வழங்கியுள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள் மற்றும் வைஃபை நெட்வொர்க்குடன் இணைக்கப்பட்டுள்ளீர்கள்", "getting_started": "தொடங்குதல்", "go_back": "திரும்பிச் செல்லுங்கள்", @@ -1165,12 +1261,14 @@ "header_settings_header_name_input": "தலைப்பு பெயர்", "header_settings_header_value_input": "தலைப்பு மதிப்பு", "headers_settings_tile_title": "தனிப்பயன் பதிலாள் தலைப்புகள்", + "height": "உயரம்", "hi_user": "ஆய் {name} ({email})", "hide_all_people": "எல்லா மக்களையும் மறைக்கவும்", "hide_gallery": "கேலரியை மறைக்கவும்", "hide_named_person": "நபரை மறைக்க {name}", "hide_password": "கடவுச்சொல்லை மறைக்கவும்", "hide_person": "நபரை மறைக்க", + "hide_schema": "திட்டத்தை மறை", "hide_text_recognition": "உரை அங்கீகாரத்தை மறை", "hide_unnamed_people": "பெயரிடப்படாதவர்களை மறைக்கவும்", "home_page_add_to_album_conflicts": "{album} ஆல்பத்தில் {added} சொத்துக்கள் சேர்க்கப்பட்டன. {failed} சொத்துக்கள் ஏற்கனவே ஆல்பத்தில் உள்ளன.", @@ -1194,8 +1292,8 @@ "hours": "மணி", "id": "ஐடி", "idle": "நிலையிக்கம்", - "ignore_icloud_photos": "ICloud புகைப்படங்களை புறக்கணிக்கவும்", - "ignore_icloud_photos_description": "ICloud இல் சேமிக்கப்படும் புகைப்படங்கள் இம்மிச் சேவையகத்தில் பதிவேற்றப்படாது", + "ignore_icloud_photos": "ஐமுகில் புகைப்படங்களைப் புறக்கணி", + "ignore_icloud_photos_description": "ஐமுகில் இல் சேமிக்கப்படும் புகைப்படங்கள் இம்மிச் சேவையகத்தில் பதிவேற்றப்படாது", "image": "படம்", "image_alt_text_date": "{isVideo, select, true {காணொளி} other {படம்}} {date} அன்று எடுக்கப்பட்டது", "image_alt_text_date_1_person": "{isVideo, select, true {காணொளி} other {படம்}} {person1} உடன் {date} அன்று எடுக்கப்பட்டது", @@ -1243,9 +1341,18 @@ "ios_debug_info_processing_ran_at": "செயலாக்கம் {dateTime}", "items_count": "{count, plural, one {# உருப்படி} other {# உருப்படிகள்}}", "jobs": "வேலைகள்", + "json_editor": "சாதொபொகு ஆசிரியர்", + "json_error": "சாதொபொகு பிழை", "keep": "வைத்திருங்கள்", + "keep_albums": "ஆல்பங்களை வைத்திருங்கள்", + "keep_albums_count": "{count} {count, plural, one {தொகுப்பு} other {தொகுப்புகள்}} வைத்திரு", "keep_all": "அனைத்தையும் வைத்திருங்கள்", + "keep_description": "இடத்தைக் காலியாக்கும் போது உங்கள் சாதனத்தில் என்ன இருக்க வேண்டும் என்பதைத் தேர்வுசெய்யவும்.", + "keep_favorites": "பிடித்தவைகளை வைத்திருங்கள்", + "keep_on_device": "சாதனத்தில் வைத்திருங்கள்", + "keep_on_device_hint": "இந்தச் சாதனத்தில் வைத்திருக்க வேண்டிய பொருட்களைத் தேர்ந்தெடுக்கவும்", "keep_this_delete_others": "இதை வைத்திருங்கள், மற்றவர்களை நீக்கு", + "keeping": "வைத்திருத்தல்: {items}", "kept_this_deleted_others": "இந்தச் சொத்தை வைத்து, {count, plural, one {# சொத்து} other {# சொத்துகள்}} நீக்கப்பட்டது", "keyboard_shortcuts": "விசைப்பலகை குறுக்குவழிகள்", "language": "மொழி", @@ -1287,6 +1394,7 @@ "local": "உள்ளக", "local_asset_cast_failed": "சேவையகத்தில் பதிவேற்றப்படாத ஒரு சொத்தை அனுப்ப முடியவில்லை", "local_assets": "உள்ளக சொத்துக்கள்", + "local_id": "உள்ளக அடையாளம்", "local_media_summary": "உள்ளக ஊடக சுருக்கம்", "local_network": "உள்ளக பிணையம்", "local_network_sheet_info": "குறிப்பிட்ட வைஃபை நெட்வொர்க்கைப் பயன்படுத்தும் போது பயன்பாடு இந்த முகவரி மூலம் சேவையகத்துடன் இணைக்கப்படும்", @@ -1338,10 +1446,28 @@ "loop_videos_description": "விரிவான பார்வையாளரில் ஒரு வீடியோவை தானாக வளையப்படுத்தவும்.", "main_branch_warning": "நீங்கள் ஒரு மேம்பாட்டு பதிப்பைப் பயன்படுத்துகிறீர்கள்; வெளியீட்டு பதிப்பைப் பயன்படுத்த நாங்கள் கடுமையாக பரிந்துரைக்கிறோம்!", "main_menu": "பட்டியல் விளையாடுங்கள்", + "maintenance_action_restore": "தரவுத்தளத்தை மீட்டமைக்கிறது", "maintenance_description": "இம்மிச் பராமரிப்பு பயன்முறையில் வைக்கப்பட்டுள்ளது.", "maintenance_end": "பராமரிப்பு பயன்முறையை முடிக்கவும்", "maintenance_end_error": "பராமரிப்பு முறையை முடிக்க முடியவில்லை.", "maintenance_logged_in_as": "தற்போது {user} ஆக உள்நுழைந்துள்ளீர்கள்", + "maintenance_restore_from_backup": "காப்புப்பிரதியிலிருந்து மீட்டமை", + "maintenance_restore_library": "உங்கள் நூலகத்தை மீட்டெடுக்கவும்", + "maintenance_restore_library_confirm": "இது சரியாகத் தோன்றினால், காப்புப்பிரதியை மீட்டமைப்பதைத் தொடரவும்!", + "maintenance_restore_library_description": "தரவுத்தளத்தை மீட்டமைக்கிறது", + "maintenance_restore_library_folder_has_files": "{folder}ல் {count} கோப்புறை(கள்) உள்ளது", + "maintenance_restore_library_folder_no_files": "{folder} இல் கோப்புகள் இல்லை!", + "maintenance_restore_library_folder_pass": "படிக்கக்கூடிய மற்றும் எழுதக்கூடிய", + "maintenance_restore_library_folder_read_fail": "படிக்க முடியாது", + "maintenance_restore_library_folder_write_fail": "எழுத முடியாது", + "maintenance_restore_library_hint_missing_files": "முக்கியமான கோப்புகளை நீங்கள் காணவில்லை", + "maintenance_restore_library_hint_regenerate_later": "இவற்றை பின்னர் அமைப்புகளில் மீண்டும் உருவாக்கலாம்", + "maintenance_restore_library_hint_storage_template_missing_files": "சேமிப்பக டெம்ப்ளேட்டைப் பயன்படுத்துகிறீர்களா? நீங்கள் கோப்புகளை காணாமல் இருக்கலாம்", + "maintenance_restore_library_loading": "ஒருமைப்பாடு காசோலைகள் மற்றும் ஊரிச்டிக்ச் ஏற்றுகிறது…", + "maintenance_task_backup": "ஏற்கனவே உள்ள தரவுத்தளத்தின் காப்புப்பிரதியை உருவாக்குகிறது…", + "maintenance_task_migrations": "தரவுத்தள நகர்வுகளை இயக்குகிறது…", + "maintenance_task_restore": "தேர்ந்தெடுக்கப்பட்ட காப்புப்பிரதியை மீட்டெடுக்கிறது…", + "maintenance_task_rollback": "மீட்டெடுப்பு தோல்வியடைந்தது, புள்ளியை மீட்டெடுக்க மீண்டும் உருட்டுகிறது…", "maintenance_title": "தற்காலிகமாக கிடைக்கவில்லை", "make": "உருவாக்கு", "manage_geolocation": "இருப்பிடத்தை நிர்வகிக்கவும்", @@ -1403,6 +1529,8 @@ "minimize": "குறைக்கவும்", "minute": "நிமிடங்கள்", "minutes": "நிமிடங்கள்", + "mirror_horizontal": "கிடைமட்ட", + "mirror_vertical": "செங்குத்து", "missing": "இல்லை", "mobile_app": "மொபைல் ஆப்", "mobile_app_download_onboarding_note": "பின்வரும் விருப்பங்களைப் பயன்படுத்தி துணை மொபைல் பயன்பாட்டைப் பதிவிறக்கவும்", @@ -1411,11 +1539,14 @@ "monthly_title_text_date_format": "Mmmm ஒய்", "more": "மேலும்", "move": "நகர்த்தவும்", + "move_down": "கீழே நகர்த்தவும்", "move_off_locked_folder": "பூட்டப்பட்ட கோப்புறையிலிருந்து வெளியேறவும்", "move_to": "நகர்த்து", + "move_to_device_trash": "சாதனத்தின் குப்பைக்கு நகர்த்தவும்", "move_to_lock_folder_action_prompt": "பூட்டிய கோப்புறையில் {count} சேர்க்கப்பட்டது", "move_to_locked_folder": "பூட்டப்பட்ட கோப்புறையில் செல்லுங்கள்", "move_to_locked_folder_confirmation": "இந்த புகைப்படங்கள் மற்றும் வீடியோ அனைத்து ஆல்பங்களிலிருந்தும் அகற்றப்படும், மேலும் பூட்டப்பட்ட கோப்புறையிலிருந்து மட்டுமே பார்க்க முடியும்", + "move_up": "மேலே செல்லவும்", "moved_to_archive": "{count, plural, one {# சொத்து} other {# சொத்துக்கள்}} காப்பகத்திற்கு நகர்த்தப்பட்டது", "moved_to_library": "{count, plural, one {# சொத்து} other {# சொத்துக்கள்}} நூலகத்திற்கு நகர்த்தப்பட்டது", "moved_to_trash": "குப்பைக்கு நகர்த்தப்பட்டது", @@ -1425,6 +1556,7 @@ "my_albums": "எனது ஆல்பங்கள்", "name": "பெயர்", "name_or_nickname": "பெயர் அல்லது புனைப்பெயர்", + "name_required": "பெயர் தேவை", "navigate": "வழிசெலுத்தவும்", "navigate_to_time": "நேரத்திற்கு செல்லவும்", "network_requirement_photos_upload": "காப்புப்பிரதி புகைப்படங்களுக்கு செல்லுலார் தரவைப் பயன்படுத்தவும்", @@ -1449,20 +1581,24 @@ "next": "அடுத்தது", "next_memory": "அடுத்த நினைவகம்", "no": "இல்லை", + "no_actions_added": "இன்னும் செயல்கள் எதுவும் சேர்க்கப்படவில்லை", + "no_albums_found": "ஆல்பங்கள் எதுவும் இல்லை", "no_albums_message": "உங்கள் புகைப்படங்கள் மற்றும் வீடியோக்களை ஒழுங்கமைக்க ஒரு ஆல்பத்தை உருவாக்கவும்", "no_albums_with_name_yet": "இந்த பெயருடன் இன்னும் ஆல்பங்கள் எதுவும் இல்லை என்று தெரிகிறது.", "no_albums_yet": "உங்களிடம் இதுவரை எந்த ஆல்பங்களும் இல்லை என்று தெரிகிறது.", "no_archived_assets_message": "உங்கள் புகைப்படக் காட்சியில் இருந்து அவற்றை மறைக்க புகைப்படங்கள் மற்றும் வீடியோக்களை காப்பகப்படுத்தவும்", - "no_assets_message": "உங்கள் முதல் புகைப்படத்தை பதிவேற்ற சொடுக்கு செய்க", + "no_assets_message": "உங்கள் முதல் புகைப்படத்தை பதிவேற்ற சொடுக்கு செய்யவும்", "no_assets_to_show": "காட்ட சொத்துக்கள் இல்லை", "no_cast_devices_found": "நடிகர்கள் சாதனங்கள் எதுவும் கிடைக்கவில்லை", "no_checksum_local": "செக்சம் எதுவும் கிடைக்கவில்லை - உள்ளக சொத்துக்களைப் பெற முடியாது", "no_checksum_remote": "செக்சம் எதுவும் கிடைக்கவில்லை - தொலை சொத்து பெற முடியாது", + "no_configuration_needed": "கட்டமைப்பு தேவையில்லை", "no_devices": "அங்கீகரிக்கப்பட்ட சாதனங்கள் இல்லை", "no_duplicates_found": "நகல்கள் எதுவும் காணப்படவில்லை.", - "no_exif_info_available": "EXIF செய்தி எதுவும் கிடைக்கவில்லை", + "no_exif_info_available": "exif செய்தி எதுவும் கிடைக்கவில்லை", "no_explore_results_message": "உங்கள் தொகுப்பை ஆராய கூடுதல் புகைப்படங்களை பதிவேற்றவும்.", "no_favorites_message": "உங்கள் சிறந்த படங்கள் மற்றும் வீடியோக்களை விரைவாகக் கண்டுபிடிக்க பிடித்தவைகளைச் சேர்க்கவும்", + "no_filters_added": "இதுவரை வடிப்பான்கள் எதுவும் சேர்க்கப்படவில்லை", "no_libraries_message": "உங்கள் புகைப்படங்கள் மற்றும் வீடியோக்களைக் காண வெளிப்புற நூலகத்தை உருவாக்கவும்", "no_local_assets_found": "இந்த செக்சம் மூலம் உள்ளக சொத்துக்கள் எதுவும் காணப்படவில்லை", "no_location_set": "இடம் அமைக்கப்படவில்லை", @@ -1476,6 +1612,7 @@ "no_results_description": "ஒரு ஒத்த அல்லது பொதுவான முக்கிய சொல்லை முயற்சிக்கவும்", "no_shared_albums_message": "உங்கள் நெட்வொர்க்கில் உள்ளவர்களுடன் புகைப்படங்களையும் வீடியோக்களையும் பகிர்ந்து கொள்ள ஒரு ஆல்பத்தை உருவாக்கவும்", "no_uploads_in_progress": "பதிவேற்றங்கள் முன்னேற்றத்தில் இல்லை", + "none": "எதுவுமில்லை", "not_allowed": "அனுமதிக்கப்படவில்லை", "not_available": "இதற்கில்லை", "not_in_any_album": "எந்த ஆல்பத்திலும் இல்லை", @@ -1509,6 +1646,8 @@ "online": "ஆன்லைனில்", "only_favorites": "பிடித்தவை மட்டுமே", "open": "திற", + "open_calendar": "காலெண்டரைத் திறக்கவும்", + "open_in_browser": "உலாவியில் திற", "open_in_map_view": "வரைபடக் காட்சியில் திறந்திருக்கும்", "open_in_openstreetmap": "OpenStreetMap இல் திறந்திருக்கும்", "open_the_search_filters": "தேடல் வடிப்பான்களைத் திறக்கவும்", @@ -1557,6 +1696,7 @@ "people": "மக்கள்", "people_edits_count": "{count, plural, one {# நபர்} other {# பேர்}} திருத்தப்பட்டது", "people_feature_description": "மக்கள் தொகுத்த புகைப்படங்கள் மற்றும் வீடியோக்களை உலாவுதல்", + "people_selected": "{count, plural, one {# நபர் தேர்ந்தெடுக்கப்பட்டார்} other {# பேர் தேர்ந்தெடுக்கப்பட்டனர்}}", "people_sidebar_description": "பக்கப்பட்டியில் உள்ளவர்களுக்கு ஒரு இணைப்பைக் காண்பி", "permanent_deletion_warning": "நிரந்தர நீக்குதல் எச்சரிக்கை", "permanent_deletion_warning_setting_description": "சொத்துக்களை நிரந்தரமாக நீக்கும்போது ஒரு எச்சரிக்கையைக் காட்டுங்கள்", @@ -1581,11 +1721,14 @@ "person_age_years": "{years, plural, other {# ஆண்டுகள்}} பழையது", "person_birthdate": "{date} இல் பிறந்தார்", "person_hidden": "{name}{hidden, select, true { (மறைக்கப்பட்ட)} other {}}", + "person_recognized": "அடையாளம் காணப்பட்ட நபர்", + "person_selected": "தேர்ந்தெடுக்கப்பட்ட நபர்", "photo_shared_all_users": "உங்கள் புகைப்படங்களை எல்லா பயனர்களுடனும் பகிர்ந்து கொண்டதாகத் தெரிகிறது அல்லது பகிர்வதற்கு உங்களிடம் எந்த பயனரும் இல்லை.", "photos": "புகைப்படங்கள்", "photos_and_videos": "புகைப்படங்கள் & வீடியோக்கள்", "photos_count": "{count, plural, one {{count, number} படம்} other {{count, number} படங்கள்}}", "photos_from_previous_years": "முந்தைய ஆண்டுகளின் புகைப்படங்கள்", + "photos_only": "புகைப்படங்கள் மட்டுமே", "pick_a_location": "ஒரு இடத்தைத் தேர்ந்தெடுங்கள்", "pick_custom_range": "தனிப்பயன் வரம்பு", "pick_date_range": "தேதி வரம்பைத் தேர்ந்தெடுக்கவும்", @@ -1661,9 +1804,10 @@ "purchase_settings_server_activated": "சேவையக தயாரிப்பு விசை நிர்வாகியால் நிர்வகிக்கப்படுகிறது", "query_asset_id": "வினவல் சொத்து அடையாளம்", "queue_status": "வரிசை {count}/{total}", + "rate_asset": "சொத்து மதிப்பு", "rating": "நட்சத்திர மதிப்பீடு", "rating_clear": "தெளிவான மதிப்பீடு", - "rating_count": "{count, plural, one {# விண்மீன்} other {# விண்மீன்கள்}}", + "rating_count": "{count, plural, =0 {மதிபிடவில்லை} one {# விண்மீன்} other {# விண்மீன்கள்}}", "rating_description": "செய்தி குழுவில் EXIF மதிப்பீட்டைக் காண்பி", "reaction_options": "எதிர்வினை விருப்பங்கள்", "read_changelog": "சேஞ்ச்லாக் படிக்கவும்", @@ -1736,7 +1880,10 @@ "reset_pin_code_success": "முள் குறியீட்டை வெற்றிகரமாக மீட்டமைக்கவும்", "reset_pin_code_with_password": "உங்கள் கடவுச்சொல் மூலம் உங்கள் முள் குறியீட்டை எப்போதும் மீட்டமைக்கலாம்", "reset_sqlite": "SQLite தரவுத்தளத்தை மீட்டமைக்கவும்", - "reset_sqlite_confirmation": "SQLITE தரவுத்தளத்தை மீட்டமைக்க விரும்புகிறீர்களா? தரவை மீண்டும் ஒத்திசைக்க நீங்கள் வெளியேறி மீண்டும் உள்நுழைய வேண்டும்", + "reset_sqlite_clear_app_data": "தரவை அழிக்கவும்", + "reset_sqlite_confirmation": "ஆப்ச் தரவை நிச்சயமாக அழிக்க விரும்புகிறீர்களா? இது எல்லா அமைப்புகளையும் நீக்கிவிட்டு உங்களை வெளியேற்றும்.", + "reset_sqlite_confirmation_note": "குறிப்பு: நீக்கிய பிறகு, நீங்கள் பயன்பாட்டை மறுதொடக்கம் செய்ய வேண்டும்.", + "reset_sqlite_done": "ஆப்ச் தரவு அழிக்கப்பட்டது. இம்மிச்சை மறுதொடக்கம் செய்து மீண்டும் உள்நுழையவும்.", "reset_sqlite_success": "SQLITE தரவுத்தளத்தை வெற்றிகரமாக மீட்டமைக்கவும்", "reset_to_default": "இயல்புநிலைக்கு மீட்டமைக்கவும்", "resolution": "தெளிவுத்திறன்", @@ -1764,9 +1911,12 @@ "saved_settings": "சேமித்த அமைப்புகள்", "say_something": "ஏதாவது சொல்லுங்கள்", "scaffold_body_error_occurred": "பிழை ஏற்பட்டது", + "scaffold_body_error_unrecoverable": "மீட்க முடியாத பிழை ஏற்பட்டது. டிச்கார்ட் அல்லது கிட்அப்பில் பிழை மற்றும் அடுக்கு ட்ரேசைப் பகிரவும், அதனால் நாங்கள் உதவ முடியும். அறிவுறுத்தப்பட்டால், கீழே உள்ள பயன்பாட்டுத் தரவை அழிக்கலாம்.", + "scan": "வருடு செய்யவும்", "scan_all_libraries": "அனைத்து நூலகங்களையும் ச்கேன் செய்யுங்கள்", "scan_library": "ச்கேன்", "scan_settings": "அமைப்புகளை ச்கேன் செய்யுங்கள்", + "scanning": "வருடு செய்கிறது", "scanning_for_album": "ஆல்பத்திற்கு ச்கேனிங் ...", "search": "தேடல்", "search_albums": "ஆல்பங்களைத் தேடுங்கள்", @@ -1796,6 +1946,8 @@ "search_filter_media_type_title": "மீடியா வகையைத் தேர்ந்தெடுக்கவும்", "search_filter_ocr": "ஓசிஆர் மூலம் தேடு", "search_filter_people_title": "மக்களைத் தேர்ந்தெடுக்கவும்", + "search_filter_star_rating": "நட்சத்திர மதிப்பீடு", + "search_filter_tags_title": "குறிச்சொற்களைத் தேர்ந்தெடுக்கவும்", "search_for": "தேடுங்கள்", "search_for_existing_person": "இருக்கும் நபரைத் தேடுங்கள்", "search_no_more_result": "மேலும் முடிவுகள் இல்லை", @@ -1830,17 +1982,23 @@ "second": "இரண்டாவது", "see_all_people": "எல்லா மக்களையும் பாருங்கள்", "select": "தேர்ந்தெடு", + "select_album": "ஆல்பத்தைத் தேர்ந்தெடுக்கவும்", "select_album_cover": "ஆல்பம் அட்டையைத் தேர்ந்தெடுக்கவும்", + "select_albums": "ஆல்பங்களைத் தேர்ந்தெடுக்கவும்", "select_all": "அனைத்தையும் தெரிவுசெய்", "select_all_duplicates": "அனைத்து நகல்களையும் தேர்ந்தெடுக்கவும்", "select_all_in": "{group} இல் உள்ள அனைத்தையும் தேர்ந்தெடுக்கவும்", "select_avatar_color": "அவதார் நிறத்தைத் தேர்ந்தெடுக்கவும்", + "select_count": "{count, plural, one {தேர்வு #} other {தேர்வுகள் #}}", + "select_cutoff_date": "வெட்டு தேதியைத் தேர்ந்தெடுக்கவும்", "select_face": "முகத்தைத் தேர்ந்தெடுக்கவும்", "select_featured_photo": "பிரத்யேக புகைப்படத்தைத் தேர்ந்தெடுக்கவும்", "select_from_computer": "கணினியிலிருந்து தேர்ந்தெடுக்கவும்", "select_keep_all": "அனைத்தையும் வைத்திருங்கள் என்பதைத் தேர்ந்தெடுக்கவும்", "select_library_owner": "நூலக உரிமையாளரைத் தேர்ந்தெடுக்கவும்", "select_new_face": "புதிய முகத்தைத் தேர்ந்தெடுக்கவும்", + "select_people": "நபர்களைத் தேர்ந்தெடுக்கவும்", + "select_person": "நபரைத் தேர்ந்தெடுக்கவும்", "select_person_to_tag": "குறிக்க ஒரு நபரைத் தேர்ந்தெடுக்கவும்", "select_photos": "புகைப்படங்களைத் தேர்ந்தெடுக்கவும்", "select_trash_all": "குப்பைத் தொட்டியைத் தேர்ந்தெடுக்கவும்", @@ -1869,6 +2027,9 @@ "set_profile_picture": "சுயவிவரப் படத்தை அமைக்கவும்", "set_slideshow_to_fullscreen": "ச்லைடுசோவை முழுமைக்கு அமைக்கவும்", "set_stack_primary_asset": "முதன்மை சொத்தாக அமைக்கவும்", + "setting_image_navigation_enable_subtitle": "இயக்கப்பட்டிருந்தால், திரையின் இடதுபுறம்/வலதுபுறம் உள்ள கால்பகுதியைத் தட்டுவதன் மூலம் முந்தைய/அடுத்த படத்திற்குச் செல்லலாம்.", + "setting_image_navigation_enable_title": "வழிசெலுத்த தட்டவும்", + "setting_image_navigation_title": "பட வழிசெலுத்தல்", "setting_image_viewer_help": "விவரம் பார்வையாளர் முதலில் சிறிய சிறு உருவத்தை ஏற்றுகிறார், பின்னர் நடுத்தர அளவிலான முன்னோட்டத்தை ஏற்றுகிறார் (இயக்கப்பட்டால்), இறுதியாக அசலை ஏற்றுகிறது (இயக்கப்பட்டால்).", "setting_image_viewer_original_subtitle": "அசல் முழு தெளிவுத்திறன் படத்தை ஏற்றவும் (பெரியது!). தரவு பயன்பாட்டைக் குறைக்க முடக்கு (பிணையம் மற்றும் சாதன தற்காலிக சேமிப்பு இரண்டும்).", "setting_image_viewer_original_title": "அசல் படத்தை ஏற்றவும்", @@ -1976,6 +2137,7 @@ "show_password": "கடவுச்சொல்லைக் காட்டு", "show_person_options": "நபர் விருப்பங்களைக் காட்டு", "show_progress_bar": "முன்னேற்றப் பட்டியைக் காட்டு", + "show_schema": "திட்டத்தைக் காட்டு", "show_search_options": "தேடல் விருப்பங்களைக் காட்டு", "show_shared_links": "பகிரப்பட்ட இணைப்புகளைக் காட்டு", "show_slideshow_transition": "ச்லைடுசோ மாற்றத்தைக் காட்டு", @@ -1993,6 +2155,8 @@ "skip_to_folders": "கோப்புறைகளுக்குச் செல்லுங்கள்", "skip_to_tags": "குறிச்சொற்களைத் தவிர்க்கவும்", "slideshow": "ச்லைடுசோ", + "slideshow_repeat": "ச்லைடுசோவை மீண்டும் செய்யவும்", + "slideshow_repeat_description": "ச்லைடுசோ முடிவடையும் போது மீண்டும் தொடக்கத்திற்குச் செல்லவும்", "slideshow_settings": "ச்லைடுசோ அமைப்புகள்", "sort_albums_by": "ஆல்பங்களை வரிசைப்படுத்துங்கள் ...", "sort_created": "தேதி உருவாக்கப்பட்டது", @@ -2032,6 +2196,7 @@ "support": "உதவி", "support_and_feedback": "உதவி மற்றும் கருத்து", "support_third_party_description": "உங்கள் இம்மிச் நிறுவல் மூன்றாம் தரப்பினரால் தொகுக்கப்பட்டது. நீங்கள் அனுபவிக்கும் சிக்கல்கள் அந்த தொகுப்பால் ஏற்படலாம், எனவே கீழேயுள்ள இணைப்புகளைப் பயன்படுத்தி முதல் சந்தர்ப்பத்தில் அவர்களுடன் சிக்கல்களை எழுப்புங்கள்.", + "supporter": "ஆதரவாளர்", "swap_merge_direction": "ஒன்றிணைக்கும் திசையை மாற்றவும்", "sync": "ஒத்திசைவு", "sync_albums": "ஆல்பங்களை ஒத்திசைக்கவும்", @@ -2069,6 +2234,7 @@ "theme_setting_theme_subtitle": "பயன்பாட்டின் கருப்பொருள் அமைப்பைத் தேர்வுசெய்க", "theme_setting_three_stage_loading_subtitle": "மூன்று-நிலை ஏற்றுதல் இயக்கினால் ஏற்றுதல் செயல்திறனை அதிகரிக்கக்கூடும், ஆனால் கணிசமாக மிகை பிணையச் சுமையை ஏற்படுத்துகிறது", "theme_setting_three_stage_loading_title": "மூன்று-நிலை ஏற்றுதலை இயக்கவும்", + "then": "பிறகு", "they_will_be_merged_together": "அவர்கள் ஒன்றாக இணைக்கப்படுவார்கள்", "third_party_resources": "மூன்றாம் தரப்பு வளங்கள்", "time": "நேரம்", @@ -2103,6 +2269,13 @@ "trash_page_select_assets_btn": "சொத்துக்களைத் தேர்ந்தெடுக்கவும்", "trash_page_title": "({count})", "trashed_items_will_be_permanently_deleted_after": "குப்பையில் உள்ள உருப்படிகள் {days, plural, one {# நாளுக்கு} other {# நாட்களுக்கு}}பிறகு நிரந்தரமாக நீக்கப்படும்.", + "trigger": "தூண்டுதல்", + "trigger_asset_uploaded": "சொத்து பதிவேற்றப்பட்டது", + "trigger_asset_uploaded_description": "புதிய சொத்து பதிவேற்றப்படும் போது தூண்டப்பட்டது", + "trigger_description": "பணிப்பாய்வு தொடங்கும் ஒரு நிகழ்வு", + "trigger_person_recognized": "அடையாளம் காணப்பட்ட நபர்", + "trigger_person_recognized_description": "ஒரு நபர் கண்டறியப்பட்டால் தூண்டப்படுகிறது", + "trigger_type": "தூண்டுதல் வகை", "troubleshoot": "சரிசெய்தல்", "type": "வகை", "unable_to_change_pin_code": "முள் குறியீட்டை மாற்ற முடியவில்லை", @@ -2117,6 +2290,7 @@ "unhide_person": "அருவருப்பான நபர்", "unknown": "தெரியவில்லை", "unknown_country": "தெரியாத நாடு", + "unknown_date": "தெரியாத தேதி", "unknown_year": "தெரியாத ஆண்டு", "unlimited": "வரம்பற்றது", "unlink_motion_video": "இயக்க வீடியோவை இணைக்கவும்", @@ -2133,7 +2307,10 @@ "unstack": "அன்-ச்டாக்", "unstack_action_prompt": "{count} தடையின்றி", "unstacked_assets_count": "அடுக்கப்படாத {count, plural, one {# சொத்து} other {# சொத்துக்கள்}}", + "unsupported_field_type": "ஆதரிக்கப்படாத புல வகை", + "unsupported_file_type": "கோப்பை {file} பதிவேற்ற முடியாது, ஏனெனில் அதன் கோப்பு வகை {type} ஆதரிக்கப்படவில்லை.", "untagged": "அவிழ்க்கப்படாதது", + "untitled_workflow": "பெயரிடப்படாத பணிப்பாய்வு", "up_next": "அடுத்து", "update_location_action_prompt": "{count} தேர்ந்தெடுக்கப்பட்ட சொத்துக்களின் இருப்பிடத்தைப் புதுப்பிக்கவும்:", "updated_at": "புதுப்பிக்கப்பட்டது", @@ -2143,6 +2320,7 @@ "upload_details": "விவரங்களை பதிவேற்றவும்", "upload_dialog_info": "தேர்ந்தெடுக்கப்பட்ட சொத்து (களை) சேவையகத்திற்கு காப்புப் பிரதி எடுக்க விரும்புகிறீர்களா?", "upload_dialog_title": "சொத்தை பதிவேற்றவும்", + "upload_error_with_count": "{count, plural, one {# சொத்துக்கு} other {# சொத்துக்களுக்கு}} பதிவேற்றப் பிழை", "upload_errors": "{count, plural, one {# பிழை} other {# பிழைகள்}}மூலம் பதிவேற்றம் முடிந்தது, புதிய பதிவேற்ற சொத்துகளைப் பார்க்கப் பக்கத்தைப் புதுப்பிக்கவும்.", "upload_finished": "பதிவேற்றம் முடிந்தது", "upload_progress": "மீதமுள்ள {remaining, number} - செயலாக்கப்பட்டது {processed, number}/{total, number}", @@ -2157,6 +2335,8 @@ "url": "முகவரி", "usage": "பயன்பாடு", "use_biometric": "பயோமெட்ரிக்கைப் பயன்படுத்தவும்", + "use_browser_locale": "உலாவியின் மொழியைப் பயன்படுத்தவும்", + "use_browser_locale_description": "உங்கள் உலாவியின் இருப்பிடத்தின் அடிப்படையில் தேதிகள், நேரங்கள் மற்றும் எண்களை வடிவமைக்கவும்", "use_current_connection": "தற்போதைய இணைப்பைப் பயன்படுத்தவும்", "use_custom_date_range": "அதற்கு பதிலாக தனிப்பயன் தேதி வரம்பைப் பயன்படுத்தவும்", "user": "பயனர்", @@ -2178,10 +2358,11 @@ "utilities": "பயன்பாடுகள்", "validate": "சரிபார்க்கவும்", "validate_endpoint_error": "தயவுசெய்து ஒரு செல்லுபடியாகும் URL ஐ உள்ளிடவும்", + "validation_error": "சரிபார்ப்பு பிழை", "variables": "மாறிகள்", "version": "பதிப்பு", "version_announcement_closing": "உங்கள் நண்பர், அலெக்ச்", - "version_announcement_message": "வணக்கம்! இம்மியின் புதிய பதிப்பு கிடைக்கிறது. எந்தவொரு தவறான கருத்துக்களையும் தடுக்க உங்கள் அமைப்பு புதுப்பித்த நிலையில் இருப்பதை உறுதிசெய்ய வெளியீட்டுக் குறிப்புகள் ஐப் படிக்க சிறிது நேரம் ஒதுக்குங்கள், குறிப்பாக நீங்கள் காவற்கோபுரத்தைப் பயன்படுத்தினால் அல்லது உங்கள் இம்மிச் நிகழ்வை தானாகவே புதுப்பிப்பதைக் கையாளும் எந்தவொரு பொறிமுறையையும் பயன்படுத்தினால்.", + "version_announcement_message": "வணக்கம்! இம்மியின் புதிய பதிப்பு கிடைக்கிறது. எந்தவொரு தவறான கருத்துக்களையும் தடுக்க உங்கள் அமைப்பு புதுப்பித்த நிலையில் இருப்பதை உறுதிசெய்ய வெளியீட்டுக் குறிப்புகள் ஐப் படிக்கச் சிறிது நேரம் ஒதுக்குங்கள், குறிப்பாக நீங்கள் காவற்கோபுரத்தைப் பயன்படுத்தினால் அல்லது உங்கள் இம்மிச் நிகழ்வைத் தானாகவே புதுப்பிப்பதைக் கையாளும் எந்தவொரு பொறிமுறையையும் பயன்படுத்தினால்.", "version_history": "பதிப்பு வரலாறு", "version_history_item": "{version} இல் {date} நிறுவப்பட்டது", "video": "ஒளிதோற்றம்", @@ -2189,6 +2370,7 @@ "video_hover_setting_description": "மவுச் உருப்படியைக் கொண்டு செல்லும்போது வீடியோ சிறு உருவத்தை இயக்கவும். முடக்கப்பட்டாலும் கூட, பிளே ஐகானுக்கு மேல் சுற்றுவதன் மூலம் பிளேபேக்கைத் தொடங்கலாம்.", "videos": "வீடியோக்கள்", "videos_count": "{count, plural, one {# காணொளி} other {# காணொளிகள்}}", + "videos_only": "வீடியோக்கள் மட்டுமே", "view": "பார்வை", "view_album": "ஆல்பத்தைக் காண்க", "view_all": "அனைத்தையும் காண்க", @@ -2209,18 +2391,36 @@ "viewer_stack_use_as_main_asset": "பிரதான சொத்தாகப் பயன்படுத்தவும்", "viewer_unstack": "அடுக்கை நீக்கு", "visibility_changed": "{count, plural, one {# நபர்} other {# நபர்கள்}} க்கான தெரிவுநிலை மாற்றப்பட்டது", + "visual": "காட்சி", + "visual_builder": "காட்சி உருவாக்குபவர்", "waiting": "காத்திருக்கிறது", + "waiting_count": "காத்திருக்கிறது: {count}", "warning": "எச்சரிக்கை", "week": "வாரம்", "welcome": "வரவேற்கிறோம்", "welcome_to_immich": "இம்மிச்சிற்கு வருக", + "width": "அகலம்", "wifi_name": "வைஃபை பெயர்", + "workflow_delete_prompt": "இந்த பணிப்பாய்வுகளை நிச்சயமாக நீக்க விரும்புகிறீர்களா?", + "workflow_deleted": "பணிப்பாய்வு நீக்கப்பட்டது", + "workflow_description": "பணிப்பாய்வு விளக்கம்", + "workflow_info": "பணிப்பாய்வு செய்தி", + "workflow_json": "பணிப்பாய்வு சாதொபொகு", + "workflow_json_help": "சாதொபொகு வடிவத்தில் பணிப்பாய்வு உள்ளமைவைத் திருத்தவும். மாற்றங்கள் காட்சி பில்டருடன் ஒத்திசைக்கப்படும்.", + "workflow_name": "பணிப்பாய்வு பெயர்", + "workflow_navigation_prompt": "உங்கள் மாற்றங்களைச் சேமிக்காமல் நிச்சயமாக வெளியேற விரும்புகிறீர்களா?", + "workflow_summary": "பணிப்பாய்வு சுருக்கம்", + "workflow_update_success": "பணிப்பாய்வு வெற்றிகரமாக புதுப்பிக்கப்பட்டது", + "workflow_updated": "பணிப்பாய்வு புதுப்பிக்கப்பட்டது", + "workflows": "பணிப்பாய்வுகள்", + "workflows_help_text": "தூண்டுதல்கள் மற்றும் வடிப்பான்களின் அடிப்படையில் பணிப்பாய்வுகள் உங்கள் சொத்துகளில் செயல்களை தானியங்குபடுத்துகின்றன", "wrong_pin_code": "தவறான பின் குறியீடு", "year": "ஆண்டு", "years_ago": "{years, plural, one {# ஆண்டு} other {# ஆண்டுகள்}} முன்பு", "yes": "ஆம்", "you_dont_have_any_shared_links": "உங்களிடம் பகிரப்பட்ட இணைப்புகள் எதுவும் இல்லை", "your_wifi_name": "உங்கள் வைஃபை பெயர்", + "zero_to_clear_rating": "சொத்து மதிப்பீட்டை அழிக்க 0 ஐ அழுத்தவும்", "zoom_image": "பெரிதாக்க படம்", "zoom_to_bounds": "எல்லைக்கு பெரிதாக்கு" } diff --git a/i18n/te.json b/i18n/te.json index 73fbe25ac3..73288c1a8e 100644 --- a/i18n/te.json +++ b/i18n/te.json @@ -523,10 +523,6 @@ "date_range": "తేదీ పరిధి", "day": "రోజు", "deduplicate_all": "అన్నీ నకిలీలు తొలగించు", - "deduplication_criteria_1": "బైట్‌లలో చిత్ర పరిమాణం", - "deduplication_criteria_2": "EXIF డేటా సంఖ్య", - "deduplication_info": "నకిలీల తొలగింపు సమాచారం", - "deduplication_info_description": "ఆస్తులను స్వయంచాలకంగా ముందస్తుగా ఎంచుకోవడానికి మరియు నకిలీలను పెద్దమొత్తంలో తొలగించడానికి, మేము వీటిని పరిశీలిస్తాము:", "delete": "తొలగించు", "delete_album": "ఆల్బమ్‌ను తొలగించు", "delete_api_key_prompt": "మీరు ఈ API కీని ఖచ్చితంగా తొలగించాలనుకుంటున్నారా?", diff --git a/i18n/th.json b/i18n/th.json index 29c0b09628..c9766e0fce 100644 --- a/i18n/th.json +++ b/i18n/th.json @@ -864,10 +864,6 @@ "day": "วัน", "days": "วัน", "deduplicate_all": "รวมเข้าด้วยกันทั้งหมด", - "deduplication_criteria_1": "ขนาดไบต์ของรูปภาพ", - "deduplication_criteria_2": "จำนวนข้อมูล EXIF", - "deduplication_info": "ข้อมูลการขจัดข้อมูลซ้ำซ้อน", - "deduplication_info_description": "เลือกสื่อล่วงหน้าโดยอัตโนมัติและลบรายการซ้ำซ้อนจำนวนมาก เราจะดูที่:", "delete": "ลบออก", "delete_action_prompt": "ลบ {count} รายการแล้ว", "delete_album": "ลบอัลบั้ม", diff --git a/i18n/tr.json b/i18n/tr.json index afafe90647..391b0fca34 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -208,12 +208,12 @@ "manage_concurrency": "Aynı anda çalışmayı yönet", "manage_concurrency_description": "İş eşzamanlılığını yönetmek için işler sayfasına gidin", "manage_log_settings": "Günlük ayarlarını yönet", - "map_dark_style": "Koyu mod", + "map_dark_style": "Koyu stil", "map_enable_description": "Harita ayarlarını etkinleştir", "map_gps_settings": "Harita & GPS Ayarları", "map_gps_settings_description": "Harita Yönetimi & GPS (Ters Jeokodlama) Ayarları", "map_implications": "Harita özelliği, harici bir döşeme hizmetine (tiles.immich.cloud) bağlıdır", - "map_light_style": "Açık mod", + "map_light_style": "Açık stil", "map_manage_reverse_geocoding_settings": "Coğrafi Kodlama ayarlarını yönet", "map_reverse_geocoding": "Coğrafi Kodlama", "map_reverse_geocoding_enable_description": "Coğrafi Kodlamayı etkinleştir", @@ -866,6 +866,7 @@ "crop_aspect_ratio_fixed": "Sabitlenmiş", "crop_aspect_ratio_free": "Boş", "crop_aspect_ratio_original": "Orijinal", + "crop_aspect_ratio_square": "Kare", "curated_object_page_title": "Nesneler", "current_device": "Mevcut cihaz", "current_pin_code": "Mevcut PIN kodu", @@ -880,7 +881,7 @@ "daily_title_text_date": "dd MMM E", "daily_title_text_date_year": "dd MMM yyyy E", "dark": "Koyu", - "dark_theme": "Karanlık temaya geç", + "dark_theme": "Koyu temaya geç", "date": "Tarih", "date_after": "Sonraki tarih", "date_and_time": "Tarih ve Zaman", @@ -891,10 +892,8 @@ "day": "Gün", "days": "Günler", "deduplicate_all": "Tüm kopyaları kaldır", - "deduplication_criteria_1": "Resim boyutu (bayt olarak)", - "deduplication_criteria_2": "EXIF veri sayısı", - "deduplication_info": "Tekilleştirme Bilgileri", - "deduplication_info_description": "Öğeleri otomatik olarak önceden seçmek ve yinelenenleri toplu olarak kaldırmak için şunlara bakıyoruz:", + "default_locale": "Varsayılan Dil", + "default_locale_description": "Tarih ve sayıları tarayıcınızın yerel ayarlarına göre biçimlendirin", "delete": "Sil", "delete_action_confirmation_message": "Bu öğeyi silmek istediğinizden emin misiniz? Bu işlem, öğeyi sunucunun çöp kutusuna taşıyacak ve yerel olarak silmek isteyip istemediğinizi soracaktır", "delete_action_prompt": "{count} silindi", @@ -970,7 +969,7 @@ "downloading_media": "Medya indiriliyor", "drop_files_to_upload": "Dosyaları yüklemek için herhangi bir yere bırakın", "duplicates": "Kopyalar", - "duplicates_description": "Her grubu çözmek için, varsa hangilerinin kopya olduğunu belirtin", + "duplicates_description": "Her bir grubu, varsa tekrarlanan öğeleri belirterek çözümleyin.", "duration": "Süre", "edit": "Düzenle", "edit_album": "Albümü düzenle", @@ -1256,7 +1255,7 @@ "group_year": "Yıla göre grupla", "haptic_feedback_switch": "Dokunsal geri bildirimi aç", "haptic_feedback_title": "Dokunsal Geri Bildirim (Haptic Feedback)", - "has_quota": "Kota var", + "has_quota": "Kotası var", "hash_asset": "Karma öğe", "hashed_assets": "Karma öğeler", "hashing": "Hashleme", @@ -1387,9 +1386,11 @@ "library_page_sort_title": "Albüm başlığı", "licenses": "Lisanslar", "light": "Açık", + "light_theme": "Açık temaya geç", "like": "Beğen", "like_deleted": "Beğeni silindi", "link_motion_video": "Hareket videosunu bağla", + "link_to_docs": "Daha fazla bilgi için belgelere bakın.", "link_to_oauth": "OAuth'a bağla", "linked_oauth_account": "Bağlı OAuth hesabı", "list": "Liste", @@ -1498,7 +1499,7 @@ "map_no_location_permission_content": "Mevcut konumunuzdan öğeleri görüntülemek için konum iznine ihtiyaç var. Şimdi izin vermek istiyor musunuz?", "map_no_location_permission_title": "Konum izni reddedildi", "map_settings": "Harita ayarları", - "map_settings_dark_mode": "Koyu tema", + "map_settings_dark_mode": "Koyu mod", "map_settings_date_range_option_day": "Son 24 saat", "map_settings_date_range_option_days": "Son {days} gün", "map_settings_date_range_option_year": "Son yıl", @@ -1618,7 +1619,7 @@ "no_uploads_in_progress": "Yükleme işlemi yok", "none": "Yok", "not_allowed": "İzin verilmiyor", - "not_available": "YOK", + "not_available": "U/D", "not_in_any_album": "Hiçbir albümde değil", "not_selected": "Seçilmedi", "notes": "Notlar", @@ -1651,6 +1652,7 @@ "only_favorites": "Sadece favoriler", "open": "Aç", "open_calendar": "Takvimi aç", + "open_in_browser": "Tarayıcıda aç", "open_in_map_view": "Harita görünümünde aç", "open_in_openstreetmap": "OpenStreetMap'te Aç", "open_the_search_filters": "Arama filtrelerini aç", @@ -2393,6 +2395,7 @@ "viewer_remove_from_stack": "Yığından Kaldır", "viewer_stack_use_as_main_asset": "Ana fotoğraf olarak kullan", "viewer_unstack": "Yığını Kaldır", + "visibility": "Görünürlük", "visibility_changed": "Görünürlük {count, plural, one {# kişi} other {# kişi}} için değiştirildi", "visual": "Görsel", "visual_builder": "Görsel oluşturucu", diff --git a/i18n/uk.json b/i18n/uk.json index f1eb027637..c9ff3d568a 100644 --- a/i18n/uk.json +++ b/i18n/uk.json @@ -5,7 +5,7 @@ "acknowledge": "Прийняти", "action": "Дія", "action_common_update": "Оновити", - "action_description": "Набір дій, які потрібно виконати з відфільтрованими фото та відео", + "action_description": "Набір дій для виконання над відфільтрованими елементами", "actions": "Дії", "active": "Активний", "active_count": "Активні: {count}", @@ -13,18 +13,18 @@ "activity_changed": "Активність {enabled, select, true {увімкнено} other {вимкнено}}", "add": "Додати", "add_a_description": "Додати опис", - "add_a_location": "Додати місцезнаходження", + "add_a_location": "Додати місце", "add_a_name": "Додати ім'я", "add_a_title": "Додати назву", "add_action": "Додати дію", "add_action_description": "Натисніть, щоб додати дію", - "add_assets": "Додати файли", + "add_assets": "Додати елементи", "add_birthday": "Додати день народження", - "add_endpoint": "Додати адресу серверу", - "add_exclusion_pattern": "Додати шаблон виключення", + "add_endpoint": "Додати адресу сервера", + "add_exclusion_pattern": "Додати шаблон винятку", "add_filter": "Додати фільтр", "add_filter_description": "Натисніть, щоб додати умову фільтра", - "add_location": "Додати місцезнаходження", + "add_location": "Додати місце", "add_more_users": "Додати користувачів", "add_partner": "Додати партнера", "add_path": "Додати шлях", @@ -34,113 +34,113 @@ "add_to_album": "Додати до альбому", "add_to_album_bottom_sheet_added": "Додано до {album}", "add_to_album_bottom_sheet_already_exists": "Вже є в {album}", - "add_to_album_bottom_sheet_some_local_assets": "Деякі локальні файли не вдалося додати до альбому", + "add_to_album_bottom_sheet_some_local_assets": "Деякі локальні елементи не вдалося додати до альбому", "add_to_album_toggle": "Перемикання вибору для {album}", "add_to_albums": "Додати до альбомів", "add_to_albums_count": "Додати до альбомів ({count})", "add_to_bottom_bar": "Додати до", "add_to_shared_album": "Додати до спільного альбому", - "add_upload_to_stack": "Додати вивантаження в стек", + "add_upload_to_stack": "Додати вивантажений елемент до стеку", "add_url": "Додати URL", - "add_workflow_step": "Додати крок робочого процесу", + "add_workflow_step": "Додати крок автоматизації", "added_to_archive": "Додано до архіву", - "added_to_favorites": "Додано до обраного", - "added_to_favorites_count": "Додано {count, number} до обраного", + "added_to_favorites": "Додано до вибраного", + "added_to_favorites_count": "{count, plural, one {Додано # елемент до вибраного} few {Додано # елементи до вибраного} many {Додано # елементів до вибраного} other {Додано # елементів до вибраного}}", "admin": { - "add_exclusion_pattern_description": "Додати шаблони виключень. Підстановка з використанням *, ** та ? підтримується. Для ігнорування всіх файлів у будь-якому каталозі з ім'ям «Raw», використовуйте \"**/Raw/**\". Для ігнорування всіх файлів, що закінчуються на \".tif\", використовуйте \"**/*.tif\". Для ігнорування абсолютного шляху використовуйте \"/path/to/ignore/**\".", + "add_exclusion_pattern_description": "Додати шаблони винятків. Підстановка з використанням *, ** та ? підтримується. Щоб ігнорувати всі файли в будь-якій папці з назвою «Raw», використовуйте \"**/Raw/**\". Щоб ігнорувати всі файли, що закінчуються на \".tif\", використовуйте \"**/*.tif\". Щоб ігнорувати абсолютний шлях, використовуйте \"/path/to/ignore/**\".", "admin_user": "Адміністратор", - "asset_offline_description": "Цей файл зовнішньої бібліотеки не знайдено на диску і був переміщений до кошика. Якщо файл був переміщений у межах бібліотеки, перевірте свою стрічку на наявність нового відповідного файлу. Щоб відновити цей файл, переконайтеся, що шлях до файлу доступний для Immich, і проскануйте бібліотеку.", - "authentication_settings": "Налаштування аутентифікації", - "authentication_settings_description": "Керування паролями, OAuth та іншими налаштуваннями аутентифікації", - "authentication_settings_disable_all": "Ви впевнені, що хочете вимкнути всі методи входу? Вхід буде повністю вимкнений.", - "authentication_settings_reenable": "Для повторного ввімкнення використовуйте Команду сервера.", - "background_task_job": "Фонові Завдання", + "asset_offline_description": "Цей елемент зовнішньої бібліотеки більше не знайдено на диску, тому його переміщено до кошика. Якщо елемент було переміщено в межах бібліотеки, перевірте свою хронологію на наявність нового відповідного елемента. Щоб відновити цей елемент, переконайтеся, що шлях до нього доступний для Immich, і проскануйте бібліотеку.", + "authentication_settings": "Налаштування автентифікації", + "authentication_settings_description": "Керування паролями, OAuth та іншими налаштуваннями автентифікації", + "authentication_settings_disable_all": "Ви впевнені, що хочете вимкнути всі методи входу? Вхід буде повністю вимкнено.", + "authentication_settings_reenable": "Щоб повторно увімкнути, використовуйте Команду сервера.", + "background_task_job": "Фонові завдання", "backup_database": "Створити дамп бази даних", "backup_database_enable_description": "Увімкнути дампи бази даних", "backup_keep_last_amount": "Кількість попередніх дампів, які зберігати", "backup_onboarding_1_description": "віддалена копія у хмарі або в іншому фізичному місці.", - "backup_onboarding_2_description": "локальні копії на різних пристроях. Це включає оригінальні фото та відео і їх локальні резервні копії.", - "backup_onboarding_3_description": "загальні копії ваших даних, включаючи оригінальні фото та відео. Це включає 1 віддалену копію і 2 локальні копії.", - "backup_onboarding_description": "Рекомендовано дотримуватися стратегії резервного копіювання 3-2-1 для захисту ваших даних. Зберігайте копії вивантажених фото й відео, а також бази даних Immich, щоб забезпечити повноцінний захист та відновлення.", + "backup_onboarding_2_description": "локальні копії на різних пристроях. Це основні файли та їх локальні резервні копії.", + "backup_onboarding_3_description": "усього копій ваших даних, включно з оригінальними файлами. Це 1 віддалена копія та 2 локальні копії.", + "backup_onboarding_description": "Рекомендовано дотримуватися стратегії резервного копіювання 3-2-1 для захисту ваших даних. Зберігайте копії вивантажених фото й відео, а також бази даних Immich, щоб забезпечити повноцінне резервне копіювання.", "backup_onboarding_footer": "Докладніше про резервне копіювання Immich можна дізнатися з документації.", - "backup_onboarding_parts_title": "Резервне копіювання за стратегією 3-2-1 включає:", + "backup_onboarding_parts_title": "Резервне копіювання за стратегією 3-2-1 охоплює:", "backup_onboarding_title": "Резервні копії", "backup_settings": "Налаштування дампа бази даних", - "backup_settings_description": "Керувати налаштуваннями дампа бази даних.", - "cleared_jobs": "Очищені завдання для: {job}", + "backup_settings_description": "Керування налаштуваннями дампа бази даних.", + "cleared_jobs": "Очищено завдання для: {job}", "config_set_by_file": "Налаштовано за допомогою конфіг-файлу", - "confirm_delete_library": "Ви дійсно бажаєте видалити бібліотеку \"{library}\"?", - "confirm_delete_library_assets": "Ви впевнені, що хочете видалити цю бібліотеку? Це безповоротно видалить {count, plural, one {# файл} few {# файли} other {# файлів}} з Immich. Файли залишаться на диску.", - "confirm_email_below": "Для підтвердження введіть \"{email}\" нижче", - "confirm_reprocess_all_faces": "Ви впевнені, що хочете повторно визначити всі обличчя? Це також призведе до видалення імен з усіх облич.", + "confirm_delete_library": "Ви впевнені, що хочете видалити бібліотеку «{library}»?", + "confirm_delete_library_assets": "Ви впевнені, що хочете видалити цю бібліотеку? Це безповоротно видалить {count, plural, one {# наявний елемент} few {усі # наявні елементи} many {усі # наявних елементів} other {усі # наявних елементів}} з Immich. Файли залишаться на диску.", + "confirm_email_below": "Щоб підтвердити, введіть «{email}» нижче", + "confirm_reprocess_all_faces": "Ви впевнені, що хочете повторно визначити всі обличчя? Це також видалить усіх іменованих людей.", "confirm_user_password_reset": "Ви впевнені, що хочете скинути пароль користувача {user}?", - "confirm_user_pin_code_reset": "Ви впевнені, що хочете скинути PIN-код {user}?", + "confirm_user_pin_code_reset": "Ви впевнені, що хочете скинути PIN-код користувача {user}?", "copy_config_to_clipboard_description": "Скопіювати поточну конфігурацію системи як об'єкт JSON у буфер обміну", "create_job": "Створити завдання", - "cron_expression": "Cron вираз", - "cron_expression_description": "Встановіть інтервал сканування у форматі cron. Додаткова інформація: Crontab Guru", - "cron_expression_presets": "Попередні налаштування cron виразів", + "cron_expression": "Cron-вираз", + "cron_expression_description": "Установіть інтервал сканування у форматі cron. Додаткова інформація: Crontab Guru", + "cron_expression_presets": "Шаблони Cron-виразів", "disable_login": "Вимкнути вхід", - "duplicate_detection_job_description": "Запустити машинне навчання для виявлення схожих зображень. Використовує інтелектуальний пошук", - "exclusion_pattern_description": "Шаблони виключень дозволяють ігнорувати файли та папки під час сканування вашої бібліотеки. Це корисно, якщо у вас є папки, які містять файли, які ви не хочете імпортувати, наприклад, RAW-файли.", + "duplicate_detection_job_description": "Виконати машинне навчання для виявлення схожих зображень. Потребує розумного пошуку", + "exclusion_pattern_description": "Шаблони винятків дають змогу ігнорувати файли та папки під час сканування бібліотеки. Це корисно для папок із небажаними для імпорту файлами, наприклад файлами RAW.", "export_config_as_json_description": "Завантажити поточну конфігурацію системи у форматі JSON", "external_libraries_page_description": "Сторінка зовнішньої бібліотеки адміністратора", - "face_detection": "Виявлення обличчя", - "face_detection_description": "Виявлення облич на зображеннях за допомогою машинного навчання. Для відео обробляється лише мініатюра. \\\"Оновити\\\" повторно обробляє всі зображення. \\\"Скинути\\\" додатково очищає всі поточні дані про обличчя. \\\"Відсутні\\\" ставить у чергу зображення, які ще не були оброблені. Виявлені обличчя будуть поставлені в чергу для розпізнавання після завершення виявлення, групуючи їх у вже існуючих або нових людей.", - "facial_recognition_job_description": "Групування виявлених облич у людей. Цей крок виконується після завершення виявлення облич. \"Скинути\" повторно кластеризує всі обличчя. \"Відсутні\" ставить у чергу обличчя, яким ще не призначено людину.", - "failed_job_command": "Команда {command} не виконалася для завдання: {job}", - "force_delete_user_warning": "ПОПЕРЕДЖЕННЯ: Це негайно призведе до видалення користувача і всіх його файлів. Цю дію не можна скасувати, і файли не можна буде відновити.", + "face_detection": "Виявлення облич", + "face_detection_description": "Виявлення облич на елементах за допомогою машинного навчання. Для відео обробляється лише мініатюра. «Оновити» обробляє (або повторно обробляє) всі елементи. «Скинути» додатково очищає всі поточні дані про обличчя. «Відсутні» ставить у чергу елементи, які ще не було оброблено. Виявлені обличчя буде поставлено в чергу для розпізнавання після завершення виявлення, приєднуючи їх до наявних або нових людей.", + "facial_recognition_job_description": "Групування виявлених облич у людей. Цей крок виконується після завершення виявлення облич. «Скинути» повторно кластеризує всі обличчя. «Відсутні» ставить у чергу обличчя, яким ще не призначено людину.", + "failed_job_command": "Не вдалося виконати команду {command} для завдання: {job}", + "force_delete_user_warning": "ПОПЕРЕДЖЕННЯ: Це негайно видалить користувача та всі його елементи. Цю дію не можна скасувати, і файли не можна буде відновити.", "image_format": "Формат", - "image_format_description": "Формат WebP виробляє менші файли, ніж JPEG, але його кодування вимагає більше часу.", - "image_fullsize_description": "Повнорозмірне зображення з видаленими метаданими, які використовуються під час збільшення", + "image_format_description": "Формат WebP створює менші файли, ніж JPEG, але кодується повільніше.", + "image_fullsize_description": "Повнорозмірне зображення з видаленими метаданими, що використовується під час збільшення", "image_fullsize_enabled": "Увімкнути створення повнорозмірного зображення", - "image_fullsize_enabled_description": "Генерувати зображення повного розміру для форматів, не призначених для вебу. Якщо увімкнено \"Надавати перевагу вбудованому попередньому перегляду\", вбудовані попередні перегляди використовуються без конвертації. Не впливає на веб-дружні формати, такі як JPEG.", - "image_fullsize_quality_description": "Якість повнорозмірного зображення від 1 до 100. Чим вище значення, тим краще якість, але більше розмір файлу.", + "image_fullsize_enabled_description": "Створювати зображення повного розміру для форматів, не призначених для вебу. Якщо увімкнено «Надавати перевагу вбудованому попередньому перегляду», вбудовані попередні перегляди використовуються без перетворення. Не впливає на формати, сумісні з вебом, такі як JPEG.", + "image_fullsize_quality_description": "Якість повнорозмірного зображення від 1 до 100. Чим вище значення, тим краща якість, але більший розмір файлу.", "image_fullsize_title": "Налаштування повнорозмірного зображення", "image_prefer_embedded_preview": "Надавати перевагу вбудованому попередньому перегляду", - "image_prefer_embedded_preview_setting_description": "Використовувати вбудовані попередні перегляди в RAW-фотографіях як вхідні дані для обробки зображень, якщо вони доступні. Це може забезпечити точніші кольори для деяких зображень, але якість попереднього перегляду залежить від камери і зображення може містити більше артефактів стиснення.", - "image_prefer_wide_gamut": "Віддавати перевагу широкій гамі", - "image_prefer_wide_gamut_setting_description": "Для мініатюр використовуйте дисплей P3. Це краще зберігає яскравість зображень з широким колірним простором, але на старих пристроях зі старою версією браузера зображення можуть виглядати інакше. sRGB-зображення зберігаються у форматі sRGB, щоб уникнути зсуву кольорів.", - "image_preview_description": "Зображення середнього розміру без метаданих, яке використовується при перегляді окремого зображення та для машинного навчання", - "image_preview_quality_description": "Якість попереднього перегляду від 1 до 100. Вища оцінка означає кращу якість, але створює більші файли та може зменшити швидкість роботи застосунку. Низьке значення може вплинути на якість машинного навчання.", + "image_prefer_embedded_preview_setting_description": "Використовувати вбудовані попередні перегляди в RAW-фото як вхідні дані для обробки зображень, якщо вони доступні. Це може забезпечити точніші кольори для деяких зображень, але якість попереднього перегляду залежить від камери і зображення може містити більше артефактів стиснення.", + "image_prefer_wide_gamut": "Надавати перевагу широкій гамі", + "image_prefer_wide_gamut_setting_description": "Використовувати колірний простір Display P3 для мініатюр. Це краще зберігає насиченість кольорів зображень із широким колірним простором, але на застарілих пристроях із давньою версією браузера зображення можуть виглядати інакше. sRGB-зображення зберігаються у форматі sRGB, щоб уникнути зсуву кольорів.", + "image_preview_description": "Зображення середнього розміру без метаданих, яке використовується під час перегляду окремого елемента та для машинного навчання", + "image_preview_quality_description": "Якість попереднього перегляду від 1 до 100. Вище значення означає кращу якість, але створює більші файли та може зменшити швидкість роботи застосунку. Низьке значення може вплинути на якість машинного навчання.", "image_preview_title": "Налаштування попереднього перегляду", "image_progressive": "Прогресивний", - "image_progressive_description": "Кодуйте зображення JPEG поступово для поступового завантаження відображення. Це не впливає на зображення WebP.", + "image_progressive_description": "Кодувати зображення JPEG прогресивно для поступового завантаження. Це не впливає на зображення WebP.", "image_quality": "Якість", "image_resolution": "Роздільна здатність", "image_resolution_description": "Вища роздільна здатність може зберігати більше деталей, але займає більше часу для кодування, має більші розміри файлів і може зменшити швидкість роботи застосунку.", "image_settings": "Налаштування зображення", - "image_settings_description": "Керувати якістю та роздільною здатністю згенерованих зображень", - "image_thumbnail_description": "Маленька мініатюра із видаленими метаданими, що використовується для перегляду груп фотографій, наприклад, на основній лінії часу", - "image_thumbnail_quality_description": "Якість мініатюри від 1 до 100. Вища оцінка означає кращу якість, але створює більші файли та може зменшити швидкість роботи застосунку.", + "image_settings_description": "Керування якістю та роздільною здатністю створених зображень", + "image_thumbnail_description": "Маленька мініатюра із видаленими метаданими, що використовується для перегляду груп фото, наприклад, на основній хронології", + "image_thumbnail_quality_description": "Якість мініатюри від 1 до 100. Вище значення означає кращу якість, але створює більші файли та може зменшити швидкість роботи застосунку.", "image_thumbnail_title": "Налаштування мініатюр", - "import_config_from_json_description": "Імпортуйте конфігурацію системи, вивантаживши файл конфігурації JSON", - "job_concurrency": "{job} одночасно", + "import_config_from_json_description": "Імпортувати конфігурацію системи, вивантаживши файл конфігурації JSON", + "job_concurrency": "Паралельність {job}", "job_created": "Завдання створено", "job_not_concurrency_safe": "Це завдання не є безпечним для одночасного виконання.", "job_settings": "Налаштування завдань", "job_settings_description": "Керування паралельністю завдань", - "jobs_delayed": "{jobCount, plural, other {# відкладено}}", - "jobs_failed": "{jobCount, plural, other {# не вдалося}}", + "jobs_delayed": "{jobCount, plural, one {# завдання відкладено} few {# завдання відкладено} many {# завдань відкладено} other {# завдань відкладено}}", + "jobs_failed": "{jobCount, plural, one {# завдання не вдалося} few {# завдання не вдалося} many {# завдань не вдалося} other {# завдань не вдалося}}", "jobs_over_time": "Завдання за часом", - "library_created": "Створена бібліотека: {library}", + "library_created": "Створено бібліотеку: {library}", "library_deleted": "Бібліотеку видалено", "library_details": "Деталі бібліотеки", - "library_folder_description": "Вкажіть папку для імпорту. Ця папка, включаючи підпапки, буде просканована на наявність зображень та відео.", - "library_remove_exclusion_pattern_prompt": "Ви впевнені, що хочете видалити цей шаблон виключення?", + "library_folder_description": "Вкажіть папку для імпорту. Ця папка разом із підпапками буде просканована на наявність зображень та відео.", + "library_remove_exclusion_pattern_prompt": "Ви впевнені, що хочете вилучити цей шаблон винятку?", "library_remove_folder_prompt": "Ви впевнені, що хочете вилучити цю папку імпорту?", "library_scanning": "Періодичне сканування", - "library_scanning_description": "Налаштувати періодичне сканування бібліотеки", + "library_scanning_description": "Налаштування періодичного сканування бібліотеки", "library_scanning_enable_description": "Увімкнути періодичне сканування бібліотеки", "library_settings": "Зовнішня бібліотека", "library_settings_description": "Керування налаштуваннями зовнішніх бібліотек", - "library_tasks_description": "Сканувати зовнішні бібліотеки на наявність нових і/або змінених файлів", - "library_updated": "Оновлена бібліотека", + "library_tasks_description": "Сканувати зовнішні бібліотеки на наявність нових і/або змінених елементів", + "library_updated": "Оновлено бібліотеку", "library_watching_enable_description": "Відстежувати зміни файлів у зовнішніх бібліотеках", - "library_watching_settings": "Спостереження за бібліотекою [ЕКСПЕРИМЕНТАЛЬНЕ]", - "library_watching_settings_description": "Автоматичне спостереження за зміненими файлами", + "library_watching_settings": "Відстеження змін у бібліотеці [ЕКСПЕРИМЕНТАЛЬНО]", + "library_watching_settings_description": "Автоматичне відстеження змінених файлів", "logging_enable_description": "Увімкнути ведення журналу", - "logging_level_description": "Коли увімкнено, який рівень журналювання використовувати.", + "logging_level_description": "Рівень деталізації журналу, коли журналювання увімкнено.", "logging_settings": "Журналювання", "machine_learning_availability_checks": "Перевірки доступності", "machine_learning_availability_checks_description": "Автоматично виявляти та надавати перевагу доступним серверам машинного навчання", @@ -150,71 +150,71 @@ "machine_learning_availability_checks_timeout": "Тайм-аут запиту", "machine_learning_availability_checks_timeout_description": "Тайм-аут у мілісекундах для перевірки доступності", "machine_learning_clip_model": "Модель CLIP", - "machine_learning_clip_model_description": "Ім'я однієї з моделей CLIP, яка перерахована тут. Зауважте, що потрібно знову запустити завдання «Розумний пошук» для всіх зображень після зміни моделі.", + "machine_learning_clip_model_description": "Назва моделі CLIP зі списку тут. Зауважте, що потрібно повторно виконати завдання «Розумний пошук» для всіх зображень після зміни моделі.", "machine_learning_duplicate_detection": "Виявлення дублікатів", "machine_learning_duplicate_detection_enabled": "Увімкнути виявлення дублікатів", - "machine_learning_duplicate_detection_enabled_description": "Якщо вимкнено, абсолютно ідентичні файли все одно будуть видалені через дублювання.", - "machine_learning_duplicate_detection_setting_description": "Використовуйте вбудовування CLIP для пошуку ймовірних дублікатів", + "machine_learning_duplicate_detection_enabled_description": "Якщо вимкнено, абсолютно ідентичні елементи все одно буде виявлено як дублікати.", + "machine_learning_duplicate_detection_setting_description": "Пошук ймовірних дублікатів за допомогою CLIP-векторів", "machine_learning_enabled": "Увімкнути машинне навчання", - "machine_learning_enabled_description": "Якщо вимкнено, всі функції машинного навчання будуть вимкнені незалежно від налаштувань нижче.", + "machine_learning_enabled_description": "Якщо вимкнено, жодна з функцій машинного навчання не працюватиме, незалежно від налаштувань нижче.", "machine_learning_facial_recognition": "Розпізнавання облич", - "machine_learning_facial_recognition_description": "Виявляйте, розпізнавайте та групуйте обличчя на зображеннях", + "machine_learning_facial_recognition_description": "Виявлення, розпізнавання та групування облич на зображеннях", "machine_learning_facial_recognition_model": "Модель розпізнавання облич", - "machine_learning_facial_recognition_model_description": "Моделі відсортовані за зменшенням розміру. Більші моделі працюють повільніше, потребують більше пам'яті, але дають кращі результати. Зверніть увагу, що потрібно знову запустити завдання виявлення обличчя для всіх зображень після зміни моделі.", + "machine_learning_facial_recognition_model_description": "Моделі відсортовані за зменшенням розміру. Більші моделі працюють повільніше, потребують більше пам'яті, але дають кращі результати. Зверніть увагу, що потрібно повторно виконати завдання виявлення облич для всіх зображень після зміни моделі.", "machine_learning_facial_recognition_setting": "Увімкнути розпізнавання облич", - "machine_learning_facial_recognition_setting_description": "Якщо ця функція вимкнена, зображення не будуть кодуватися для розпізнавання облич і не будуть з'являтися в розділі \"Люди\" на сторінці \"Огляд\".", + "machine_learning_facial_recognition_setting_description": "Якщо вимкнено, зображення не кодуватимуться для розпізнавання облич і не з'являтимуться в розділі «Люди» на сторінці «Огляд».", "machine_learning_max_detection_distance": "Максимальна відстань виявлення", - "machine_learning_max_detection_distance_description": "Максимальна відстань між двома зображеннями, щоб вони вважалися дублікатами, варіюється від 0.001 до 0.1. Вищі значення дозволяють виявляти більше дублікатів, але можуть призводити до помилкових виявлень.", + "machine_learning_max_detection_distance_description": "Максимальна відстань між двома зображеннями, щоб вони вважалися дублікатами, варіюється від 0.001 до 0.1. Вищі значення дають змогу виявляти більше дублікатів, але можуть призводити до хибних спрацювань.", "machine_learning_max_recognition_distance": "Максимальна відстань розпізнавання", - "machine_learning_max_recognition_distance_description": "Максимальна відстань між двома обличчями, щоб їх вважати однією і тією ж самою людиною, варіюється від 0 до 2. Зниження цього значення може запобігти помилковому визначенню двох різних людей як однієї особи, тоді як підвищення його може запобігти помилковому визначенню однієї і тієї ж самої людини як двох різних осіб. Зверніть увагу, що легше об'єднати двох людей, ніж розділити одну людину на дві, тому рекомендується нахилитися на бік меншого порогу, коли це можливо.", + "machine_learning_max_recognition_distance_description": "Максимальна відстань між двома обличчями, щоб їх вважати тією самою людиною, варіюється від 0 до 2. Зниження цього значення може запобігти помилковому визначенню двох різних людей як однієї людини, тоді як підвищення його може запобігти помилковому визначенню тієї самої людини як двох різних людей. Зверніть увагу, що легше об'єднати двох людей, ніж розділити одну людину на дві, тому рекомендується обирати нижчий поріг, коли це можливо.", "machine_learning_min_detection_score": "Мінімальний показник виявлення", - "machine_learning_min_detection_score_description": "Мінімальний рівень впевненості для виявлення обличчя від 0 до 1. Нижчі значення дозволять виявляти більше облич, але можуть призводити до помилкових виявлень.", + "machine_learning_min_detection_score_description": "Мінімальний рівень достовірності для виявлення обличчя від 0 до 1. Нижчі значення дозволять виявляти більше облич, але можуть призводити до хибних спрацювань.", "machine_learning_min_recognized_faces": "Мінімум розпізнаних облич", - "machine_learning_min_recognized_faces_description": "Мінімальна кількість розпізнаних облич для створення особи. Збільшення цього параметру робить розпізнавання облич точнішим, але може збільшити ризик того, що обличчя не буде призначено особі.", + "machine_learning_min_recognized_faces_description": "Мінімальна кількість розпізнаних облич для створення людини. Збільшення цього параметра робить розпізнавання облич точнішим, але може збільшити ризик того, що обличчя не буде призначено людині.", "machine_learning_ocr": "OCR", - "machine_learning_ocr_description": "Використовуйте машинне навчання для розпізнавання тексту на зображеннях", + "machine_learning_ocr_description": "Розпізнавання тексту на зображеннях за допомогою машинного навчання", "machine_learning_ocr_enabled": "Увімкнути OCR", - "machine_learning_ocr_enabled_description": "Якщо вимкнено, зображення не розпізнаватимуться за допомогою тексту.", + "machine_learning_ocr_enabled_description": "Якщо вимкнено, текст на зображеннях не буде розпізнаватися.", "machine_learning_ocr_max_resolution": "Максимальна роздільна здатність", - "machine_learning_ocr_max_resolution_description": "Розмір попереднього перегляду з роздільною здатністю вище цієї буде змінено зі збереженням співвідношення сторін. Вищі значення точніші, але обробляються довше та використовують більше пам’яті.", - "machine_learning_ocr_min_detection_score": "Мінімальний бал виявлення", - "machine_learning_ocr_min_detection_score_description": "Мінімальний бал достовірності для виявлення тексту становить від 0 до 1. Нижчі значення дозволять виявити більше тексту, але можуть призвести до хибнопозитивних результатів.", - "machine_learning_ocr_min_recognition_score": "Мінімальний бал розпізнавання", - "machine_learning_ocr_min_score_recognition_description": "Мінімальний бал достовірності для розпізнавання виявленого тексту становить від 0 до 1. Нижчі значення розпізнають більше тексту, але можуть призвести до хибнопозитивних результатів.", + "machine_learning_ocr_max_resolution_description": "Попередні перегляди з роздільною здатністю вищою за вказану буде зменшено зі збереженням пропорцій. Вищі значення точніші, але обробляються довше та використовують більше пам’яті.", + "machine_learning_ocr_min_detection_score": "Мінімальний показник виявлення", + "machine_learning_ocr_min_detection_score_description": "Мінімальний рівень достовірності для виявлення тексту від 0 до 1. Нижчі значення даватимуть змогу виявити більше тексту, але можуть призвести до хибних спрацювань.", + "machine_learning_ocr_min_recognition_score": "Мінімальний показник розпізнавання", + "machine_learning_ocr_min_score_recognition_description": "Мінімальний рівень достовірності для розпізнавання виявленого тексту від 0 до 1. Нижчі значення розпізнають більше тексту, але можуть призвести до хибних спрацювань.", "machine_learning_ocr_model": "Модель OCR", "machine_learning_ocr_model_description": "Серверні моделі точніші за мобільні, але обробляють дані довше та використовують більше пам'яті.", "machine_learning_settings": "Налаштування машинного навчання", "machine_learning_settings_description": "Керування функціями та налаштуваннями машинного навчання", "machine_learning_smart_search": "Розумний пошук", - "machine_learning_smart_search_description": "Пошук зображень за допомогою семантичних вбудовувань CLIP", + "machine_learning_smart_search_description": "Семантичний пошук зображень за допомогою CLIP-векторів", "machine_learning_smart_search_enabled": "Увімкнути розумний пошук", - "machine_learning_smart_search_enabled_description": "Якщо ця функція вимкнена, зображення не будуть кодуватися для розумного пошуку.", - "machine_learning_url_description": "URL сервера машинного навчання. Якщо надано більше одного URL, сервери будуть опитуватися по черзі, поки один з них не відповість успішно, у порядку від першого до останнього. Сервери, які не відповідають, будуть тимчасово ігноруватися, поки не стануть доступними.", + "machine_learning_smart_search_enabled_description": "Якщо вимкнено, зображення не кодуватимуться для розумного пошуку.", + "machine_learning_url_description": "URL сервера машинного навчання. Якщо надано більше одного URL, сервери опитуватимуться по черзі, поки один з них не відповість успішно, у порядку від першого до останнього. Сервери, які не відповідають, тимчасово ігноруватимуться, поки не стануть доступними.", "maintenance_delete_backup": "Видалити резервну копію", "maintenance_delete_backup_description": "Цей файл буде безповоротно видалено.", "maintenance_delete_error": "Не вдалося видалити резервну копію.", - "maintenance_restore_backup": "Відновлення резервної копії", + "maintenance_restore_backup": "Відновити резервну копію", "maintenance_restore_backup_description": "Immich буде стерто та відновлено з вибраної резервної копії. Перед продовженням буде створено резервну копію.", "maintenance_restore_backup_different_version": "Цю резервну копію було створено за допомогою іншої версії Immich!", "maintenance_restore_backup_unknown_version": "Не вдалося визначити версію резервної копії.", - "maintenance_restore_database_backup": "Відновлення резервної копії бази даних", - "maintenance_restore_database_backup_description": "Відкат до попереднього стану бази даних за допомогою файлу резервної копії", - "maintenance_settings": "Технічне обслуговування", - "maintenance_settings_description": "Переведення Immich у режим технічного обслуговування", - "maintenance_start": "Перехід у режим технічного обслуговування", - "maintenance_start_error": "Не вдалося запустити режим обслуговування.", + "maintenance_restore_database_backup": "Відновити резервну копію бази даних", + "maintenance_restore_database_backup_description": "Повернення до попереднього стану бази даних за допомогою файлу резервної копії", + "maintenance_settings": "Обслуговування", + "maintenance_settings_description": "Переведення Immich у режим обслуговування", + "maintenance_start": "Перейти в режим обслуговування", + "maintenance_start_error": "Не вдалося увімкнути режим обслуговування.", "maintenance_upload_backup": "Вивантажити файл резервної копії бази даних", "maintenance_upload_backup_error": "Не вдалося вивантажити резервну копію, це файл .sql/.sql.gz?", "manage_concurrency": "Керування паралельністю завдань", - "manage_concurrency_description": "Перехід до сторінки завдань для керування паралельністю", + "manage_concurrency_description": "Перейдіть до сторінки завдань, щоб керувати паралельністю", "manage_log_settings": "Керування налаштуваннями журналу", "map_dark_style": "Темний стиль", "map_enable_description": "Увімкнути функції мапи", - "map_gps_settings": "Налаштування мапи та геолокації", - "map_gps_settings_description": "Керування налаштуваннями мапи та геолокації (зворотний геокодинг)", - "map_implications": "Функція мапи використовує зовнішній сервіс плиток (tiles.immich.cloud)", + "map_gps_settings": "Налаштування мапи та GPS", + "map_gps_settings_description": "Керування налаштуваннями мапи та GPS (зворотне геокодування)", + "map_implications": "Функція мапи використовує зовнішню службу тайлів (tiles.immich.cloud)", "map_light_style": "Світлий стиль", - "map_manage_reverse_geocoding_settings": "Керувати налаштуваннями зворотного геокодування", + "map_manage_reverse_geocoding_settings": "Керування налаштуваннями зворотного геокодування", "map_reverse_geocoding": "Зворотне геокодування", "map_reverse_geocoding_enable_description": "Увімкнути зворотне геокодування", "map_reverse_geocoding_settings": "Налаштування зворотного геокодування", @@ -222,23 +222,23 @@ "map_settings_description": "Керування налаштуваннями мапи", "map_style_description": "URL до теми мапи у форматі style.json", "memory_cleanup_job": "Очищення спогадів", - "memory_generate_job": "Генерація спогадів", - "metadata_extraction_job": "Витягнути метадані", - "metadata_extraction_job_description": "Видобування метаданих: геодані, розпізнані обличчя та роздільна здатність", + "memory_generate_job": "Створення спогадів", + "metadata_extraction_job": "Видобування метаданих", + "metadata_extraction_job_description": "Видобування метаданих з кожного елемента, зокрема: GPS-координати, обличчя та роздільна здатність", "metadata_faces_import_setting": "Увімкнути імпорт облич", - "metadata_faces_import_setting_description": "Імпортувати обличчя з EXIF-даних зображень та sidecar-файлів", + "metadata_faces_import_setting_description": "Імпортувати обличчя з Exif-даних зображень та sidecar-файлів", "metadata_settings": "Налаштування метаданих", "metadata_settings_description": "Керування налаштуваннями метаданих", "migration_job": "Міграція", - "migration_job_description": "Перенесення мініатюр файлів та обличь до оновленої структури папок", - "nightly_tasks_cluster_faces_setting_description": "Запустити розпізнавання облич на щойно виявлених обличчях", + "migration_job_description": "Перенесення мініатюр елементів та облич до оновленої структури папок", + "nightly_tasks_cluster_faces_setting_description": "Виконання розпізнавання облич для нещодавно виявлених облич", "nightly_tasks_cluster_new_faces_setting": "Групувати нові обличчя", "nightly_tasks_database_cleanup_setting": "Завдання з очищення бази даних", "nightly_tasks_database_cleanup_setting_description": "Видалення старих і прострочених даних із бази даних", - "nightly_tasks_generate_memories_setting": "Створити спогади", - "nightly_tasks_generate_memories_setting_description": "Автоматично створювати нові спогади з наявних фото та відео щоночі", + "nightly_tasks_generate_memories_setting": "Створювати спогади", + "nightly_tasks_generate_memories_setting_description": "Створювати нові спогади з елементів", "nightly_tasks_missing_thumbnails_setting": "Створити відсутні мініатюри", - "nightly_tasks_missing_thumbnails_setting_description": "Черга для створення мініатюр для фото та відео без мініатюр", + "nightly_tasks_missing_thumbnails_setting_description": "Поставити в чергу на створення мініатюр елементи, які їх не мають", "nightly_tasks_settings": "Налаштування нічних завдань", "nightly_tasks_settings_description": "Керування нічними завданнями", "nightly_tasks_start_time_setting": "Час початку", @@ -247,33 +247,33 @@ "nightly_tasks_sync_quota_usage_setting_description": "Оновити квоту сховища користувача на основі поточного використання", "no_paths_added": "Шляхи не додано", "no_pattern_added": "Шаблон не додано", - "note_apply_storage_label_previous_assets": "Примітка: Щоб застосувати мітку зберігання до раніше вивантажених файлів, запустити", + "note_apply_storage_label_previous_assets": "Примітка: Щоб застосувати мітку зберігання до раніше вивантажених елементів, виконайте", "note_cannot_be_changed_later": "ПРИМІТКА: Це не можна змінити пізніше!", - "notification_email_from_address": "Адреса надсилача", - "notification_email_from_address_description": "Адреса електронної пошти надсилача, наприклад: \"Immich Photo Server \". Переконайтеся, що використовуєте адресу, з якої вам дозволено надсилати листи.", + "notification_email_from_address": "Адреса відправника", + "notification_email_from_address_description": "Адреса електронної пошти відправника, наприклад: \"Immich Photo Server \". Переконайтеся, що використовуєте адресу, з якої вам дозволено надсилати листи.", "notification_email_host_description": "Адреса поштового сервера (наприклад, smtp.immich.app)", "notification_email_ignore_certificate_errors": "Ігнорувати помилки сертифіката", "notification_email_ignore_certificate_errors_description": "Ігнорувати помилки перевірки сертифікатів TLS (не рекомендується)", - "notification_email_password_description": "Пароль для аутентифікації на поштовому сервері", + "notification_email_password_description": "Пароль для автентифікації на поштовому сервері", "notification_email_port_description": "Порт поштового сервера (наприклад, 25, 465 або 587)", "notification_email_secure": "SMTPS", "notification_email_secure_description": "Використовувати SMTPS (SMTP через TLS)", "notification_email_sent_test_email_button": "Надіслати тестовий лист і зберегти", - "notification_email_setting_description": "Налаштування для надсилання email-повідомлень", + "notification_email_setting_description": "Налаштування надсилання сповіщень електронною поштою", "notification_email_test_email": "Надіслати тестовий лист", - "notification_email_test_email_failed": "Не вдалося надіслати тестовий лист. Перевірте ваші значення", - "notification_email_test_email_sent": "Тестовий лист було надіслано на {email}. Будь ласка, перевірте свою скриньку вхідних.", + "notification_email_test_email_failed": "Не вдалося надіслати тестовий лист. Перевірте введені значення", + "notification_email_test_email_sent": "Тестовий лист було надіслано на {email}. Перевірте вхідну пошту.", "notification_email_username_description": "Ім'я користувача для автентифікації на поштовому сервері", "notification_enable_email_notifications": "Увімкнути сповіщення електронною поштою", "notification_settings": "Налаштування сповіщень", - "notification_settings_description": "Керування налаштуваннями сповіщень, включно із електронною поштою", + "notification_settings_description": "Керування налаштуваннями сповіщень, включно з електронною поштою", "oauth_auto_launch": "Автозапуск", - "oauth_auto_launch_description": "Автоматично запускати процес входу через OAuth при переході на сторінку входу", + "oauth_auto_launch_description": "Автоматично розпочинати вхід через OAuth під час переходу на сторінку входу", "oauth_auto_register": "Автоматична реєстрація", "oauth_auto_register_description": "Автоматично реєструвати нових користувачів після входу через OAuth", "oauth_button_text": "Текст кнопки", "oauth_client_secret_description": "Обов'язково для конфіденційного клієнта або якщо PKCE (ключ підтвердження для обміну кодом) не підтримується для публічного клієнта.", - "oauth_enable_description": "Увійти за допомогою OAuth", + "oauth_enable_description": "Вхід за допомогою OAuth", "oauth_mobile_redirect_uri": "URI мобільного перенаправлення", "oauth_mobile_redirect_uri_override": "Перевизначення URI мобільного перенаправлення", "oauth_mobile_redirect_uri_override_description": "Увімкнути, якщо OAuth-провайдер не підтримує мобільний URI, як ''{callback}''", @@ -281,31 +281,31 @@ "oauth_role_claim_description": "Автоматично надавати права адміністратора на основі наявності цього атрибуту. Цей атрибут може містити значення ‘user’ або ‘admin’.", "oauth_settings": "OAuth", "oauth_settings_description": "Керування налаштуваннями входу через OAuth", - "oauth_settings_more_details": "Для отримання додаткової інформації про цю функцію, зверніться до документації.", - "oauth_storage_label_claim": "Тег папки сховища", - "oauth_storage_label_claim_description": "Автоматично встановити мітку зберігання користувача на значення цієї вимоги.", - "oauth_storage_quota_claim": "Заявка на квоту на зберігання", - "oauth_storage_quota_claim_description": "Автоматично встановити квоту сховища користувача на значення цієї вимоги.", - "oauth_storage_quota_default": "Квота за замовчуванням (GiB)", - "oauth_storage_quota_default_description": "Квота в GiB, що використовується, коли налаштування не надано.", + "oauth_settings_more_details": "Щоб дізнатися більше про цю функцію, зверніться до документації.", + "oauth_storage_label_claim": "Атрибут мітки зберігання", + "oauth_storage_label_claim_description": "Автоматично установити мітку зберігання користувача на значення цього атрибуту.", + "oauth_storage_quota_claim": "Атрибут квоти сховища", + "oauth_storage_quota_claim_description": "Автоматично установити квоту сховища користувача на значення цього атрибуту.", + "oauth_storage_quota_default": "Типова квота сховища (GiB)", + "oauth_storage_quota_default_description": "Квота в GiB, що використовується, коли атрибут не надано.", "oauth_timeout": "Тайм-аут для запитів", "oauth_timeout_description": "Максимальний час очікування відповіді в мілісекундах", - "ocr_job_description": "Використовуйте машинне навчання для розпізнавання тексту на зображеннях", - "password_enable_description": "Увійти за електронною поштою та паролем", - "password_settings": "Налаштування входу з паролем", + "ocr_job_description": "Розпізнавання тексту на зображеннях за допомогою машинного навчання", + "password_enable_description": "Вхід за допомогою електронної пошти та пароля", + "password_settings": "Вхід за паролем", "password_settings_description": "Керування налаштуваннями входу за паролем", - "paths_validated_successfully": "Усі шляхи успішно перевірено", - "person_cleanup_job": "Очищення особи", + "paths_validated_successfully": "Усі шляхи перевірено", + "person_cleanup_job": "Очищення даних людей", "queue_details": "Деталі черги", "queues": "Черги завдань", "queues_page_description": "Сторінка черг завдань адміністратора", "quota_size_gib": "Розмір квоти (GiB)", "refreshing_all_libraries": "Оновлення всіх бібліотек", "registration": "Реєстрація адміністратора", - "registration_description": "Оскільки ви перший користувач в системі, ви будете призначені Адміністратором і відповідатимете за адміністративні завдання, а додаткові користувачі будуть створені вами.", + "registration_description": "Оскільки ви перший користувач у системі, вас буде призначено адміністратором і ви відповідатимете за адміністративні завдання, а додаткових користувачів створюватимете ви.", "remove_failed_jobs": "Вилучити невдалі завдання", - "require_password_change_on_login": "Вимагати зміни пароля користувача при першому вході", - "reset_settings_to_default": "Скинути налаштування до початкових значень", + "require_password_change_on_login": "Зобов'язувати користувача змінити пароль під час першого входу", + "reset_settings_to_default": "Скинути налаштування до типових", "reset_settings_to_recent_saved": "Скинути налаштування до недавно збережених налаштувань", "scanning_library": "Сканування бібліотеки", "search_jobs": "Пошук завдань…", @@ -321,130 +321,130 @@ "server_welcome_message_description": "Повідомлення, яке відображається на сторінці входу.", "settings_page_description": "Сторінка налаштувань адміністратора", "sidecar_job": "Метадані з sidecar-файлів", - "sidecar_job_description": "Пошук або синхронізація сайдкар-метаданих з файлової системи", + "sidecar_job_description": "Пошук або синхронізація sidecar-метаданих з файлової системи", "slideshow_duration_description": "Кількість секунд для відображення кожного зображення", - "smart_search_job_description": "Розпізнає вміст файлів для розумного пошуку", - "storage_template_date_time_description": "Датою та часом є позначка часу створення файлу", - "storage_template_date_time_sample": "Час вибірки {date}", - "storage_template_enable_description": "Ввімкнути механізм шаблонів сховища", + "smart_search_job_description": "Виконання машинного навчання на елементах щоб підтримувати розумний пошук", + "storage_template_date_time_description": "Для визначення дати і часу використовується мітка часу створення елемента", + "storage_template_date_time_sample": "Приклад часу {date}", + "storage_template_enable_description": "Увімкнути механізм шаблонів сховища", "storage_template_hash_verification_enabled": "Увімкнено перевірку хешу", - "storage_template_hash_verification_enabled_description": "Увімкнути перевірку хеша. Не вимикайте це, якщо ви не впевнені в наслідках", + "storage_template_hash_verification_enabled_description": "Увімкнути перевірку хешу. Не вимикайте це, якщо ви не впевнені в наслідках", "storage_template_migration": "Міграція шаблонів сховища", - "storage_template_migration_description": "Застосувати поточний {template} до раніше вивантажених файлів", - "storage_template_migration_info": "Шаблон зберігання конвертуватиме всі розширення у нижній регістр. Зміни шаблону застосовуватимуться лише до нових файлів. Щоб застосувати шаблон до раніше вивантажених файлів, запустіть {job}.", - "storage_template_migration_job": "Завдання міграції шаблону зберігання", - "storage_template_more_details": "Для отримання детальнішої інформації про цю функцію, звертайтесь до Шаблону зберігання та його наслідків", - "storage_template_onboarding_description_v2": "Якщо цю функцію увімкнено, файли будуть автоматично впорядковуватися за шаблоном, визначеним користувачем. Докладніше дивіться в документації.", + "storage_template_migration_description": "Застосувати поточний {template} до раніше вивантажених елементів", + "storage_template_migration_info": "Шаблон сховища перетворюватиме всі розширення на нижній регістр. Зміни шаблону застосовуватимуться лише до нових елементів. Щоб застосувати шаблон до раніше вивантажених елементів, виконайте {job}.", + "storage_template_migration_job": "Завдання міграції шаблону сховища", + "storage_template_more_details": "Щоб дізнатися більше про цю функцію, зверніться до Шаблону сховища та його наслідків", + "storage_template_onboarding_description_v2": "Якщо цю функцію увімкнено, файли автоматично впорядковуватимуться за шаблоном, визначеним користувачем. Докладніше дивіться в документації.", "storage_template_path_length": "Приблизна максимальна довжина шляху: {length, number}/{limit, number}", "storage_template_settings": "Шаблон сховища", - "storage_template_settings_description": "Керування структурою папок та іменами вивантажених файлів", - "storage_template_user_label": "{label} - це мітка зберігання користувача", + "storage_template_settings_description": "Керування структурою папок та назвами файлів вивантажених елементів", + "storage_template_user_label": "{label} — це мітка сховища користувача", "system_settings": "Системні налаштування", "tag_cleanup_job": "Очищення тегів", - "template_email_available_tags": "Ви можете використовувати наступні змінні у своєму шаблоні: {tags}", - "template_email_if_empty": "Якщо шаблон порожній, буде використано стандартний електронний лист.", + "template_email_available_tags": "Ви можете використовувати такі змінні у своєму шаблоні: {tags}", + "template_email_if_empty": "Якщо шаблон порожній, буде використано типовий електронний лист.", "template_email_invite_album": "Шаблон запрошення до альбому", - "template_email_preview": "Перегляд", + "template_email_preview": "Попередній перегляд", "template_email_settings": "Шаблони електронних листів", - "template_email_update_album": "Оновити шаблон альбому", + "template_email_update_album": "Шаблон оновлення альбому", "template_email_welcome": "Шаблон вітального електронного листа", - "template_settings": "Шаблони повідомлень", - "template_settings_description": "Керувати шаблонами для повідомлень", - "theme_custom_css_settings": "Власний CSS", - "theme_custom_css_settings_description": "Каскадні таблиці стилів дозволяють настроювати дизайн Immich.", - "theme_settings": "Налаштування теми", - "theme_settings_description": "Налаштування персоналізації веб-інтерфейсу Immich", + "template_settings": "Шаблони сповіщень", + "template_settings_description": "Керування довільними шаблонами для сповіщень", + "theme_custom_css_settings": "Довільний CSS", + "theme_custom_css_settings_description": "Каскадні таблиці стилів дають змогу налаштовувати дизайн Immich.", + "theme_settings": "Налаштування теми оформлення", + "theme_settings_description": "Налаштування вигляду веб-інтерфейсу Immich", "thumbnail_generation_job": "Створення мініатюр", - "thumbnail_generation_job_description": "Створити великі, малі та розмиті мініатюри для кожного фото та відео, а також мініатюри для кожної особи", + "thumbnail_generation_job_description": "Створити великі, малі та розмиті мініатюри для кожного елемента, а також мініатюри для кожної людини", "transcoding_acceleration_api": "API прискорення", - "transcoding_acceleration_api_description": "API, яка буде взаємодіяти з вашим пристроєм для прискорення транскодування. Це налаштування працює у \"найкращих умовах\" і, в разі невдачі, перейде на програмне транскодування. Підтримка VP9 може або не може працювати, залежно від вашого обладнання.", - "transcoding_acceleration_nvenc": "NVENC (вимагає графічного процесора NVIDIA)", - "transcoding_acceleration_qsv": "Швидка синхронізація (потрібен процесор Intel 7-го покоління або новішої версії)", - "transcoding_acceleration_rkmpp": "RKMPP (тільки на SOC Rockchip)", + "transcoding_acceleration_api_description": "API, який буде взаємодіяти з вашим пристроєм для прискорення транскодування. Це налаштування не гарантує результат: у разі невдачі буде використано програмне транскодування. Підтримка VP9 може працювати або ні, залежно від вашого обладнання.", + "transcoding_acceleration_nvenc": "NVENC (потребує графічного процесора NVIDIA)", + "transcoding_acceleration_qsv": "Intel Quick Sync (потрібен процесор Intel 7-го покоління або новіший)", + "transcoding_acceleration_rkmpp": "RKMPP (лише на SoC Rockchip)", "transcoding_acceleration_vaapi": "VAAPI", "transcoding_accepted_audio_codecs": "Прийняті аудіокодеки", "transcoding_accepted_audio_codecs_description": "Виберіть аудіокодеки, які не потребують транскодування. Використовується лише для певних політик транскодування.", "transcoding_accepted_containers": "Прийняті контейнери", - "transcoding_accepted_containers_description": "Виберіть, які формати контейнерів не потрібно перетворювати в MP4. Використовується лише для певних політик перекодування.", + "transcoding_accepted_containers_description": "Виберіть, які формати контейнерів не потрібно перепакувати в MP4. Використовується лише для певних політик транскодування.", "transcoding_accepted_video_codecs": "Прийняті відеокодеки", "transcoding_accepted_video_codecs_description": "Виберіть відеокодеки, які не потребують транскодування. Використовується лише для певних політик транскодування.", "transcoding_advanced_options_description": "Параметри, які більшості користувачів не потрібно змінювати", "transcoding_audio_codec": "Аудіокодек", - "transcoding_audio_codec_description": "Opus - це опція найвищої якості, але менше сумісна зі старими пристроями або програмним забезпеченням.", + "transcoding_audio_codec_description": "Opus — варіант найвищої якості, але має нижчу сумісність зі старими пристроями або програмами.", "transcoding_bitrate_description": "Відео з бітрейтом вище максимального або не в прийнятому форматі", - "transcoding_codecs_learn_more": "Для отримання додаткової інформації про термінологію, що використовується тут, звертайтеся до документації FFmpeg для кодеків H.264, HEVC та VP9.", + "transcoding_codecs_learn_more": "Щоб дізнатися більше про термінологію, що використовується тут, звертайтеся до документації FFmpeg для кодеків H.264, HEVC та VP9.", "transcoding_constant_quality_mode": "Режим постійної якості", - "transcoding_constant_quality_mode_description": "ICQ краще, ніж CQP, але деякі пристрої апаратного прискорення не підтримують цей режим. Встановлення цього параметра буде віддавати перевагу зазначеному режиму під час кодування на основі якості. Ігнорується NVENC, оскільки він не підтримує ICQ.", - "transcoding_constant_rate_factor": "Коефіцієнт постійної якості (-crf)", + "transcoding_constant_quality_mode_description": "ICQ забезпечує кращу якість, ніж CQP, але деякі пристрої апаратного прискорення не підтримують цей режим. Установлення цього параметра надаватиме перевагу зазначеному режиму під час кодування на основі якості. NVENC ігнорує цей параметр, оскільки не підтримує ICQ.", + "transcoding_constant_rate_factor": "Фактор постійної якості (-crf)", "transcoding_constant_rate_factor_description": "Рівень якості відео. Зазвичай значення для H.264 - 23, HEVC - 28, VP9 - 31, AV1 - 35. Нижче значення краще, але створює більші файли.", "transcoding_disabled_description": "Без транскодування відео — може призвести до проблем з відтворенням на деяких клієнтах", "transcoding_encoding_options": "Параметри кодування", "transcoding_encoding_options_description": "Налаштування кодеків, роздільної здатності, якості та інших параметрів для кодованих відео", "transcoding_hardware_acceleration": "Апаратне прискорення", - "transcoding_hardware_acceleration_description": "Експериментально: швидше перекодування, але може знижувати якість при тому самому бітрейті", + "transcoding_hardware_acceleration_description": "Експериментально: швидше транскодування, але може знижувати якість за того самого бітрейту", "transcoding_hardware_decoding": "Апаратне декодування", "transcoding_hardware_decoding_setting_description": "Увімкнення наскрізного прискорення замість прискорення лише кодування. Може не працювати для всіх відео.", - "transcoding_max_b_frames": "Максимальна кількість проміжних кадрів", - "transcoding_max_b_frames_description": "Вищі значення покращують ефективність стиснення, але збільшують час кодування. Можуть бути несумісні з апаратним прискоренням на старих пристроях. Значення 0 вимикає B-фрейми, а -1 автоматично налаштовує це значення.", + "transcoding_max_b_frames": "Максимальна кількість B-кадрів", + "transcoding_max_b_frames_description": "Вищі значення покращують ефективність стиснення, але збільшують час кодування. Можуть бути несумісні з апаратним прискоренням на старих пристроях. Значення 0 вимикає B-кадри, а -1 визначає цей параметр автоматично.", "transcoding_max_bitrate": "Максимальний бітрейт", - "transcoding_max_bitrate_description": "Встановлення максимальної швидкості передачі даних може зробити розміри файлів більш передбачуваними за незначної втрати якості. При роздільній здатності 720p типові значення становлять 2600 кбіт/с для VP9 або HEVC, або 4500 кбіт/с для H.264. Вимкнено, якщо встановлено значення 0. Якщо одиниця виміру не вказана, приймається k (для кбіт/с); отже, 5000, 5000k і 5M (для Мбіт/с) є еквівалентними.", + "transcoding_max_bitrate_description": "Установлення максимального бітрейту може зробити розмір файлів більш передбачуваним за незначної втрати якості. За роздільної здатності 720p типові значення становлять 2600 кбіт/с для VP9 або HEVC, або 4500 кбіт/с для H.264. Вимкнено, якщо установлено значення 0. Якщо одиниця виміру не вказана, приймається k (для кбіт/с); отже, 5000, 5000k і 5M (для Мбіт/с) є еквівалентними.", "transcoding_max_keyframe_interval": "Максимальний інтервал ключових кадрів", - "transcoding_max_keyframe_interval_description": "Встановлює максимальну відстань між ключовими кадрами. Нижчі значення погіршують ефективність стиснення, але покращують час пошуку і можуть покращити якість в сценах з швидкими рухами. Значення 0 автоматично встановлює це значення.", + "transcoding_max_keyframe_interval_description": "Установлює максимальну відстань між ключовими кадрами. Нижчі значення погіршують ефективність стиснення, але покращують час перемотування і можуть покращити якість у сценах зі швидкими рухами. Значення 0 визначає цей параметр автоматично.", "transcoding_optimal_description": "Відео з роздільною здатністю вище цільової або не в прийнятому форматі", "transcoding_policy": "Політика транскодування", "transcoding_policy_description": "Визначає, коли відео буде транскодовано", - "transcoding_preferred_hardware_device": "Переважний апаратний пристрій", - "transcoding_preferred_hardware_device_description": "Застосовується тільки до VAAPI і QSV. Встановлює вузол DRI, який використовується для апаратного транскодування.", - "transcoding_preset_preset": "Параметр (-preset)", - "transcoding_preset_preset_description": "Швидкість стиснення. Повільніші пресети створюють менші файли і підвищують якість при певному бітрейті. VP9 ігнорує швидкості вище 'швидше'.", - "transcoding_reference_frames": "Основні кадри", - "transcoding_reference_frames_description": "Кількість кадрів, на які посилається при стисненні даного кадру. Вищі значення покращують ефективність стиснення, але збільшують час кодування. Значення 0 автоматично налаштовує це значення.", - "transcoding_required_description": "Лише відео, що не у прийнятому форматі", + "transcoding_preferred_hardware_device": "Бажаний апаратний пристрій", + "transcoding_preferred_hardware_device_description": "Застосовується лише до VAAPI і QSV. Установлює вузол DRI, який використовується для апаратного транскодування.", + "transcoding_preset_preset": "Пресет (-preset)", + "transcoding_preset_preset_description": "Швидкість стиснення. Повільніші пресети створюють менші файли і підвищують якість за певного бітрейту. VP9 ігнорує швидкості вище 'faster'.", + "transcoding_reference_frames": "Опорні кадри", + "transcoding_reference_frames_description": "Кількість кадрів, на які посилається під час стиснення певного кадру. Вищі значення покращують ефективність стиснення, але збільшують час кодування. Значення 0 визначає цей параметр автоматично.", + "transcoding_required_description": "Лише відео, що не мають прийнятного формату", "transcoding_settings": "Налаштування транскодування відео", - "transcoding_settings_description": "Керування які відео транскодувати і як їх обробляти", - "transcoding_target_resolution": "Роздільна здатність", + "transcoding_settings_description": "Керування тим, які відео транскодувати і як їх обробляти", + "transcoding_target_resolution": "Цільова роздільна здатність", "transcoding_target_resolution_description": "Вищі роздільні здатності можуть зберігати більше деталей, але займають більше часу на кодування, мають більші розміри файлів і можуть зменшити швидкість роботи застосунку.", - "transcoding_temporal_aq": "Тимчасове AQ", - "transcoding_temporal_aq_description": "Стосується лише NVENC. Часова адаптивна квантизація підвищує якість сцен з високою деталізацією та низьким рівнем руху. Може бути несумісним зі старими пристроями.", + "transcoding_temporal_aq": "Часове AQ", + "transcoding_temporal_aq_description": "Стосується лише NVENC. Часова адаптивна квантизація підвищує якість сцен з високою деталізацією та низьким рівнем руху. Може бути несумісною зі старими пристроями.", "transcoding_threads": "Потоки", - "transcoding_threads_description": "Вищі значення прискорюють кодування, але залишають менше місця для обробки інших завдань сервером під час активності. Це значення не повинно бути більше кількості ядер процесора. Максимізує використання, якщо встановлено на 0.", + "transcoding_threads_description": "Вищі значення прискорюють кодування, але залишають менше місця для обробки інших завдань сервером під час активності. Це значення не має перевищувати кількість ядер процесора. Максимізує використання, якщо установлено на 0.", "transcoding_tone_mapping": "Тонове відображення", - "transcoding_tone_mapping_description": "Намагається зберегти вигляд HDR-відео при конвертації в SDR. Кожен алгоритм робить різні компроміси щодо кольору, деталізації та яскравості. Алгоритм Hable зберігає деталі, Mobius - кольори, Reinhard - яскравість.", - "transcoding_transcode_policy": "Політика перекодування", - "transcoding_transcode_policy_description": "Політика щодо того, коли відео слід перекодовувати. Відео з HDR і відео з піксельним форматом, відмінним від YUV 4:2:0, завжди буде перекодовано (крім випадків, коли перекодування вимкнено).", + "transcoding_tone_mapping_description": "Намагається зберегти вигляд HDR-відео під час перетворення на SDR. Кожен алгоритм робить різні компроміси щодо кольору, деталізації та яскравості. Алгоритм Hable зберігає деталі, Mobius - кольори, Reinhard - яскравість.", + "transcoding_transcode_policy": "Політика транскодування", + "transcoding_transcode_policy_description": "Політика щодо того, коли відео слід транскодувати. Відео з HDR і відео з піксельним форматом, відмінним від YUV 4:2:0, завжди буде транскодовано (крім випадків, коли транскодування вимкнено).", "transcoding_two_pass_encoding": "Кодування з двома проходами", - "transcoding_two_pass_encoding_setting_description": "Транскодування за двома проходами для отримання кращих закодованих відео. Коли ввімкнено максимальний бітрейт (необхідний для роботи з H.264 та HEVC), цей режим використовує діапазон бітрейту, заснований на максимальному бітрейті, і ігнорує CRF. Для VP9 можна використовувати CRF, якщо вимкнено максимальний бітрейт.", + "transcoding_two_pass_encoding_setting_description": "Транскодування за двома проходами для отримання кращих закодованих відео. Коли увімкнено максимальний бітрейт (необхідний для роботи з H.264 та HEVC), цей режим використовує діапазон бітрейту, на основі максимального бітрейту, і ігнорує CRF. Для VP9 можна використовувати CRF, якщо вимкнено максимальний бітрейт.", "transcoding_video_codec": "Відеокодек", "transcoding_video_codec_description": "VP9 має високу ефективність і сумісність з вебом, але потребує більше часу на транскодування. HEVC працює схоже, але має меншу сумісність з вебом. H.264 має широку сумісність і швидко транскодується, але створює значно більші файли. AV1 - найефективніший кодек, але не підтримується на старіших пристроях.", "trash_enabled_description": "Увімкнення кошика", "trash_number_of_days": "Кількість днів", - "trash_number_of_days_description": "Кількість днів, протягом яких залишати файли у кошику перед їх остаточним видаленням", + "trash_number_of_days_description": "Кількість днів зберігання елементів у кошику перед їх остаточним видаленням", "trash_settings": "Налаштування кошика", "trash_settings_description": "Керування налаштуваннями кошика", "unlink_all_oauth_accounts": "Від’єднати всі облікові записи OAuth", "unlink_all_oauth_accounts_description": "Не забудьте від’єднати всі облікові записи OAuth перед переходом до нового постачальника.", "unlink_all_oauth_accounts_prompt": "Ви впевнені, що хочете від’єднати всі облікові записи OAuth? Це скине ідентифікатор OAuth для кожного користувача, і цю дію не можна буде скасувати.", "user_cleanup_job": "Очищення користувача", - "user_delete_delay": "Обліковий запис {user} і його файли будуть заплановані для остаточного видалення через {delay, plural, one {# день} few {# дні} many {# днів} other {# днів}}.", - "user_delete_delay_settings": "Відкладене видалення", - "user_delete_delay_settings_description": "Період відтермінування остаточного видалення облікового запису користувача та його файлів. Завдання з видалення користувача запускається щоночі о півночі і перевіряє облікові записи, призначені для видалення. Зміни цього параметра будуть враховані під час наступного запуску завдання.", - "user_delete_immediately": "Обліковий запис та файли користувача {user} будуть негайно поставлені в чергу на остаточне видалення.", - "user_delete_immediately_checkbox": "Поставити користувача та файли в чергу для негайного видалення", + "user_delete_delay": "Обліковий запис {user} та його елементи буде заплановано для остаточного видалення через {delay, plural, one {# день} few {# дні} many {# днів} other {# днів}}.", + "user_delete_delay_settings": "Затримка видалення", + "user_delete_delay_settings_description": "Період відтермінування остаточного видалення облікового запису користувача та його елементів. Завдання з видалення користувача виконується щоночі о півночі і перевіряє облікові записи, призначені для видалення. Зміни цього параметра буде враховано під час наступного виконання завдання.", + "user_delete_immediately": "Обліковий запис та елементи користувача {user} буде негайно поставлено в чергу на остаточне видалення.", + "user_delete_immediately_checkbox": "Поставити користувача та елементи в чергу для негайного видалення", "user_details": "Дані користувача", "user_management": "Керування користувачами", "user_password_has_been_reset": "Пароль користувача було скинуто:", - "user_password_reset_description": "Будь ласка, надайте користувачеві тимчасовий пароль і повідомте йому, що він повинен буде змінити пароль при наступному вході.", + "user_password_reset_description": "Будь ласка, надайте користувачеві тимчасовий пароль і повідомте, що потрібно буде змінити його під час наступного входу.", "user_restore_description": "Обліковий запис {user} буде відновлено.", "user_restore_scheduled_removal": "Відновити користувача - заплановано на видалення {date, date, long}", "user_settings": "Налаштування користувача", "user_settings_description": "Керування налаштуваннями користувачів", - "user_successfully_removed": "Користувача {email} успішно видалено.", - "users_page_description": "Сторінка адміністраторів", - "version_check_enabled_description": "Увімкнути перевірку версії", + "user_successfully_removed": "Користувача {email} вилучено.", + "users_page_description": "Сторінка користувачів адміністратора", + "version_check_enabled_description": "Увімкнення перевірки версії", "version_check_implications": "Функція перевірки версії залежить від періодичної комунікації з {server}", "version_check_settings": "Перевірка версії", "version_check_settings_description": "Увімкнути/вимкнути сповіщення про нову версію", - "video_conversion_job": "Перекодувати відео", + "video_conversion_job": "Транскодувати відео", "video_conversion_job_description": "Транскодувати відео для ширшої сумісності з браузерами та пристроями" }, "admin_email": "Електронна пошта адміністратора", @@ -453,84 +453,84 @@ "advanced": "Розширені", "advanced_settings_clear_image_cache": "Очистити кеш зображень", "advanced_settings_clear_image_cache_error": "Не вдалося очистити кеш зображень", - "advanced_settings_clear_image_cache_success": "Успішно очищено {size}", - "advanced_settings_enable_alternate_media_filter_subtitle": "Використовуйте цей варіант для фільтрації файлів під час синхронізації за альтернативними критеріями. Спробуйте це, якщо у вас виникають проблеми з тим, що застосунок не виявляє всі альбоми.", - "advanced_settings_enable_alternate_media_filter_title": "[ЕКСПЕРИМЕНТАЛЬНИЙ] Використовуйте альтернативний фільтр синхронізації альбомів пристрою", + "advanced_settings_clear_image_cache_success": "Очищено {size}", + "advanced_settings_enable_alternate_media_filter_subtitle": "Використовуйте цей варіант для фільтрації медіа під час синхронізації за альтернативними критеріями. Спробуйте це, якщо у вас виникають проблеми з тим, що застосунок не виявляє всі альбоми.", + "advanced_settings_enable_alternate_media_filter_title": "[ЕКСПЕРИМЕНТАЛЬНО] Альтернативний фільтр синхронізації альбомів пристрою", "advanced_settings_log_level_title": "Рівень журналювання: {level}", - "advanced_settings_prefer_remote_subtitle": "Деякі пристрої вельми повільно завантажують мініатюри із файлів на пристрої. Увімкніть цей параметр, щоб завантажувати зображення з серверу.", - "advanced_settings_prefer_remote_title": "Перевага віддаленим зображенням", + "advanced_settings_prefer_remote_subtitle": "Деякі пристрої дуже повільно завантажують мініатюри з локальних елементів. Увімкніть цей параметр, щоб натомість завантажувати віддалені зображення.", + "advanced_settings_prefer_remote_title": "Надавати перевагу віддаленим зображенням", "advanced_settings_proxy_headers_subtitle": "Визначте заголовки проксі-сервера, які Immich має надсилати з кожним мережевим запитом", - "advanced_settings_proxy_headers_title": "Користувацькі проксі-заголовки [ЕКСПЕРИМЕНТАЛЬНА ВЕРСІЯ]", - "advanced_settings_readonly_mode_subtitle": "Увімкнення режиму тільки для читання, в якому фотографії можна тільки переглядати, а такі функції, як вибір декількох зображень, спільний доступ, передача, видалення, вимкнені. Увімкнення/вимкнення режиму тільки для читання за допомогою аватара користувача на головному екрані", + "advanced_settings_proxy_headers_title": "Довільні проксі-заголовки [ЕКСПЕРИМЕНТАЛЬНО]", + "advanced_settings_readonly_mode_subtitle": "Увімкнення режиму лише для читання, у якому фото можна лише переглядати, а такі функції, як вибір кількох зображень, спільний доступ, трансляція, видалення — вимкнено. Увімкнення/вимкнення режиму лише для читання за допомогою аватара користувача на головному екрані", "advanced_settings_readonly_mode_title": "Режим лише для читання", "advanced_settings_self_signed_ssl_subtitle": "Пропускає перевірку SSL-сертифіката сервера. Потрібне для самопідписаних сертифікатів.", - "advanced_settings_self_signed_ssl_title": "Дозволити самопідписані SSL-сертифікати [ЕКСПЕРИМЕНТАЛЬНА ВЕРСІЯ]", - "advanced_settings_sync_remote_deletions_subtitle": "Автоматично видаляти або відновлювати файл на цьому пристрої, коли ця дія виконується в веб-інтерфейсі", + "advanced_settings_self_signed_ssl_title": "Самопідписані SSL-сертифікати [ЕКСПЕРИМЕНТАЛЬНО]", + "advanced_settings_sync_remote_deletions_subtitle": "Автоматично видаляти або відновлювати елемент на цьому пристрої, коли ця дія виконується у веб-інтерфейсі", "advanced_settings_sync_remote_deletions_title": "Синхронізація віддалених видалень [ЕКСПЕРИМЕНТАЛЬНО]", - "advanced_settings_tile_subtitle": "Розширені користувацькі налаштування", - "advanced_settings_troubleshooting_subtitle": "Увімкніть додаткові функції для усунення несправностей", + "advanced_settings_tile_subtitle": "Розширені налаштування", + "advanced_settings_troubleshooting_subtitle": "Увімкнення додаткових функцій для усунення несправностей", "advanced_settings_troubleshooting_title": "Усунення несправностей", "age_months": "Вік {months, plural, one {# місяць} few {# місяці} many {# місяців} other {# місяців}}", "age_year_months": "Вік 1 рік, {months, plural, one {# місяць} few {# місяці} many {# місяців} other {# місяців}}", - "age_years": "{years, plural, other {Вік #}}", + "age_years": "{years, plural, one {Вік #} few {Вік #} many {Вік #} other {Вік #}}", "album": "Альбом", "album_added": "Альбом додано", "album_added_notification_setting_description": "Отримувати сповіщення електронною поштою, коли вас додають до спільного альбому", - "album_cover_updated": "Обкладинка альбому оновлена", + "album_cover_updated": "Обкладинку альбому оновлено", "album_delete_confirmation": "Ви впевнені, що хочете видалити альбом {album}?", - "album_delete_confirmation_description": "Якщо альбом був спільним, інші користувачі не зможуть отримати доступ до нього.", + "album_delete_confirmation_description": "Якщо альбом є спільним, інші користувачі більше не зможуть отримати доступ до нього.", "album_deleted": "Альбом видалено", - "album_info_card_backup_album_excluded": "ВИЛУЧЕНИЙ", - "album_info_card_backup_album_included": "ВКЛЮЧЕНИЙ", - "album_info_updated": "Інформація про альбом оновлена", - "album_leave": "Залишити альбом?", - "album_leave_confirmation": "Ви впевнені, що хочете залишити альбом {album}?", - "album_name": "Назва Альбому", - "album_options": "Параметри альбому", - "album_remove_user": "Видалити користувача?", - "album_remove_user_confirmation": "Ви впевнені, що хочете видалити {user}?", + "album_info_card_backup_album_excluded": "НЕ ВРАХОВУЄТЬСЯ", + "album_info_card_backup_album_included": "ВРАХОВУЄТЬСЯ", + "album_info_updated": "Інформацію про альбом оновлено", + "album_leave": "Покинути альбом?", + "album_leave_confirmation": "Ви впевнені, що хочете покинути альбом {album}?", + "album_name": "Назва альбому", + "album_options": "Варіанти альбому", + "album_remove_user": "Вилучити користувача?", + "album_remove_user_confirmation": "Ви впевнені, що хочете вилучити {user}?", "album_search_not_found": "Альбомів, що відповідають вашому запиту, не знайдено", "album_selected": "Альбом вибрано", - "album_share_no_users": "Схоже, ви поділилися цим альбомом з усіма користувачами або у вас немає жодного користувача, з яким можна було б поділитися.", - "album_summary": "Короткий опис альбому", + "album_share_no_users": "Схоже, цей альбом вже доступний усім користувачам, або немає кого додати.", + "album_summary": "Зведення альбому", "album_updated": "Альбом оновлено", - "album_updated_setting_description": "Отримуйте сповіщення на електронну пошту, коли у спільному альбомі з'являються нові фото та відео", - "album_upload_assets": "Вивантажте фото та відео зі свого комп'ютера та додайте їх до альбому", + "album_updated_setting_description": "Отримувати сповіщення електронною поштою, коли у спільному альбомі з'являються нові фото та відео", + "album_upload_assets": "Вивантажити елементи зі свого комп'ютера та додати до альбому", "album_user_left": "Ви покинули {album}", - "album_user_removed": "Користувач {user} видалений", + "album_user_removed": "Користувача {user} вилучено", "album_viewer_appbar_delete_confirm": "Ви впевнені, що хочете видалити цей альбом зі свого облікового запису?", "album_viewer_appbar_share_err_delete": "Не вдалося видалити альбом", "album_viewer_appbar_share_err_leave": "Не вдалося вийти з альбому", - "album_viewer_appbar_share_err_remove": "Виникли проблеми з видаленням файлів з альбому", + "album_viewer_appbar_share_err_remove": "Не вдалося вилучити елементи з альбому", "album_viewer_appbar_share_err_title": "Не вдалося змінити назву альбому", "album_viewer_appbar_share_leave": "Вийти з альбому", "album_viewer_appbar_share_to": "Поділитися", "album_viewer_page_share_add_users": "Додати користувачів", - "album_with_link_access": "Будь-хто з посиланням може переглядати фото та відео в цьому альбомі.", + "album_with_link_access": "Будь-хто з посиланням може переглядати фото та людей у цьому альбомі.", "albums": "Альбоми", - "albums_count": "{count, plural, one {1 альбом} few {{count, number} альбоми} many {{count, number} альбомів} other {{count, number} альбомів}}", - "albums_default_sort_order": "Порядок сортування альбомів за замовчуваням", - "albums_default_sort_order_description": "Початковий порядок сортування файлів під час створення нових альбомів.", - "albums_feature_description": "Колекції файлів, які можна спільно використовувати з іншими користувачами.", + "albums_count": "{count, plural, one {{count, number} альбом} few {{count, number} альбоми} many {{count, number} альбомів} other {{count, number} альбомів}}", + "albums_default_sort_order": "Типовий порядок сортування альбомів", + "albums_default_sort_order_description": "Початковий порядок сортування елементів під час створення нових альбомів.", + "albums_feature_description": "Колекції елементів, якими можна ділитися з іншими користувачами.", "albums_on_device_count": "Альбоми на пристрої ({count})", "albums_selected": "{count, plural, one {# альбом вибрано} few {# альбоми вибрано} many {# альбомів вибрано} other {# альбомів вибрано}}", "all": "Усі", "all_albums": "Усі альбоми", "all_people": "Усі люди", - "all_photos": "Усі фотографії", + "all_photos": "Усі фото", "all_videos": "Усі відео", - "allow_dark_mode": "Дозволити темний режим", - "allow_edits": "Дозволити редагування", - "allow_public_user_to_download": "Дозволити публічному користувачеві завантажувати файли", - "allow_public_user_to_upload": "Дозволити публічним користувачам вивантажувати", + "allow_dark_mode": "Темна тема оформлення", + "allow_edits": "Дати змогу редагувати", + "allow_public_user_to_download": "Дати змогу публічному користувачеві завантажувати елементи", + "allow_public_user_to_upload": "Дати змогу публічному користувачеві вивантажувати елементи", "allowed": "Дозволено", "alt_text_qr_code": "Зображення QR-коду", "always_keep": "Завжди зберігати", - "always_keep_photos_hint": "Функція «Звільнити місце» збереже всі фотографії на цьому пристрої.", + "always_keep_photos_hint": "Функція «Звільнити місце» збереже всі фото на цьому пристрої.", "always_keep_videos_hint": "Функція «Звільнити місце» збереже всі відео на цьому пристрої.", "anti_clockwise": "Проти годинникової стрілки", "api_key": "Ключ API", - "api_key_description": "Це значення буде показане лише один раз. Будь ласка, обов'язково скопіюйте його перед закриттям вікна.", + "api_key_description": "Це значення буде показано лише один раз. Обов'язково скопіюйте його перед закриттям вікна.", "api_key_empty": "Назва вашого ключа API не може бути порожньою", "api_keys": "Ключі API", "app_architecture_variant": "Варіант (Архітектура)", @@ -541,179 +541,179 @@ "app_settings": "Налаштування застосунку", "app_stores": "Магазини застосунків", "app_update_available": "Оновлення застосунку доступне", - "appears_in": "З'являється в", + "appears_in": "Фігурує в", "apply_count": "Застосувати ({count, number})", "archive": "Архівувати", - "archive_action_prompt": "{count, plural, one {# файл додано до архіву} few {# файли додано до архіву} other {# файлів додано до архіву}}", - "archive_or_unarchive_photo": "Архівувати або розархівувати фото", - "archive_page_no_archived_assets": "Немає архівних файлів", + "archive_action_prompt": "{count, plural, one {# елемент додано до архіву} few {# елементи додано до архіву} many {# елементів додано до архіву} other {# елементів додано до архіву}}", + "archive_or_unarchive_photo": "Архівувати або вилучити з архіву фото", + "archive_page_no_archived_assets": "Немає архівних елементів", "archive_page_title": "Архів ({count})", "archive_size": "Розмір архіву", "archive_size_description": "Налаштувати розмір архіву для завантаження (у GiB)", - "archived": "Архів", - "archived_count": "{count, plural, other {Архівовано #}}", + "archived": "Заархівовано", + "archived_count": "{count, plural, one {Архівовано #} few {Архівовано #} many {Архівовано #} other {Архівовано #}}", "are_these_the_same_person": "Це та сама людина?", "are_you_sure_to_do_this": "Ви впевнені, що хочете це зробити?", "array_field_not_fully_supported": "Поля масиву потребують ручного редагування JSON", - "asset_action_delete_err_read_only": "Неможливо видалити файл(и) лише для читання, пропускаю", - "asset_action_share_err_offline": "Неможливо опрацювати недоступні файл(и), пропускаю", + "asset_action_delete_err_read_only": "Не вдається видалити елементи лише для читання, пропущено", + "asset_action_share_err_offline": "Не вдається отримати недоступні елементи, пропущено", "asset_added_to_album": "Додано до альбому", - "asset_adding_to_album": "Додати до альбому…", - "asset_created": "Файл додано", - "asset_description_updated": "Оновлено опис файлу", - "asset_filename_is_offline": "Файл {filename} недоступний", - "asset_has_unassigned_faces": "Є нерозпізнані обличчя", + "asset_adding_to_album": "Додавання до альбому…", + "asset_created": "Елемент створено", + "asset_description_updated": "Оновлено опис елемента", + "asset_filename_is_offline": "Елемент {filename} недоступний", + "asset_has_unassigned_faces": "Є непризначені обличчя", "asset_hashing": "Хешування…", "asset_list_group_by_sub_title": "Групувати за", - "asset_list_layout_settings_dynamic_layout_title": "Динамічне компонування", + "asset_list_layout_settings_dynamic_layout_title": "Динамічний макет", "asset_list_layout_settings_group_automatically": "Автоматично", - "asset_list_layout_settings_group_by": "Групувати файли по", + "asset_list_layout_settings_group_by": "Групувати елементи за", "asset_list_layout_settings_group_by_month_day": "Місяць + день", - "asset_list_layout_sub_title": "Розмітка", + "asset_list_layout_sub_title": "Макет", "asset_list_settings_subtitle": "Налаштування вигляду сітки фото", - "asset_list_settings_title": "Фото-сітка", - "asset_not_found_on_device_android": "Файл не знайдено на пристрої", - "asset_not_found_on_device_ios": "Файл не знайдено на пристрої. Якщо ви використовуєте iCloud, файл може бути недоступним через пошкоджений файл, що зберігається в iCloud", - "asset_not_found_on_icloud": "Файл не знайдено в iCloud. Можливо, файл недоступний через пошкоджений файл, що зберігається в iCloud", - "asset_offline": "Файл недоступний", - "asset_offline_description": "Цей файл не знайдено на диску. Будь ласка, зверніться до адміністратора Immich за допомогою.", - "asset_restored_successfully": "Файл успішно відновлено", + "asset_list_settings_title": "Фотосітка", + "asset_not_found_on_device_android": "Елемент не знайдено на пристрої", + "asset_not_found_on_device_ios": "Елемент не знайдено на пристрої. Якщо ви використовуєте iCloud, елемент може бути недоступним через пошкоджений файл, що зберігається в iCloud", + "asset_not_found_on_icloud": "Елемент не знайдено в iCloud. Можливо, елемент недоступний через пошкоджений файл, що зберігається в iCloud", + "asset_offline": "Елемент недоступний", + "asset_offline_description": "Цей зовнішній елемент не знайдено на диску. Будь ласка, зверніться до адміністратора Immich за допомогою.", + "asset_restored_successfully": "Елемент відновлено", "asset_skipped": "Пропущено", "asset_skipped_in_trash": "У кошику", - "asset_trashed": "Файл видалено", - "asset_troubleshoot": "Вирішення проблем з файлами", + "asset_trashed": "Елемент переміщено до кошика", + "asset_troubleshoot": "Вирішення проблем із елементами", "asset_uploaded": "Вивантажено", "asset_uploading": "Вивантаження…", "asset_viewer_settings_subtitle": "Налаштування переглядача галереї", - "asset_viewer_settings_title": "Переглядач зображень", - "assets": "файли", - "assets_added_count": "Додано {count, plural, one {# файл} few {# файли} other {# файлів}}", - "assets_added_to_album_count": "Додано {count, plural, one {# файл} few {# файли} other {# файлів}} до альбому", - "assets_added_to_albums_count": "Додано {assetTotal, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}} до {albumTotal, plural, one {# альбому} few {# альбомів} many {# альбомів} other {# альбомів}}", - "assets_cannot_be_added_to_album_count": "{count, plural, one {Файл} few {Файли} many {Файли} other {Файли}} не можна додати до альбому", - "assets_cannot_be_added_to_albums": "{count, plural, one {Файл} few {Файли} many {Файлів} other {Файлів}} не можна додати до жодного з альбомів", - "assets_count": "{count, plural, one {# файл} few {# файли} other {# файлів}}", - "assets_deleted_permanently": "Остаточно видалено {count, plural, one {# файл} few {# файли} other {# файлів}}", - "assets_deleted_permanently_from_server": "Видалено назавжди {count, plural, one {# файл} few {# файли} other {# файлів}} з сервера Immich", - "assets_downloaded_failed": "{count, plural, one {Завантажено # файл — {error} не вдалося} few {Завантажено # файли — {error} не вдалося} many {Завантажено # файлів — {error} не вдалося} other {Завантажено # файлів — {error} не вдалося}}", - "assets_downloaded_successfully": "{count, plural, one {Успішно завантажено # файл} few {Успішно завантажено # файли} many {Успішно завантажено # файлів} other {Успішно завантажено # файлів}}", - "assets_moved_to_trash_count": "Переміщено {count, plural, one {# файл} few {# файли} other {# файлів}} до кошика", - "assets_permanently_deleted_count": "Остаточно видалено {count, plural, one {# файл} few {# файли} other {# файлів}}", - "assets_removed_count": "Вилучено {count, plural, one {# файл} few {# файли} other {# файлів}}", - "assets_removed_permanently_from_device": "Назавжди вилучено з вашого пристрою {count, plural, one {# файл} few {# файли} other {# файлів}}", - "assets_restore_confirmation": "Ви впевнені, що хочете відновити всі свої файли з кошика? Цю дію не можна скасувати! Зверніть увагу, що недоступні файли не можуть бути відновлені таким чином.", - "assets_restored_count": "Відновлено {count, plural, one {# файл} few {# файли} other {# файлів}}", - "assets_restored_successfully": "Успішно відновлено {count, plural, one {# файл} few {# файли} other {# файлів}}", - "assets_trashed": "Переміщено до кошика {count, plural, one {# файл} few {# файли} other {# файлів}}", - "assets_trashed_count": "Переміщено до кошика {count, plural, one {# файл} few {# файли} other {# файлів}}", - "assets_trashed_from_server": "Переміщено до кошика на сервері Immich {count, plural, one {# файл} few {# файли} other {# файлів}}", - "assets_were_part_of_album_count": "{count, plural, one {Файл був} few {Файли були} other {Файли були}} вже частиною альбому", - "assets_were_part_of_albums_count": "{count, plural, one {Файл вже був} few {Файли вже були} many {Файлів вже були} other {Файлів вже були}} частиною альбомів", + "asset_viewer_settings_title": "Переглядач елементів", + "assets": "елементи", + "assets_added_count": "Додано {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "assets_added_to_album_count": "Додано {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до альбому", + "assets_added_to_albums_count": "Додано {assetTotal, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до {albumTotal, plural, one {# альбому} few {# альбомів} many {# альбомів} other {# альбомів}}", + "assets_cannot_be_added_to_album_count": "{count, plural, one {Елемент} few {Елементи} many {Елементів} other {Елементів}} не вдається додати до альбому", + "assets_cannot_be_added_to_albums": "{count, plural, one {Елемент} few {Елементи} many {Елементів} other {Елементів}} не вдається додати до жодного з альбомів", + "assets_count": "{count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "assets_deleted_permanently": "Назавжди видалено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "assets_deleted_permanently_from_server": "Видалено назавжди {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} із сервера Immich", + "assets_downloaded_failed": "{count, plural, one {Завантажено # файл — не вдалося завантажити {error}} few {Завантажено # файли — не вдалося завантажити {error}} many {Завантажено # файлів — не вдалося завантажити {error}} other {Завантажено # файлів — не вдалося завантажити {error}}}", + "assets_downloaded_successfully": "{count, plural, one {Завантажено # файл} few {Завантажено # файли} many {Завантажено # файлів} other {Завантажено # файлів}}", + "assets_moved_to_trash_count": "Переміщено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до кошика", + "assets_permanently_deleted_count": "Остаточно видалено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "assets_removed_count": "Вилучено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "assets_removed_permanently_from_device": "Назавжди вилучено з вашого пристрою {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "assets_restore_confirmation": "Ви впевнені, що хочете відновити всі свої елементи з кошика? Цю дію не можна скасувати! Зверніть увагу, що недоступні елементи не вдасться відновити таким чином.", + "assets_restored_count": "Відновлено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "assets_restored_successfully": "Відновлено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "assets_trashed": "Переміщено до кошика {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "assets_trashed_count": "Переміщено до кошика {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "assets_trashed_from_server": "Переміщено до кошика на сервері Immich {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "assets_were_part_of_album_count": "{count, plural, one {Елемент був} few {Елементи були} many {Елементів було} other {Елементів було}} вже частиною альбому", + "assets_were_part_of_albums_count": "{count, plural, one {Елемент вже був} few {Елементи вже були} many {Елементів вже було} other {Елементів вже було}} частиною альбомів", "authorized_devices": "Авторизовані пристрої", - "automatic_endpoint_switching_subtitle": "Підключатися локально через зазначену Wi-Fi мережу, коли це можливо, і використовувати альтернативні з'єднання в інших випадках", + "automatic_endpoint_switching_subtitle": "Під'єднуватися локально через зазначену мережу Wi-Fi, коли це можливо, і використовувати альтернативні з'єднання в інших випадках", "automatic_endpoint_switching_title": "Автоматичне перемикання URL", - "autoplay_slideshow": "Автоматичне відтворення слайдшоу", + "autoplay_slideshow": "Автоматичне відтворення слайд-шоу", "back": "Назад", "back_close_deselect": "Повернутися, закрити або скасувати вибір", - "background_backup_running_error": "Наразі виконується фонове резервне копіювання, неможливо розпочати резервне копіювання вручну", - "background_location_permission": "Дозвіл до місцезнаходження у фоні", - "background_location_permission_content": "Щоб перемикати мережі у фоновому режимі, Immich має *завжди* мати доступ до точної геолокації, щоб зчитувати назву Wi-Fi мережі", - "background_options": "Параметри фону", + "background_backup_running_error": "Наразі виконується фонове резервне копіювання, не вдається розпочати резервне копіювання вручну", + "background_location_permission": "Дозвіл на визначення місця у фоновому режимі", + "background_location_permission_content": "Для автоматичного перемикання між мережами у фоновому режимі Immich потребує *постійного* доступу до точного розташування, щоб зчитувати назву мережі Wi-Fi", + "background_options": "Налаштування фонового режиму", "backup": "Резервне копіювання", "backup_album_selection_page_albums_device": "Альбоми на пристрої ({count})", - "backup_album_selection_page_albums_tap": "Торкніться, щоб додати, двічі, щоб вилучити", - "backup_album_selection_page_assets_scatter": "Файли можуть належати до кількох альбомів водночас. Таким чином, альбоми можуть бути додані або вилучені під час резервного копіювання.", - "backup_album_selection_page_select_albums": "Оберіть альбоми", - "backup_album_selection_page_selection_info": "Інформація про обране", - "backup_album_selection_page_total_assets": "Загальна кількість унікальних файлів", + "backup_album_selection_page_albums_tap": "Одне торкання — додати, подвійне — вилучити", + "backup_album_selection_page_assets_scatter": "Елементи можуть належати до кількох альбомів водночас. Таким чином, альбоми можна враховувати або не враховувати під час резервного копіювання.", + "backup_album_selection_page_select_albums": "Вибрати альбоми", + "backup_album_selection_page_selection_info": "Інформація про вибране", + "backup_album_selection_page_total_assets": "Загальна кількість унікальних елементів", "backup_albums_sync": "Синхронізація резервних копій альбомів", "backup_all": "Усі", - "backup_background_service_backup_failed_message": "Не вдалося зробити резервну копію файлів. Повторюю…", - "backup_background_service_complete_notification": "Резервне копіювання файлів завершено", + "backup_background_service_backup_failed_message": "Не вдалося зробити резервну копію елементів. Повторюю…", + "backup_background_service_complete_notification": "Резервне копіювання елементів завершено", "backup_background_service_connection_failed_message": "Не вдалося зв'язатися із сервером. Повторюю…", "backup_background_service_current_upload_notification": "Вивантажується {filename}", - "backup_background_service_default_notification": "Перевіряю наявність нових файлів…", - "backup_background_service_error_title": "Помилка резервного копіювання", - "backup_background_service_in_progress_notification": "Резервне копіювання ваших файлів…", + "backup_background_service_default_notification": "Перевіряю наявність нових елементів…", + "backup_background_service_error_title": "Збій резервного копіювання", + "backup_background_service_in_progress_notification": "Резервне копіювання ваших елементів…", "backup_background_service_upload_failure_notification": "Не вдалося вивантажити {filename}", "backup_controller_page_albums": "Резервне копіювання альбомів", - "backup_controller_page_background_app_refresh_disabled_content": "Для фонового резервного копіювання увімкніть фонове оновлення в меню \"Налаштування > Загальні > Фонове оновлення застосунку\".", - "backup_controller_page_background_app_refresh_disabled_title": "Фонове оновлення застосунку вимкнене", + "backup_controller_page_background_app_refresh_disabled_content": "Для фонового резервного копіювання увімкніть фонове оновлення в меню «Налаштування > Загальні > Фонове оновлення застосунку».", + "backup_controller_page_background_app_refresh_disabled_title": "Фонове оновлення застосунку вимкнено", "backup_controller_page_background_app_refresh_enable_button_text": "Перейти до налаштувань", "backup_controller_page_background_battery_info_link": "Показати як", - "backup_controller_page_background_battery_info_message": "Для найкращого фонового резервного копіювання вимкніть будь-яку оптимізацію акумулятора, яка обмежує фонову активність для Immich.\n\nСпосіб залежить від конкретного пристрою, тому шукайте необхідну інформацію у виробника вашого пристрою.", + "backup_controller_page_background_battery_info_message": "Для найкращого фонового резервного копіювання вимкніть будь-яку оптимізацію акумулятора, яка обмежує фонову активність для Immich.\n\nОскільки це залежить від конкретного пристрою, знайдіть необхідну інформацію у виробника вашого пристрою.", "backup_controller_page_background_battery_info_ok": "ОК", - "backup_controller_page_background_battery_info_title": "Оптимізація батареї", + "backup_controller_page_background_battery_info_title": "Оптимізація акумулятора", "backup_controller_page_background_charging": "Лише під час заряджання", - "backup_controller_page_background_configure_error": "Не вдалося налаштувати фоновий сервіс", - "backup_controller_page_background_delay": "Затримка резервного копіювання нових файлів: {duration}", - "backup_controller_page_background_description": "Увімкніть фонову службу, щоб автоматично створювати резервні копії будь-яких нових файлів без необхідності відкривати застосунок", + "backup_controller_page_background_configure_error": "Не вдалося налаштувати фонову службу", + "backup_controller_page_background_delay": "Затримка резервного копіювання нових елементів: {duration}", + "backup_controller_page_background_description": "Увімкніть фонову службу, щоб автоматично створювати резервні копії будь-яких нових елементів без потреби відкривати застосунок", "backup_controller_page_background_is_off": "Автоматичне фонове резервне копіювання вимкнено", - "backup_controller_page_background_is_on": "Автоматичне фонове резервне копіювання ввімкнено", - "backup_controller_page_background_turn_off": "Вимкнути фоновий сервіс", - "backup_controller_page_background_turn_on": "Увімкнути фоновий сервіс", + "backup_controller_page_background_is_on": "Автоматичне фонове резервне копіювання увімкнено", + "backup_controller_page_background_turn_off": "Вимкнути фонову службу", + "backup_controller_page_background_turn_on": "Увімкнути фонову службу", "backup_controller_page_background_wifi": "Лише на Wi-Fi", "backup_controller_page_backup": "Резервне копіювання", - "backup_controller_page_backup_selected": "Обрано: ", + "backup_controller_page_backup_selected": "Вибрано: ", "backup_controller_page_backup_sub": "Резервні копії фото та відео", "backup_controller_page_created": "Створено: {date}", - "backup_controller_page_desc_backup": "Увімкніть резервне копіювання на передньому плані, щоб автоматично вивантажувати нові фото та відео на сервер під час відкриття застосунку.", + "backup_controller_page_desc_backup": "Увімкніть резервне копіювання в активному режимі, щоб автоматично вивантажувати нові фото та відео на сервер під час відкриття застосунку.", "backup_controller_page_excluded": "Вилучено: ", "backup_controller_page_failed": "Невдалі ({count})", "backup_controller_page_filename": "Назва файлу: {filename} [{size}]", "backup_controller_page_id": "ID: {id}", "backup_controller_page_info": "Інформація про резервну копію", - "backup_controller_page_none_selected": "Нічого не обрано", + "backup_controller_page_none_selected": "Нічого не вибрано", "backup_controller_page_remainder": "Залишок", - "backup_controller_page_remainder_sub": "Фото та відео, що залишилися для резервного копіювання з вибраного", + "backup_controller_page_remainder_sub": "Фото та відео, які залишилося скопіювати з вибраних альбомів", "backup_controller_page_server_storage": "Сховище сервера", "backup_controller_page_start_backup": "Почати резервне копіювання", "backup_controller_page_status_off": "Автоматичне резервне копіювання в активному режимі вимкнено", - "backup_controller_page_status_on": "Автоматичне резервне копіювання в активному режимі ввімкнено", + "backup_controller_page_status_on": "Автоматичне резервне копіювання в активному режимі увімкнено", "backup_controller_page_storage_format": "Використано: {used} з {total}", "backup_controller_page_to_backup": "Альбоми до резервного копіювання", "backup_controller_page_total_sub": "Усі унікальні фото та відео з вибраних альбомів", "backup_controller_page_turn_off": "Вимкнути резервне копіювання в активному режимі", "backup_controller_page_turn_on": "Увімкнути резервне копіювання в активному режимі", - "backup_controller_page_uploading_file_info": "Вивантажую інформацію про файл", - "backup_err_only_album": "Не можу видалити єдиний альбом", - "backup_error_sync_failed": "Помилка синхронізації. Не вдається обробити резервну копію.", - "backup_info_card_assets": "файли", + "backup_controller_page_uploading_file_info": "Інформація про файл, що вивантажується", + "backup_err_only_album": "Не вдається вилучити єдиний альбом", + "backup_error_sync_failed": "Не вдалося синхронізувати. Не вдається виконати резервне копіювання.", + "backup_info_card_assets": "елементів", "backup_manual_cancelled": "Скасовано", "backup_manual_in_progress": "Вивантаження вже відбувається. Спробуйте згодом", - "backup_manual_success": "Успіх", + "backup_manual_success": "Готово", "backup_manual_title": "Стан вивантаження", "backup_options": "Налаштування резервного копіювання", - "backup_options_page_title": "Резервне копіювання", + "backup_options_page_title": "Налаштування резервного копіювання", "backup_setting_subtitle": "Керування налаштуваннями вивантаження у фоновому та активному режимі", "backup_settings_subtitle": "Керування налаштуваннями вивантаження", "backup_upload_details_page_more_details": "Натисніть, щоб дізнатися більше", "backward": "Назад", - "biometric_auth_enabled": "Біометрична автентифікація увімкнена", - "biometric_locked_out": "Вам закрито доступ до біометричної автентифікації", - "biometric_no_options": "Біометричні параметри недоступні", + "biometric_auth_enabled": "Біометричну автентифікацію увімкнено", + "biometric_locked_out": "Доступ до біометричної автентифікації заблоковано", + "biometric_no_options": "Біометричні варіанти недоступні", "biometric_not_available": "Біометрична автентифікація недоступна на цьому пристрої", - "birthdate_saved": "Дата народження успішно збережена", - "birthdate_set_description": "Дата народження використовується для обчислення віку цієї особи на момент фотографії.", + "birthdate_saved": "Дату народження збережено", + "birthdate_set_description": "Дата народження використовується для обчислення віку цієї людини на момент фото.", "blurred_background": "Розмитий фон", - "bugs_and_feature_requests": "Помилки та Запити", + "bugs_and_feature_requests": "Звіти про помилки та побажання", "build": "Збірка", - "build_image": "Версія збірки", - "bulk_delete_duplicates_confirmation": "Ви впевнені, що хочете масово видалити {count, plural, one {# дубльований файл} few {# дубльовані файли} other {# дубльованих файлів}}? Ця дія залишить найбільший файл у кожній групі і остаточно видалить всі інші дублікати. Цю дію неможливо скасувати!", - "bulk_keep_duplicates_confirmation": "Ви впевнені, що хочете залишити {count, plural, one {# дубльований файл} few {# дубльовані файли} other {# дубльованих файлів}}? Це дозволить вирішити всі групи дублікатів без видалення чого-небудь.", - "bulk_trash_duplicates_confirmation": "Ви впевнені, що хочете перемістити до кошика {count, plural, one {# дубльований файл} few {# дубльовані файли} other {# дубльованих файлів}}? Це залишить найбільший файл у кожній групі й перемістить до кошика всі інші дублікати.", + "build_image": "Образ збірки", + "bulk_delete_duplicates_confirmation": "Ви впевнені, що хочете масово видалити {count, plural, one {# дубльований елемент} few {# дубльовані елементи} many {# дубльованих елементів} other {# дубльованих елементів}}? Ця дія залишить найбільший елемент у кожній групі й остаточно видалить усі інші дублікати. Цю дію не можна скасувати!", + "bulk_keep_duplicates_confirmation": "Ви впевнені, що хочете залишити {count, plural, one {# дубльований елемент} few {# дубльовані елементи} many {# дубльованих елементів} other {# дубльованих елементів}}? Це дасть змогу вирішити всі групи дублікатів без видалення будь-чого.", + "bulk_trash_duplicates_confirmation": "Ви впевнені, що хочете перемістити до кошика {count, plural, one {# дубльований елемент} few {# дубльовані елементи} many {# дубльованих елементів} other {# дубльованих елементів}}? Це залишить найбільший елемент у кожній групі й перемістить до кошика всі інші дублікати.", "buy": "Придбати Immich", "cache_settings_clear_cache_button": "Очистити кеш", "cache_settings_clear_cache_button_title": "Очищає кеш застосунку. Це суттєво знизить продуктивність застосунку, доки кеш не буде перебудовано.", "cache_settings_duplicated_assets_clear_button": "ОЧИСТИТИ", - "cache_settings_duplicated_assets_subtitle": "Фото та відео, які ігноруються застосунком", - "cache_settings_duplicated_assets_title": "Дубльовані фото та відео ({count})", - "cache_settings_statistics_album": "Бібліотечні мініатюри", + "cache_settings_duplicated_assets_subtitle": "Фото та відео, внесені застосунком до списку ігнорованих", + "cache_settings_duplicated_assets_title": "Дубльовані елементи ({count})", + "cache_settings_statistics_album": "Мініатюри бібліотеки", "cache_settings_statistics_full": "Повнорозмірні зображення", "cache_settings_statistics_shared": "Мініатюри спільних альбомів", "cache_settings_statistics_thumbnail": "Мініатюри", "cache_settings_statistics_title": "Використання кешу", - "cache_settings_subtitle": "Контролює кешування у мобільному застосунку", + "cache_settings_subtitle": "Керування кешуванням у мобільному застосунку Immich", "cache_settings_tile_subtitle": "Керування поведінкою локального сховища", "cache_settings_tile_title": "Локальне сховище", "cache_settings_title": "Налаштування кешування", @@ -724,20 +724,20 @@ "cancel_search": "Скасувати пошук", "canceled": "Скасовано", "canceling": "Скасування", - "cannot_merge_people": "Неможливо об'єднати людей", - "cannot_undo_this_action": "Ви не можете скасувати цю дію!", - "cannot_update_the_description": "Неможливо оновити опис", + "cannot_merge_people": "Не вдається об'єднати людей", + "cannot_undo_this_action": "Цю дію не можна скасувати!", + "cannot_update_the_description": "Не вдається оновити опис", "cast": "Транслювати", - "cast_description": "Налаштувати доступні місця трансляції", + "cast_description": "Налаштувати доступні пристрої для трансляції", "change_date": "Змінити дату", "change_description": "Змінити опис", "change_display_order": "Змінити порядок відображення", "change_expiration_time": "Змінити термін дії", - "change_location": "Змінити місцезнаходження", + "change_location": "Змінити місце", "change_name": "Змінити ім'я", - "change_name_successfully": "Ім'я успішно змінено", + "change_name_successfully": "Ім'я змінено", "change_password": "Змінити пароль", - "change_password_description": "Це або перший раз, коли ви увійшли в систему, або було зроблено запит на зміну вашого пароля. Будь ласка, введіть новий пароль нижче.", + "change_password_description": "Це ваш перший вхід у систему або було зроблено запит на зміну пароля. Будь ласка, введіть новий пароль нижче.", "change_password_form_confirm_password": "Підтвердити пароль", "change_password_form_description": "Привіт, {name},\n\nЦе або ваш перший вхід у систему, або було надіслано запит на зміну пароля. Будь ласка, введіть новий пароль нижче.", "change_password_form_log_out": "Вийти із системи на всіх інших пристроях", @@ -749,93 +749,93 @@ "change_trigger": "Змінити тригер", "change_trigger_prompt": "Ви впевнені, що хочете змінити тригер? Це видалить усі наявні дії та фільтри.", "change_your_password": "Змініть свій пароль", - "changed_visibility_successfully": "Видимість успішно змінено", - "charging": "Зарядка", - "charging_requirement_mobile_backup": "Для фонового резервного копіювання пристрій повинен заряджатися", - "check_corrupt_asset_backup": "Перевірити на пошкоджені резервні копії файлів", + "changed_visibility_successfully": "Видимість змінено", + "charging": "Заряджається", + "charging_requirement_mobile_backup": "Для фонового резервного копіювання пристрій має заряджатися", + "check_corrupt_asset_backup": "Перевірити на пошкоджені резервні копії елементів", "check_corrupt_asset_backup_button": "Виконати перевірку", - "check_corrupt_asset_backup_description": "Запустити цю перевірку лише через Wi-Fi та після того, як всі файли будуть завантажені на сервер. Процес може зайняти кілька хвилин.", + "check_corrupt_asset_backup_description": "Виконуйте цю перевірку лише через Wi-Fi та після завершення резервного копіювання всіх елементів. Процес може зайняти кілька хвилин.", "check_logs": "Перевірити журнали", "checksum": "Контрольна сума", "choose_matching_people_to_merge": "Виберіть людей для об'єднання", "city": "Місто", - "cleanup_confirm_description": "Immich знайшов {count, plural, one {# файл} few {# файли} other {# файлів}} (створених до {date}), безпечно збережених на сервері. Видалити локальні копії з цього пристрою?", + "cleanup_confirm_description": "Immich знайшов {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} (створених до {date}), безпечно збережених на сервері. Вилучити локальні копії з цього пристрою?", "cleanup_confirm_prompt_title": "Вилучити з цього пристрою?", - "cleanup_deleted_assets": "Переміщено {count, plural, one {# файл} few {# файли} other {# файлів}} до кошика пристрою", - "cleanup_deleting": "Переміщення до кошика...", - "cleanup_found_assets": "Знайдено {count} резервних копій файлів", - "cleanup_found_assets_with_size": "Знайдено {count} резервних копій файлів ({size})", - "cleanup_icloud_shared_albums_excluded": "Спільні альбоми iCloud виключаються зі сканування", - "cleanup_no_assets_found": "Не знайдено файлів, що відповідають наведеним вище критеріям. Функція «Звільнити місце» може видалити лише файли, резервні копії яких було створено на сервері", - "cleanup_preview_title": "Фото та відео для вилучення ({count})", - "cleanup_step3_description": "Скануйте резервні копії файлів, що відповідають вашій даті, та збережіть налаштування.", - "cleanup_step4_summary": "{count} файлів (створених до {date}) для видалення з вашого локального пристрою. Фотографії залишатимуться доступними із застосунку Immich.", - "cleanup_trash_hint": "Щоб повністю звільнити місце для зберігання, відкрийте системну галерею та очистіть кошик", + "cleanup_deleted_assets": "Переміщено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до кошика пристрою", + "cleanup_deleting": "Переміщення до кошика…", + "cleanup_found_assets": "Знайдено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} із резервними копіями", + "cleanup_found_assets_with_size": "Знайдено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} із резервними копіями ({size})", + "cleanup_icloud_shared_albums_excluded": "Спільні альбоми iCloud не враховуються під час сканування", + "cleanup_no_assets_found": "Не знайдено елементів, що відповідають наведеним вище критеріям. Функція «Звільнити місце» може видалити лише елементи, резервні копії яких було створено на сервері", + "cleanup_preview_title": "Елементи до вилучення ({count})", + "cleanup_step3_description": "Сканувати резервні копії елементів відповідно до налаштувань дати та збереження.", + "cleanup_step4_summary": "{count, plural, one {# елемент (створений до {date})} few {# елементи (створені до {date})} many {# елементів (створених до {date})} other {# елементів (створених до {date})}} для видалення з вашого локального пристрою. Фото залишатимуться доступними із застосунку Immich.", + "cleanup_trash_hint": "Щоб повністю звільнити місце у сховищі, відкрийте системну галерею та очистіть кошик", "clear": "Очистити", "clear_all": "Очистити все", "clear_all_recent_searches": "Очистити всі останні пошукові запити", "clear_file_cache": "Очистити кеш файлів", - "clear_message": "Очистити повідомлення", + "clear_message": "Очистити сповіщення", "clear_value": "Очистити значення", "client_cert_dialog_msg_confirm": "ОК", "client_cert_enter_password": "Введіть пароль", - "client_cert_import": "Імпорт", + "client_cert_import": "Імпортувати", "client_cert_import_success_msg": "Клієнтський сертифікат імпортовано", "client_cert_invalid_msg": "Недійсний файл сертифіката або неправильний пароль", "client_cert_password_message": "Введіть пароль для цього сертифіката", "client_cert_password_title": "Пароль сертифіката", - "client_cert_remove_msg": "Клієнтський сертифікат видалено", - "client_cert_subtitle": "Підтримує лише формат PKCS12 (.p12, .pfx). Імпорт/видалення сертифіката доступне лише перед входом у систему", - "client_cert_title": "SSL-сертифікат клієнта [ЕКСПЕРИМЕНТАЛЬНИЙ]", + "client_cert_remove_msg": "Клієнтський сертифікат вилучено", + "client_cert_subtitle": "Підтримує лише формат PKCS12 (.p12, .pfx). Імпорт/вилучення сертифіката доступне лише перед входом у систему", + "client_cert_title": "SSL-сертифікат клієнта [ЕКСПЕРИМЕНТАЛЬНО]", "clockwise": "По годинниковій стрілці", "close": "Закрити", "collapse": "Згорнути", "collapse_all": "Згорнути все", "color": "Колір", - "color_theme": "Кольорова тема", + "color_theme": "Тема оформлення", "command": "Команда", - "command_palette_prompt": "Швидко знаходьте потрібну сторінку, дію чи команду", + "command_palette_prompt": "Швидкий пошук сторінок, дій та команд", "command_palette_to_close": "закрити", - "command_palette_to_navigate": "ввійти", - "command_palette_to_select": "обрати", + "command_palette_to_navigate": "перейти", + "command_palette_to_select": "вибрати", "command_palette_to_show_all": "показати все", "comment_deleted": "Коментар видалено", - "comment_options": "Параметри коментарів", + "comment_options": "Варіанти коментарів", "comments_and_likes": "Коментарі та вподобання", "comments_are_disabled": "Коментарі вимкнено", "common_create_new_album": "Створити новий альбом", "completed": "Завершено", "confirm": "Підтвердити", "confirm_admin_password": "Підтвердити пароль адміністратора", - "confirm_delete_face": "Ви впевнені, що хочете видалити обличчя {name} з цього зображення?", + "confirm_delete_face": "Ви впевнені, що хочете видалити обличчя {name} з цього елемента?", "confirm_delete_shared_link": "Ви впевнені, що хочете видалити це спільне посилання?", - "confirm_keep_this_delete_others": "Усі інші зображення в стеку буде видалено, окрім цього зображення. Ви впевнені, що хочете продовжити?", - "confirm_new_pin_code": "Підтвердьте новий PIN-код", + "confirm_keep_this_delete_others": "Усі інші елементи в стеку буде видалено, окрім цього. Ви впевнені, що хочете продовжити?", + "confirm_new_pin_code": "Підтвердити новий PIN-код", "confirm_password": "Підтвердити пароль", - "confirm_tag_face": "Бажаєте позначити це обличчя як {name}?", - "confirm_tag_face_unnamed": "Бажаєте позначити це обличчя?", - "connected_device": "Підключений пристрій", - "connected_to": "Підключено до", - "contain": "Містити", + "confirm_tag_face": "Хочете позначити це обличчя як {name}?", + "confirm_tag_face_unnamed": "Хочете позначити це обличчя?", + "connected_device": "Під'єднаний пристрій", + "connected_to": "Під'єднано до", + "contain": "Вписати", "context": "Контекст", "continue": "Продовжити", "control_bottom_app_bar_create_new_album": "Створити новий альбом", "control_bottom_app_bar_delete_from_immich": "Видалити з Immich", "control_bottom_app_bar_delete_from_local": "Видалити з пристрою", - "control_bottom_app_bar_edit_location": "Редагувати місцезнаходження", + "control_bottom_app_bar_edit_location": "Редагувати місце", "control_bottom_app_bar_edit_time": "Редагувати дату та час", - "control_bottom_app_bar_share_link": "Поділитися", + "control_bottom_app_bar_share_link": "Поділитися посиланням", "control_bottom_app_bar_share_to": "Поділитися", - "control_bottom_app_bar_trash_from_immich": "До кошика", - "copied_image_to_clipboard": "Зображення скопійовано в буфер обміну.", - "copied_to_clipboard": "Скопійовано в буфер обміну!", - "copy_error": "Помилка копіювання", + "control_bottom_app_bar_trash_from_immich": "Перемістити до кошика", + "copied_image_to_clipboard": "Зображення скопійовано до буфера обміну.", + "copied_to_clipboard": "Скопійовано до буфера обміну!", + "copy_error": "Не вдалося скопіювати", "copy_file_path": "Скопіювати шлях до файлу", "copy_image": "Скопіювати зображення", "copy_link": "Скопіювати посилання", - "copy_link_to_clipboard": "Скопіювати посилання в буфер обміну", + "copy_link_to_clipboard": "Скопіювати посилання до буфера обміну", "copy_password": "Скопіювати пароль", - "copy_to_clipboard": "Скопіювати в буфер обміну", + "copy_to_clipboard": "Скопіювати до буфера обміну", "country": "Країна", "cover": "Обкладинка", "covers": "Обкладинки", @@ -843,90 +843,89 @@ "create_album": "Створити альбом", "create_album_page_untitled": "Без назви", "create_api_key": "Створити ключ API", - "create_first_workflow": "Створити перший робочий процес", + "create_first_workflow": "Створити першу автоматизацію", "create_library": "Створити бібліотеку", "create_link": "Створити посилання", "create_link_to_share": "Створити посилання спільного доступу", - "create_link_to_share_description": "Дозволити перегляд вибраних фотографій за посиланням будь-кому", + "create_link_to_share_description": "Дати змогу будь-кому переглядати вибрані фото за посиланням", "create_new": "СТВОРИТИ НОВИЙ", - "create_new_person": "Створити нову особу", - "create_new_person_hint": "Призначити обраним фото нову особу", + "create_new_person": "Створити нову людину", + "create_new_person_hint": "Призначити вибрані елементи новій людині", "create_new_user": "Створити нового користувача", - "create_shared_album_page_share_add_assets": "ДОДАТИ ФОТО/ВІДЕО", + "create_shared_album_page_share_add_assets": "ДОДАТИ ЕЛЕМЕНТИ", "create_shared_album_page_share_select_photos": "Вибрати фото", "create_shared_link": "Створити спільне посилання", "create_tag": "Створити тег", - "create_tag_description": "Створити новий тег. Для вкладених тегів вкажіть повний шлях тега, включаючи слеші.", + "create_tag_description": "Створити новий тег. Для вкладених тегів вкажіть повний шлях тега, разом зі скісною рискою (/).", "create_user": "Створити користувача", - "create_workflow": "Створити робочий процес", + "create_workflow": "Створити автоматизацію", "created": "Створено", "created_at": "Створено", - "creating_linked_albums": "Створення пов’язаних альбомів...", + "creating_linked_albums": "Створення пов’язаних альбомів…", "crop": "Кадрувати", "crop_aspect_ratio_fixed": "Фіксоване", "crop_aspect_ratio_free": "Вільне", - "crop_aspect_ratio_original": "Оригінал", + "crop_aspect_ratio_original": "Оригінальне", + "crop_aspect_ratio_square": "Квадратне", "curated_object_page_title": "Речі", "current_device": "Поточний пристрій", "current_pin_code": "Поточний PIN-код", "current_server_address": "Поточна адреса сервера", - "custom_date": "Власна дата", - "custom_locale": "Користувацький регіон", - "custom_locale_description": "Форматувати дату, час та числа з урахуванням обраної мови та регіону", - "custom_url": "Власна URL-адреса", - "cutoff_date_description": "Збережіть фотографії з останнього…", + "custom_date": "Довільна дата", + "custom_locale": "Довільні регіональні налаштування", + "custom_locale_description": "Форматувати дату, час та числа з урахуванням вибраної мови та регіону", + "custom_url": "Довільна URL-адреса", + "cutoff_date_description": "Зберігати фото за останні…", "cutoff_day": "{count, plural, one {день} few {дні} many {днів} other {днів}}", "cutoff_year": "{count, plural, one {рік} few {роки} many {років} other {років}}", - "daily_title_text_date": "Е, МММ дд", - "daily_title_text_date_year": "Е, МММ дд, рррр", + "daily_title_text_date": "E, dd MMM", + "daily_title_text_date_year": "E, dd MMM yyyy", "dark": "Темна", - "dark_theme": "Увімкнути темну тему", + "dark_theme": "Перемкнути на темну тему", "date": "Дата", "date_after": "Дата після", - "date_and_time": "Дата і час", + "date_and_time": "Дата й час", "date_before": "Дата до", - "date_format": "Е, ЛЛЛ д, р • г:мм дп", - "date_of_birth_saved": "Дата народження успішно збережена", - "date_range": "Проміжок часу", + "date_format": "E, d LLL y • HH:mm", + "date_of_birth_saved": "Дату народження збережено", + "date_range": "Діапазон дат", "day": "День", "days": "Дні", "deduplicate_all": "Видалити всі дублікати", - "deduplication_criteria_1": "Розмір зображення в байтах", - "deduplication_criteria_2": "Кількість даних EXIF", - "deduplication_info": "Інформація про дедуплікацію", - "deduplication_info_description": "Для автоматичного попереднього вибору файлів і масового видалення дублікатів ми враховуємо:", + "default_locale": "Типова локаль", + "default_locale_description": "Форматувати дати та числа відповідно до локалі вашого браузера", "delete": "Видалити", - "delete_action_confirmation_message": "Ви впевнені, що хочете видалити цей файл? Його буде переміщено до кошика на сервері, а також зʼявиться запит на його видалення з пристрою", - "delete_action_prompt": "Видалено {count, plural, one {# файл} few {# файли} other {# файлів}}", + "delete_action_confirmation_message": "Ви впевнені, що хочете видалити цей елемент? Його буде переміщено до кошика на сервері, а також з'явиться запит на його видалення з пристрою", + "delete_action_prompt": "Видалено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", "delete_album": "Видалити альбом", "delete_api_key_prompt": "Ви впевнені, що хочете видалити цей ключ API?", - "delete_dialog_alert": "Ці файли будуть остаточно видалені з серверу Immich та вашого пристрою", - "delete_dialog_alert_local": "Ці файли будуть остаточно видалені з вашого пристрою, але залишаться доступними на сервері Immich", - "delete_dialog_alert_local_non_backed_up": "Деякі файли не були збережені на сервері Immich і будуть остаточно видалені з вашого пристрою", - "delete_dialog_alert_remote": "Ці файли будуть назавжди видалені з серверу Immich", + "delete_dialog_alert": "Ці елементи буде назавжди видалено з Immich та з вашого пристрою", + "delete_dialog_alert_local": "Ці елементи буде назавжди видалено з вашого пристрою, але вони залишаться на сервері Immich", + "delete_dialog_alert_local_non_backed_up": "Деякі елементи не збережено на сервері Immich, і їх буде назавжди видалено з вашого пристрою", + "delete_dialog_alert_remote": "Ці елементи буде назавжди видалено з сервера Immich", "delete_dialog_ok_force": "Все одно видалити", - "delete_dialog_title": "Видалити остаточно", + "delete_dialog_title": "Видалити назавжди", "delete_duplicates_confirmation": "Ви впевнені, що хочете назавжди видалити ці дублікати?", "delete_face": "Видалити обличчя", "delete_key": "Видалити ключ", "delete_library": "Видалити бібліотеку", "delete_link": "Видалити посилання", - "delete_local_action_prompt": "Видалено з пристрою {count, plural, one {# файл} few {# файли} other {# файлів}}", - "delete_local_dialog_ok_backed_up_only": "Видалити лише резервні копії", + "delete_local_action_prompt": "Видалено з пристрою {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "delete_local_dialog_ok_backed_up_only": "Видалити лише елементи, збережені на сервері", "delete_local_dialog_ok_force": "Все одно видалити", "delete_others": "Видалити інші", "delete_permanently": "Видалити назавжди", - "delete_permanently_action_prompt": "Остаточно видалено {count, plural, one {# файл} few {# файли} other {# файлів}}", + "delete_permanently_action_prompt": "Остаточно видалено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", "delete_shared_link": "Видалити спільне посилання", "delete_shared_link_dialog_title": "Видалити спільне посилання", - "delete_tag": "Видалити Тег", + "delete_tag": "Видалити тег", "delete_tag_confirmation_prompt": "Ви впевнені, що хочете видалити тег {tagName}?", "delete_user": "Видалити користувача", "deleted_shared_link": "Видалено спільне посилання", - "deletes_missing_assets": "Видаляє файли, які відсутні на диску", + "deletes_missing_assets": "Видаляє елементи, які відсутні на диску", "description": "Опис", - "description_input_hint_text": "Додати опис...", - "description_input_submit_error": "Помилка оновлення опису, перевірте журнал для подробиць", + "description_input_hint_text": "Додати опис…", + "description_input_submit_error": "Не вдалося оновити опис. Перегляньте журнал для деталей", "deselect_all": "Скасувати вибір усіх", "details": "Деталі", "direction": "Напрям", @@ -934,77 +933,77 @@ "disabled": "Вимкнено", "disallow_edits": "Заборонити редагування", "discord": "Discord", - "discover": "Виявити", + "discover": "Відкриття", "discovered_devices": "Виявлені пристрої", - "dismiss_all_errors": "Пропустити всі помилки", - "dismiss_error": "Пропустити помилку", - "display_options": "Параметри відображення", + "dismiss_all_errors": "Приховати всі помилки", + "dismiss_error": "Приховати помилку", + "display_options": "Варіанти відображення", "display_order": "Порядок відображення", - "display_original_photos": "Відображення оригінальних фотографій", - "display_original_photos_setting_description": "Надавати перевагу відображенню оригінального фото при перегляді фотографії, якщо оригінальне фото сумісне з вебом. Це може призвести до повільнішого відображення фотографій.", - "do_not_show_again": "Не показувати це повідомлення знову", + "display_original_photos": "Відображати оригінальні фото", + "display_original_photos_setting_description": "Показувати оригінал замість мініатюри, якщо формат елемента підтримується браузером. Це може сповільнити відображення.", + "do_not_show_again": "Більше не показувати це повідомлення", "documentation": "Документація", "done": "Готово", "download": "Завантажити", - "download_action_prompt": "Завантаження {count} фото та відео", + "download_action_prompt": "Завантаження {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", "download_canceled": "Завантаження скасовано", "download_complete": "Завантаження закінчено", "download_enqueue": "Завантаження поставлено в чергу", - "download_error": "Помилка завантаження", - "download_failed": "Завантаження не вдалося", + "download_error": "Не вдалося завантажити", + "download_failed": "Не вдалося завантажити", "download_finished": "Завантаження закінчено", "download_include_embedded_motion_videos": "Вбудовані відео", - "download_include_embedded_motion_videos_description": "Включати відео, вбудовані в рухомі фотографії, як окреме відео", - "download_notfound": "Завантаження не виявлено", + "download_include_embedded_motion_videos_description": "Додавати вбудовані відео з рухомих фото як окремий файл", + "download_notfound": "Завантаження не знайдено", "download_original": "Завантажити оригінал", "download_paused": "Завантаження призупинено", - "download_settings": "Завантажити", - "download_settings_description": "Керування налаштуваннями, пов'язаними з завантаженням фото та відео", + "download_settings": "Завантаження", + "download_settings_description": "Керування налаштуваннями завантаження елементів", "download_started": "Завантаження розпочато", - "download_sucess": "Успішне завантаження", - "download_sucess_android": "Фото та відео завантажено в DCIM/Immich", + "download_sucess": "Завантажено", + "download_sucess_android": "Медіа завантажено в DCIM/Immich", "download_waiting_to_retry": "Очікування повторної спроби", "downloading": "Завантаження", - "downloading_asset_filename": "Завантаження файлу {filename}", + "downloading_asset_filename": "Завантаження елемента {filename}", "downloading_from_icloud": "Завантаження з iCloud", "downloading_media": "Завантаження медіа", - "drop_files_to_upload": "Перенесіть файли в будь-яке місце для вивантаження", + "drop_files_to_upload": "Перетягніть файли будь-куди, щоб вивантажити", "duplicates": "Дублікати", - "duplicates_description": "Визначити, які групи є дублікатами", + "duplicates_description": "Опрацюйте кожну групу, вказавши, які елементи, якщо такі є, є дублікатами", "duration": "Тривалість", - "edit": "Змінити", + "edit": "Редагувати", "edit_album": "Редагувати альбом", "edit_avatar": "Редагувати аватар", "edit_birthday": "Редагувати дату народження", "edit_date": "Редагувати дату", "edit_date_and_time": "Редагувати дату та час", - "edit_date_and_time_action_prompt": "Змінено дату та час у {count, plural, one {# файлі} few {# файлах} other {# файлах}}", - "edit_date_and_time_by_offset": "Змінити дату за зміщенням", + "edit_date_and_time_action_prompt": "Змінено дату та час у {count, plural, one {# елементі} few {# елементах} many {# елементах} other {# елементах}}", + "edit_date_and_time_by_offset": "Змістити дату за зсувом", "edit_date_and_time_by_offset_interval": "Новий діапазон дат: {from} - {to}", "edit_description": "Редагувати опис", - "edit_description_prompt": "Будь ласка, виберіть новий опис:", + "edit_description_prompt": "Оберіть новий опис:", "edit_exclusion_pattern": "Редагувати шаблон виключень", - "edit_faces": "Редагування облич", - "edit_key": "Змінити ключ", + "edit_faces": "Редагувати обличчя", + "edit_key": "Редагувати ключ", "edit_link": "Редагувати посилання", - "edit_location": "Редагувати місцезнаходження", - "edit_location_action_prompt": "Змінено місць зйомки: {count}", - "edit_location_dialog_title": "Місцезнаходження", - "edit_name": "Відредагувати ім'я", + "edit_location": "Редагувати місце", + "edit_location_action_prompt": "Змінено місце зйомки для {count, plural, one {# елемента} few {# елементів} many {# елементів} other {# елементів}}", + "edit_location_dialog_title": "Місце", + "edit_name": "Редагувати ім'я", "edit_people": "Редагувати людей", "edit_tag": "Редагувати тег", "edit_title": "Редагувати заголовок", "edit_user": "Редагувати користувача", - "edit_workflow": "Редагувати робочий процес", + "edit_workflow": "Редагувати автоматизацію", "editor": "Редактор", - "editor_close_without_save_prompt": "Зміни не будуть збережені", + "editor_close_without_save_prompt": "Зміни не буде збережено", "editor_close_without_save_title": "Закрити редактор?", "editor_confirm_reset_all_changes": "Ви впевнені, що хочете скинути всі зміни?", "editor_discard_edits_confirm": "Скасувати зміни", "editor_discard_edits_prompt": "У вас є незбережені зміни. Ви впевнені, що хочете їх скасувати?", "editor_discard_edits_title": "Скасувати зміни?", "editor_edits_applied_error": "Не вдалося застосувати зміни", - "editor_edits_applied_success": "Зміни успішно застосовано", + "editor_edits_applied_success": "Зміни застосовано", "editor_flip_horizontal": "Відобразити горизонтально", "editor_flip_vertical": "Відобразити вертикально", "editor_handle_corner": "{corner, select, top_left {Лівий верхній кут} top_right {Правий верхній кут} bottom_left {Лівий нижній кут} bottom_right {Правий нижній кут} other {Кут}}", @@ -1017,158 +1016,158 @@ "email_notifications": "Сповіщення ел. поштою", "empty_folder": "Ця папка порожня", "empty_trash": "Очистити кошик", - "empty_trash_confirmation": "Ви впевнені, що хочете очистити кошик? Це остаточно видалить всі файли у кошику з Immich.\nЦю дію не можна скасувати!", + "empty_trash_confirmation": "Ви впевнені, що хочете очистити кошик? Це назавжди видалить з Immich усі елементи, що перебувають у кошику.\nЦю дію не можна скасувати!", "enable": "Увімкнути", "enable_backup": "Увімкнути резервне копіювання", - "enable_biometric_auth_description": "Введіть свій PIN-код, щоб увімкнути біометричну автентифікацію", + "enable_biometric_auth_description": "Введіть PIN-код, щоб увімкнути біометричну автентифікацію", "enabled": "Увімкнено", "end_date": "Дата завершення", "enqueued": "У черзі", "enter_wifi_name": "Введіть назву Wi-Fi", - "enter_your_pin_code": "Введіть свій PIN-код", - "enter_your_pin_code_subtitle": "Введіть свій PIN-код, щоб отримати доступ до особистої папки", + "enter_your_pin_code": "Введіть PIN-код", + "enter_your_pin_code_subtitle": "Введіть PIN-код, щоб отримати доступ до особистої папки", "error": "Помилка", "error_change_sort_album": "Не вдалося змінити порядок сортування альбому", - "error_delete_face": "Помилка при видаленні обличчя з файлу", - "error_getting_places": "Помилка отримання місць", - "error_loading_albums": "Помилка завантаження альбомів", - "error_loading_image": "Помилка завантаження зображення", - "error_loading_partners": "Помилка завантаження партнерів: {error}", - "error_retrieving_asset_information": "Помилка отримання інформації про файл", + "error_delete_face": "Не вдалося видалити обличчя з елемента", + "error_getting_places": "Не вдалося отримати місця", + "error_loading_albums": "Не вдалося завантажити альбоми", + "error_loading_image": "Не вдалося завантажити зображення", + "error_loading_partners": "Не вдалося завантажити партнерів: {error}", + "error_retrieving_asset_information": "Не вдалося отримати інформацію про елемент", "error_saving_image": "Помилка: {error}", - "error_tag_face_bounding_box": "Помилка під час позначення обличчя – не вдалося отримати координати рамки", - "error_title": "Помилка: щось пішло не так", - "error_while_navigating": "Помилка під час переходу до файлу", + "error_tag_face_bounding_box": "Не вдалося позначити обличчя — не вдалося отримати координати рамки", + "error_title": "Помилка — щось пішло не так", + "error_while_navigating": "Не вдалося перейти до елемента", "errors": { - "cannot_navigate_next_asset": "Не вдається перейти до наступного файлу", - "cannot_navigate_previous_asset": "Не вдається перейти до попереднього файлу", + "cannot_navigate_next_asset": "Не вдається перейти до наступного елемента", + "cannot_navigate_previous_asset": "Не вдається перейти до попереднього елемента", "cant_apply_changes": "Не вдається застосувати зміни", - "cant_change_activity": "Не можна {enabled, select, true {вимкнути} other {увімкнути}} активність", - "cant_change_asset_favorite": "Не вдається змінити обране для файлу", - "cant_change_metadata_assets_count": "Неможливо змінити метадані {count, plural, one {# файл} few {# файли} other {# файлів}}", - "cant_get_faces": "Не можу розпізнати обличчя", + "cant_change_activity": "Не вдається {enabled, select, true {вимкнути} other {увімкнути}} активність", + "cant_change_asset_favorite": "Не вдається змінити вибране для елемента", + "cant_change_metadata_assets_count": "Не вдається змінити метадані {count, plural, one {# елемента} few {# елементів} many {# елементів} other {# елементів}}", + "cant_get_faces": "Не вдається отримати обличчя", "cant_get_number_of_comments": "Не вдається отримати кількість коментарів", "cant_search_people": "Не вдається виконати пошук людей", "cant_search_places": "Не вдається виконати пошук місць", - "error_adding_assets_to_album": "Помилка додавання файлів до альбому", - "error_adding_users_to_album": "Помилка додавання користувачів до альбому", - "error_deleting_shared_user": "Помилка під час видалення користувача зі спільним доступом", - "error_downloading": "Помилка завантаження {filename}", - "error_hiding_buy_button": "Помилка при спробі приховати кнопку покупки", - "error_removing_assets_from_album": "Помилка видалення файлів з альбому, перевірте консоль для отримання додаткових відомостей", - "error_selecting_all_assets": "Помилка вибору всіх файлів", - "exclusion_pattern_already_exists": "Цей шаблон виключення вже існує.", + "error_adding_assets_to_album": "Не вдалося додати елементи до альбому", + "error_adding_users_to_album": "Не вдалося додати користувачів до альбому", + "error_deleting_shared_user": "Не вдалося видалити учасника спільного доступу", + "error_downloading": "Не вдалося завантажити {filename}", + "error_hiding_buy_button": "Не вдалося приховати кнопку купівлі", + "error_removing_assets_from_album": "Не вдалося вилучити елементи з альбому, перевірте консоль для додаткових відомостей", + "error_selecting_all_assets": "Не вдалося вибрати всі елементи", + "exclusion_pattern_already_exists": "Цей шаблон винятку вже існує.", "failed_to_create_album": "Не вдалося створити альбом", "failed_to_create_shared_link": "Не вдалося створити спільне посилання", "failed_to_edit_shared_link": "Не вдалося відредагувати спільне посилання", "failed_to_get_people": "Не вдалося отримати інформацію про людей", - "failed_to_keep_this_delete_others": "Не вдалося зберегти цей файл і видалити інші файли", - "failed_to_load_asset": "Не вдалося завантажити файл", - "failed_to_load_assets": "Не вдалося завантажити файли", + "failed_to_keep_this_delete_others": "Не вдалося зберегти цей елемент і видалити інші елементи", + "failed_to_load_asset": "Не вдалося завантажити елемент", + "failed_to_load_assets": "Не вдалося завантажити елементи", "failed_to_load_notifications": "Не вдалося завантажити сповіщення", - "failed_to_load_people": "Не вдалося завантажити людей", - "failed_to_remove_product_key": "Не вдалося видалити ключ продукту", + "failed_to_load_people": "Не вдалося завантажити список людей", + "failed_to_remove_product_key": "Не вдалося вилучити ключ продукту", "failed_to_reset_pin_code": "Не вдалося скинути PIN-код", - "failed_to_stack_assets": "Не вдалося згорнути файли", - "failed_to_unstack_assets": "Не вдалося розгорнути файли", + "failed_to_stack_assets": "Не вдалося згрупувати елементи", + "failed_to_unstack_assets": "Не вдалося розгрупувати елементи", "failed_to_update_notification_status": "Не вдалося оновити статус сповіщення", "incorrect_email_or_password": "Неправильна адреса електронної пошти або пароль", "library_folder_already_exists": "Цей шлях імпорту вже існує.", - "page_not_found": "Сторінка не знайдена", - "paths_validation_failed": "{paths, plural, one {# шлях} few {# шляхи} many {# шляхів} other {# шляху}} не пройшло перевірку", - "profile_picture_transparent_pixels": "Зображення профілю не може містити прозорих пікселів. Будь ласка, збільшіть масштаб та/або перемістіть зображення.", - "quota_higher_than_disk_size": "Ви встановили квоту, що перевищує розмір диска", + "page_not_found": "Сторінку не знайдено", + "paths_validation_failed": "Перевірка не пройдена для {paths, plural, one {# шляху} few {# шляхів} many {# шляхів} other {# шляхів}}", + "profile_picture_transparent_pixels": "Зображення профілю не може містити прозорих пікселів. Збільшіть масштаб та/або перемістіть зображення.", + "quota_higher_than_disk_size": "Ви установили квоту, що перевищує розмір диска", "something_went_wrong": "Щось пішло не так", - "unable_to_add_album_users": "Неможливо додати користувачів до альбому", - "unable_to_add_assets_to_shared_link": "Не вдається додати файли до спільного посилання", - "unable_to_add_comment": "Неможливо додати коментар", - "unable_to_add_exclusion_pattern": "Не вдається додати шаблон виключення", + "unable_to_add_album_users": "Не вдається додати користувачів до альбому", + "unable_to_add_assets_to_shared_link": "Не вдається додати елементи до спільного посилання", + "unable_to_add_comment": "Не вдається додати коментар", + "unable_to_add_exclusion_pattern": "Не вдається додати шаблон винятку", "unable_to_add_partners": "Не вдається додати партнерів", - "unable_to_add_remove_archive": "Неможливо {archived, select, true {вилучити файл із} other {додати файл до}} архіву", - "unable_to_add_remove_favorites": "Неможливо {favorite, select, true {додати файл до} other {вилучити файл із}} обраних", - "unable_to_archive_unarchive": "Неможливо {archived, select, true {архівувати} other {розархівувати}}", - "unable_to_change_album_user_role": "Неможливо змінити роль користувача альбому", - "unable_to_change_date": "Неможливо змінити дату", - "unable_to_change_description": "Не вдалося змінити опис", - "unable_to_change_favorite": "Неможливо змінити статус обраного для файлу", - "unable_to_change_location": "Неможливо змінити місцезнаходження", + "unable_to_add_remove_archive": "Не вдається {archived, select, true {вилучити елемент із} other {додати елемент до}} архіву", + "unable_to_add_remove_favorites": "Не вдається {favorite, select, true {додати елемент до} other {вилучити елемент із}} вибраного", + "unable_to_archive_unarchive": "Не вдається {archived, select, true {архівувати} other {вилучити з архіву}}", + "unable_to_change_album_user_role": "Не вдається змінити роль користувача альбому", + "unable_to_change_date": "Не вдається змінити дату", + "unable_to_change_description": "Не вдається змінити опис", + "unable_to_change_favorite": "Не вдається змінити статус вибраного для елемента", + "unable_to_change_location": "Не вдається змінити місце", "unable_to_change_password": "Не вдається змінити пароль", - "unable_to_change_visibility": "Неможливо змінити видимість для {count, plural, one {# особи} few {# осіб} other {# людей}}", - "unable_to_complete_oauth_login": "Неможливо завершити вхід через OAuth", - "unable_to_connect": "Не вдається підключитися", - "unable_to_copy_to_clipboard": "Неможливо скопіювати в буфер обміну. Переконайтеся, що ви заходите на сторінку через https", - "unable_to_create": "Не вдалося створити робочий процес", - "unable_to_create_admin_account": "Неможливо створити обліковий запис адміністратора", - "unable_to_create_api_key": "Неможливо створити новий ключ API", - "unable_to_create_library": "Не вдалося створити бібліотеку", - "unable_to_create_user": "Не вдалося створити користувача", + "unable_to_change_visibility": "Не вдається змінити видимість для {count, plural, one {# людини} few {# людей} many {# людей} other {# людей}}", + "unable_to_complete_oauth_login": "Не вдається завершити вхід через OAuth", + "unable_to_connect": "Не вдається під'єднатися", + "unable_to_copy_to_clipboard": "Не вдається скопіювати в буфер обміну. Переконайтеся, що ви заходите на сторінку через https", + "unable_to_create": "Не вдається створити автоматизацію", + "unable_to_create_admin_account": "Не вдається створити обліковий запис адміністратора", + "unable_to_create_api_key": "Не вдається створити новий ключ API", + "unable_to_create_library": "Не вдається створити бібліотеку", + "unable_to_create_user": "Не вдається створити користувача", "unable_to_delete_album": "Не вдається видалити альбом", - "unable_to_delete_asset": "Не вдається видалити файл", - "unable_to_delete_assets": "Помилка видалення файлів", - "unable_to_delete_exclusion_pattern": "Не вдалося видалити шаблон виключення", - "unable_to_delete_shared_link": "Не вдалося видалити спільне посилання", + "unable_to_delete_asset": "Не вдається видалити елемент", + "unable_to_delete_assets": "Не вдається видалити елементи", + "unable_to_delete_exclusion_pattern": "Не вдається видалити шаблон винятку", + "unable_to_delete_shared_link": "Не вдається видалити спільне посилання", "unable_to_delete_user": "Не вдається видалити користувача", - "unable_to_delete_workflow": "Не вдалося видалити робочий процес", - "unable_to_download_files": "Неможливо завантажити файли", - "unable_to_edit_exclusion_pattern": "Не вдалося редагувати шаблон виключення", - "unable_to_empty_trash": "Неможливо очистити кошик", - "unable_to_enter_fullscreen": "Неможливо увійти в повноекранний режим", - "unable_to_exit_fullscreen": "Неможливо вийти з повноекранного режиму", - "unable_to_get_comments_number": "Не вдалося отримати кількість коментарів", - "unable_to_get_shared_link": "Не вдалося отримати спільне посилання", - "unable_to_hide_person": "Неможливо приховати людину", - "unable_to_link_motion_video": "Не вдається зв'язати рухоме відео", - "unable_to_link_oauth_account": "Не вдається прив'язати обліковий запис OAuth", + "unable_to_delete_workflow": "Не вдається видалити автоматизацію", + "unable_to_download_files": "Не вдається завантажити файли", + "unable_to_edit_exclusion_pattern": "Не вдається редагувати шаблон винятку", + "unable_to_empty_trash": "Не вдається очистити кошик", + "unable_to_enter_fullscreen": "Не вдається увійти в повноекранний режим", + "unable_to_exit_fullscreen": "Не вдається вийти з повноекранного режиму", + "unable_to_get_comments_number": "Не вдається отримати кількість коментарів", + "unable_to_get_shared_link": "Не вдається отримати спільне посилання", + "unable_to_hide_person": "Не вдається приховати людину", + "unable_to_link_motion_video": "Не вдається приєднати рухоме відео", + "unable_to_link_oauth_account": "Не вдається приєднати обліковий запис OAuth", "unable_to_log_out_all_devices": "Не вдається вийти з усіх пристроїв", "unable_to_log_out_device": "Не вдається вийти з пристрою", "unable_to_login_with_oauth": "Не вдається увійти за допомогою OAuth", "unable_to_play_video": "Не вдається відтворити відео", - "unable_to_reassign_assets_existing_person": "Не вдалося перепризначити файли {name, select, null {існуючій особі} other {{name}}}", - "unable_to_reassign_assets_new_person": "Неможливо перепризначити файли новій особі", - "unable_to_refresh_user": "Не вдалося оновити користувача", - "unable_to_remove_album_users": "Неможливо видалити користувачів з альбому", - "unable_to_remove_api_key": "Не вдається видалити ключ API", - "unable_to_remove_assets_from_shared_link": "Не вдається видалити файли зі спільного посилання", - "unable_to_remove_library": "Не вдається видалити бібліотеку", - "unable_to_remove_partner": "Не вдається видалити партнера", - "unable_to_remove_reaction": "Не вдалося видалити реакцію", + "unable_to_reassign_assets_existing_person": "Не вдається перепризначити елементи {name, select, null {наявній людині} other {{name}}}", + "unable_to_reassign_assets_new_person": "Не вдається перепризначити елементи новій людині", + "unable_to_refresh_user": "Не вдається оновити користувача", + "unable_to_remove_album_users": "Не вдається вилучити користувачів з альбому", + "unable_to_remove_api_key": "Не вдається вилучити ключ API", + "unable_to_remove_assets_from_shared_link": "Не вдається вилучити елементи зі спільного посилання", + "unable_to_remove_library": "Не вдається вилучити бібліотеку", + "unable_to_remove_partner": "Не вдається вилучити партнера", + "unable_to_remove_reaction": "Не вдається вилучити реакцію", "unable_to_reset_password": "Не вдається скинути пароль", - "unable_to_reset_pin_code": "Неможливо скинути PIN-код", - "unable_to_resolve_duplicate": "Не вдається вирішити дублікат", - "unable_to_restore_assets": "Неможливо відновити файли", - "unable_to_restore_trash": "Не вдалося відновити вміст", + "unable_to_reset_pin_code": "Не вдається скинути PIN-код", + "unable_to_resolve_duplicate": "Не вдається опрацювати дублікат", + "unable_to_restore_assets": "Не вдається відновити елементи", + "unable_to_restore_trash": "Не вдається відновити вміст кошика", "unable_to_restore_user": "Не вдається відновити користувача", "unable_to_save_album": "Не вдається зберегти альбом", "unable_to_save_api_key": "Не вдається зберегти ключ API", - "unable_to_save_date_of_birth": "Не вдалося зберегти дату народження", + "unable_to_save_date_of_birth": "Не вдається зберегти дату народження", "unable_to_save_name": "Не вдається зберегти ім'я", "unable_to_save_profile": "Не вдається зберегти профіль", "unable_to_save_settings": "Не вдається зберегти налаштування", "unable_to_scan_libraries": "Не вдається просканувати бібліотеки", - "unable_to_scan_library": "Не вдалося просканувати бібліотеку", - "unable_to_set_feature_photo": "Не вдалося встановити фотографію на обкладинку", - "unable_to_set_profile_picture": "Не вдається встановити зображення профілю", - "unable_to_set_rating": "Не вдалося встановити рейтинг", - "unable_to_submit_job": "Не вдалося надіслати завдання", - "unable_to_trash_asset": "Неможливо видалити файл", - "unable_to_unlink_account": "Не вдається відв'язати обліковий запис", + "unable_to_scan_library": "Не вдається просканувати бібліотеку", + "unable_to_set_feature_photo": "Не вдається установити головне фото", + "unable_to_set_profile_picture": "Не вдається установити зображення профілю", + "unable_to_set_rating": "Не вдається установити рейтинг", + "unable_to_submit_job": "Не вдається надіслати завдання", + "unable_to_trash_asset": "Не вдається перемістити елемент до кошика", + "unable_to_unlink_account": "Не вдається від'єднати обліковий запис", "unable_to_unlink_motion_video": "Не вдається від'єднати рухоме відео", - "unable_to_update_album_cover": "Неможливо оновити обкладинку альбому", - "unable_to_update_album_info": "Неможливо оновити інформацію про альбом", - "unable_to_update_library": "Не вдалося оновити бібліотеку", - "unable_to_update_location": "Не вдається оновити місцезнаходження", + "unable_to_update_album_cover": "Не вдається оновити обкладинку альбому", + "unable_to_update_album_info": "Не вдається оновити інформацію про альбом", + "unable_to_update_library": "Не вдається оновити бібліотеку", + "unable_to_update_location": "Не вдається оновити місце", "unable_to_update_settings": "Не вдається оновити налаштування", - "unable_to_update_timeline_display_status": "Не вдається оновити стан відображення шкали часу", - "unable_to_update_user": "Неможливо оновити дані користувача", - "unable_to_update_workflow": "Не вдалося оновити робочий процес", - "unable_to_upload_file": "Не вдалося вивантажити файл" + "unable_to_update_timeline_display_status": "Не вдається оновити стан відображення хронології", + "unable_to_update_user": "Не вдається оновити дані користувача", + "unable_to_update_workflow": "Не вдається оновити автоматизацію", + "unable_to_upload_file": "Не вдається вивантажити файл" }, "errors_text": "Помилки", - "exclusion_pattern": "Шаблон виключення", + "exclusion_pattern": "Шаблон винятку", "exif": "Exif", - "exif_bottom_sheet_description": "Додати опис...", - "exif_bottom_sheet_description_error": "Помилка під час оновлення опису", - "exif_bottom_sheet_details": "Деталі", + "exif_bottom_sheet_description": "Додати опис…", + "exif_bottom_sheet_description_error": "Не вдалося оновити опис", + "exif_bottom_sheet_details": "ДЕТАЛІ", "exif_bottom_sheet_location": "МІСЦЕ", "exif_bottom_sheet_no_description": "Без опису", "exif_bottom_sheet_people": "ЛЮДИ", @@ -1176,39 +1175,39 @@ "exit_slideshow": "Вийти зі слайд-шоу", "expand": "Розгорнути", "expand_all": "Розгорнути все", - "experimental_settings_new_asset_list_subtitle": "В розробці", - "experimental_settings_new_asset_list_title": "Увімкнути експериментальну сітку фото", - "experimental_settings_subtitle": "На власний ризик!", + "experimental_settings_new_asset_list_subtitle": "У розробці", + "experimental_settings_new_asset_list_title": "Вмикати експериментальну сітку фото", + "experimental_settings_subtitle": "Використовуйте на власний ризик!", "experimental_settings_title": "Експериментальні", - "expire_after": "Термін дії закінчується через", + "expire_after": "Спливає через", "expired": "Закінчився термін дії", "expires_date": "Термін дії закінчується {date}", - "explore": "Дослідити", + "explore": "Огляд", "explorer": "Провідник", "export": "Експортувати", - "export_as_json": "Експорт в JSON", + "export_as_json": "Експортувати як JSON", "export_database": "Експортувати базу даних", "export_database_description": "Експортувати базу даних SQLite", "extension": "Розширення", "external": "Зовнішні", "external_libraries": "Зовнішні бібліотеки", "external_network": "Зовнішня мережа", - "external_network_sheet_info": "Коли ви не підключені до обраної мережі Wi-Fi, застосунок підключатиметься до сервера через першу з наведених нижче URL-адрес, яку він зможе досягти, починаючи зверху вниз", + "external_network_sheet_info": "Коли ви не під'єднані до обраної мережі Wi-Fi, застосунок під'єднуватиметься до сервера через першу доступну URL-адресу з наведених нижче, починаючи зверху вниз", "face_unassigned": "Не призначено", "failed": "Не вдалося", "failed_count": "Не вдалося: {count}", - "failed_to_authenticate": "Помилка автентифікації", - "failed_to_load_assets": "Не вдалося завантажити файли", + "failed_to_authenticate": "Не вдалося автентифікуватися", + "failed_to_load_assets": "Не вдалося завантажити елементи", "failed_to_load_folder": "Не вдалося завантажити папку", - "favorite": "До обраного", - "favorite_action_prompt": "{count} додано до обраного", - "favorite_or_unfavorite_photo": "Додати до обраних або видалити з обраних фото", - "favorites": "Обране", - "favorites_page_no_favorites": "Немає обраних фото та відео", - "feature_photo_updated": "Вибране фото оновлено", - "features": "Додаткові можливості", + "favorite": "До вибраного", + "favorite_action_prompt": "{count} додано до вибраного", + "favorite_or_unfavorite_photo": "Додати фото до вибраного або вилучити", + "favorites": "Вибране", + "favorites_page_no_favorites": "Немає вибраних фото та відео", + "feature_photo_updated": "Головне фото оновлено", + "features": "Функції", "features_in_development": "Функції в розробці", - "features_setting_description": "Керування додатковими можливостями застосунку", + "features_setting_description": "Керування функціями застосунку", "file_name_or_extension": "Ім'я файлу або розширення", "file_name_text": "Ім'я файлу", "file_name_with_value": "Ім'я файлу: {file_name}", @@ -1216,10 +1215,10 @@ "filename": "Ім'я файлу", "filetype": "Тип файлу", "filter": "Фільтр", - "filter_description": "Умови для фільтрації цільових файлів", + "filter_description": "Умови для фільтрації цільових елементів", "filter_people": "Фільтр за людьми", "filter_places": "Фільтр за місцями", - "filter_tags": "Фільтрувати теги", + "filter_tags": "Фільтр за тегами", "filters": "Фільтри", "find_them_fast": "Швидко знаходьте їх за назвою за допомогою пошуку", "first": "Перший", @@ -1227,184 +1226,186 @@ "folder": "Папка", "folder_not_found": "Папку не знайдено", "folders": "Папки", - "folders_feature_description": "Перегляд папок з фотографіями та відео у файловій системі", - "forgot_pin_code_question": "Забули свій PIN-код?", + "folders_feature_description": "Перегляд папок з фото та відео у файловій системі", + "forgot_pin_code_question": "Забули PIN-код?", "forward": "Переслати", "free_up_space": "Звільнити місце", - "free_up_space_description": "Перемістіть резервні копії фотографій і відео до кошика вашого пристрою, щоб звільнити місце. Ваші копії на сервері залишаються в безпеці.", - "free_up_space_settings_subtitle": "Звільнити пам'ять пристрою", + "free_up_space_description": "Перемістіть фото й відео, для яких є резервна копія, до кошика вашого пристрою, щоб звільнити місце. Ваші копії на сервері залишаються в безпеці.", + "free_up_space_settings_subtitle": "Звільнити сховище пристрою", "full_path": "Повний шлях: {path}", "gcast_enabled": "Google Cast", "gcast_enabled_description": "Ця функція завантажує зовнішні ресурси з Google для своєї роботи.", "general": "Загальні", - "geolocation_instruction_location": "Натисніть на файл із геоданими, щоб використати його місцезнаходження, або виберіть місцезнаходження безпосередньо на мапі", + "geolocation_instruction_location": "Натисніть на елемент із геоданими, щоб використати його місце, або виберіть місце безпосередньо на мапі", "get_help": "Отримати допомогу", - "get_people_error": "Помилка отримання людей", - "get_wifiname_error": "Не вдалося отримати назву Wi-Fi. Переконайтеся, що ви надали необхідні дозволи та підключені до Wi-Fi мережі", - "getting_started": "Початок", + "get_people_error": "Не вдалося отримати список людей", + "get_wifiname_error": "Не вдалося отримати назву Wi-Fi. Переконайтеся, що ви надали необхідні дозволи та під'єднані до Wi-Fi мережі", + "getting_started": "Початок роботи", "go_back": "Повернутися назад", "go_to_folder": "Перейти до папки", "go_to_search": "Перейти до пошуку", - "gps": "Геолокація", + "gps": "GPS", "gps_missing": "Немає геоданих", "grant_permission": "Надати дозвіл", - "group_albums_by": "Групувати альбоми за...", - "group_country": "Групувати за країною", + "group_albums_by": "Групувати альбоми за…", + "group_country": "За країною", "group_no": "Без групування", "group_owner": "За власником", - "group_places_by": "Групувати місця за...", + "group_places_by": "Групувати місця за…", "group_year": "За роком", - "haptic_feedback_switch": "Увімкнути тактильну віддачу", - "haptic_feedback_title": "Тактильна віддача", - "has_quota": "Квота", - "hash_asset": "Хешувати файл", - "hashed_assets": "Хеши", + "haptic_feedback_switch": "Вмикати тактильний відгук", + "haptic_feedback_title": "Тактильний відгук", + "has_quota": "Має квоту", + "hash_asset": "Хешувати елемент", + "hashed_assets": "Захешовані елементи", "hashing": "Хешування", "header_settings_add_header_tip": "Додати заголовок", "header_settings_field_validator_msg": "Значення не може бути порожнім", - "header_settings_header_name_input": "Ім'я заголовку", - "header_settings_header_value_input": "Значення заголовку", - "headers_settings_tile_title": "Користувальницькі заголовки проксі", + "header_settings_header_name_input": "Назва заголовка", + "header_settings_header_value_input": "Значення заголовка", + "headers_settings_tile_title": "Довільні заголовки проксі", "height": "Висота", "hi_user": "Привіт {name} ({email})", - "hide_all_people": "Сховати всіх", + "hide_all_people": "Приховати всіх людей", "hide_gallery": "Приховати галерею", - "hide_named_person": "Приховати {name}", + "hide_named_person": "Приховати людину {name}", "hide_password": "Приховати пароль", "hide_person": "Приховати людину", "hide_schema": "Приховати схему", "hide_text_recognition": "Приховати розпізнавання тексту", - "hide_unnamed_people": "Приховати людей без ім'я", - "home_page_add_to_album_conflicts": "Додано {added} файлів до альбому {album}. {failed} файлів вже було в альбомі.", - "home_page_add_to_album_err_local": "Неможливо додати локальні файли до альбомів, пропускаю", - "home_page_add_to_album_success": "Додано {added} файлів до альбому {album}.", - "home_page_album_err_partner": "Поки що не вдається додати файли партнера до альбому, пропускаю", - "home_page_archive_err_local": "Поки що неможливо заархівувати локальні файли, пропускаю", - "home_page_archive_err_partner": "Неможливо архівувати файли партнера, пропускаю", + "hide_unnamed_people": "Приховати людей без імені", + "home_page_add_to_album_conflicts": "Додано {added} елементів до альбому {album}. {failed} елементів вже є в альбомі.", + "home_page_add_to_album_err_local": "Наразі не вдається додати локальні елементи до альбомів, пропущено", + "home_page_add_to_album_success": "Додано {added} елементів до альбому {album}.", + "home_page_album_err_partner": "Наразі не вдається додати елементи партнера до альбому, пропущено", + "home_page_archive_err_local": "Наразі не вдається архівувати локальні елементи, пропущено", + "home_page_archive_err_partner": "Не вдається архівувати елементи партнера, пропущено", "home_page_building_timeline": "Побудова хронології", - "home_page_delete_err_partner": "Неможливо видалити файли партнера, пропускаю", - "home_page_delete_remote_err_local": "Локальні файл(и) вже в процесі видалення з сервера, пропускаю", - "home_page_favorite_err_local": "Поки що не можна додати до обраного локальні файли, пропускаю", - "home_page_favorite_err_partner": "Поки що не можна додати до обраного файли партнера, пропускаю", - "home_page_first_time_notice": "Якщо ви користуєтеся застосунком вперше, будь ласка, оберіть альбом для резервного копіювання, щоб на шкалі часу з’явилися фото та відео", - "home_page_locked_error_local": "Не вдається перемістити локальні файли до особистої папки, пропускаю", - "home_page_locked_error_partner": "Не вдається перемістити партнерські файли до особистої папки, пропускаю", - "home_page_share_err_local": "Неможливо поділитися локальними файлами через посилання, пропускаю", - "home_page_upload_err_limit": "Можна вивантажувати не більше 30 файлів водночас, пропускаю", + "home_page_delete_err_partner": "Не вдається видалити елементи партнера, пропущено", + "home_page_delete_remote_err_local": "Серед вибраних для видалення з сервера є локальні елементи, пропущено", + "home_page_favorite_err_local": "Наразі не вдається додати локальні елементи до вибраного, пропущено", + "home_page_favorite_err_partner": "Наразі не вдається додати елементи партнера до вибраного, пропущено", + "home_page_first_time_notice": "Якщо ви користуєтеся застосунком уперше, будь ласка, оберіть альбом для резервного копіювання, щоб у хронології з’явилися фото та відео", + "home_page_locked_error_local": "Не вдається перемістити локальні елементи до особистої папки, пропущено", + "home_page_locked_error_partner": "Не вдається перемістити елементи партнера до особистої папки, пропущено", + "home_page_share_err_local": "Не вдається надати спільний доступ до локальних елементів через посилання, пропущено", + "home_page_upload_err_limit": "Можна вивантажувати не більше 30 елементів водночас, пропущено", "host": "Хост", "hour": "Година", "hours": "Години", "id": "ID", "idle": "Простій", - "ignore_icloud_photos": "Пропускати файли з iCloud", - "ignore_icloud_photos_description": "Не завантажувати файли в Immich, якщо вони зберігаються в iCloud", + "ignore_icloud_photos": "Пропускати фото з iCloud", + "ignore_icloud_photos_description": "Фото, що зберігаються в iCloud, не буде вивантажено на сервер Immich", "image": "Зображення", "image_alt_text_date": "{isVideo, select, true {Відео} other {Зображення}} знято {date}", - "image_alt_text_date_1_person": "{isVideo, select, true {Відео} other {Зображення}} з {person1} зроблено {date}", - "image_alt_text_date_2_people": "{isVideo, select, true {Відео} other {Зображення}} з {person1} та {person2} зроблено {date}", - "image_alt_text_date_3_people": "{isVideo, select, true {Відео} other {Зображення}} з {person1}, {person2} і {person3} зроблено {date}", - "image_alt_text_date_4_or_more_people": "{isVideo, select, true {Відео} other {Зображення}} з {person1}, {person2} та ще {additionalCount, number} особами зроблено {date}", - "image_alt_text_date_place": "{isVideo, select, true {Відео} other {Зображення}} зроблено в {city}, {country} {date}", - "image_alt_text_date_place_1_person": "{isVideo, select, true {Відео} other {Зображення}} зроблено в {city}, {country} з {person1} {date}", - "image_alt_text_date_place_2_people": "{isVideo, select, true {Відео} other {Зображення}} зроблено в {city}, {country} з {person1} та {person2} {date}", - "image_alt_text_date_place_3_people": "{isVideo, select, true {Відео} other {Зображення}} зроблено в {city}, {country} з {person1}, {person2} та {person3} {date}", - "image_alt_text_date_place_4_or_more_people": "{isVideo, select, true {Відео} other {Зображення}} зроблено в {city}, {country} з {person1}, {person2} та ще {additionalCount, number} особами {date}", + "image_alt_text_date_1_person": "{isVideo, select, true {Відео} other {Зображення}} з {person1} знято {date}", + "image_alt_text_date_2_people": "{isVideo, select, true {Відео} other {Зображення}} з {person1} та {person2} знято {date}", + "image_alt_text_date_3_people": "{isVideo, select, true {Відео} other {Зображення}} з {person1}, {person2} і {person3} знято {date}", + "image_alt_text_date_4_or_more_people": "{isVideo, select, true {Відео} other {Зображення}} з {person1}, {person2} та ще {additionalCount, number} людьми знято {date}", + "image_alt_text_date_place": "{isVideo, select, true {Відео} other {Зображення}} знято в {city}, {country} {date}", + "image_alt_text_date_place_1_person": "{isVideo, select, true {Відео} other {Зображення}} знято в {city}, {country} з {person1} {date}", + "image_alt_text_date_place_2_people": "{isVideo, select, true {Відео} other {Зображення}} знято в {city}, {country} з {person1} та {person2} {date}", + "image_alt_text_date_place_3_people": "{isVideo, select, true {Відео} other {Зображення}} знято в {city}, {country} з {person1}, {person2} та {person3} {date}", + "image_alt_text_date_place_4_or_more_people": "{isVideo, select, true {Відео} other {Зображення}} знято в {city}, {country} з {person1}, {person2} та ще {additionalCount, number} людьми {date}", "image_saved_successfully": "Зображення збережено", "image_viewer_page_state_provider_download_started": "Завантаження почалося", - "image_viewer_page_state_provider_download_success": "Успішно завантажено", - "image_viewer_page_state_provider_share_error": "Помилка спільного доступу", + "image_viewer_page_state_provider_download_success": "Завантажено", + "image_viewer_page_state_provider_share_error": "Не вдалося надати спільний доступ", "immich_logo": "Логотип Immich", "immich_web_interface": "Веб-інтерфейс Immich", - "import_from_json": "Імпорт з JSON", + "import_from_json": "Імпорт із JSON", "import_path": "Шлях імпорту", "in_albums": "У {count, plural, one {# альбомі} few {# альбомах} many {# альбомах} other {# альбомах}}", "in_archive": "В архіві", "in_year": "У {year}", "in_year_selector": "У", - "include_archived": "Відображати архів", - "include_shared_albums": "Включити спільні альбоми", - "include_shared_partner_assets": "Включити файли партнера", - "individual_share": "Індивідуальний доступ", - "individual_shares": "Окремі спільні доступи", + "include_archived": "Враховувати архівовані", + "include_shared_albums": "Враховувати спільні альбоми", + "include_shared_partner_assets": "Враховувати елементи партнера", + "individual_share": "Окремий доступ", + "individual_shares": "Окремі доступи", "info": "Інформація", "interval": { "day_at_onepm": "Щодня о 13:00", - "hours": "Кожну {hours, plural, one {годину} few {години} many {годин} other {години}}", + "hours": "Кожну {hours, plural, one {# годину} few {# години} many {# годин} other {# годин}}", "night_at_midnight": "Кожної ночі о півночі", "night_at_twoam": "Кожної ночі о 2:00" }, - "invalid_date": "Недійсна дата", - "invalid_date_format": "Недійсний формат дати", - "invite_people": "Запросити", + "invalid_date": "Некоректна дата", + "invalid_date_format": "Некоректний формат дати", + "invite_people": "Запросити людей", "invite_to_album": "Запросити в альбом", "ios_debug_info_fetch_ran_at": "Отримано дані {dateTime}", "ios_debug_info_last_sync_at": "Остання синхронізація {dateTime}", "ios_debug_info_no_processes_queued": "Фонові процеси відсутні в черзі", - "ios_debug_info_no_sync_yet": "Фонове завдання синхронізації ще не запускалося", + "ios_debug_info_no_sync_yet": "Фонове завдання синхронізації ще не виконувалося", "ios_debug_info_processes_queued": "{count, plural, one {{count} фоновий процес у черзі} few {{count} фонові процеси у черзі} many {{count} фонових процесів у черзі} other {{count} фонових процесів у черзі}}", "ios_debug_info_processing_ran_at": "Обробку виконано {dateTime}", - "items_count": "{count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}}", + "items_count": "{count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", "jobs": "Завдання", "json_editor": "JSON-редактор", "json_error": "Помилка JSON", "keep": "Залишити", - "keep_albums": "Зберігати альбоми", - "keep_albums_count": "Зберігання {count} {count, plural, one {альбом} few {альбоми} many {альбомів} other {альбомів}}", - "keep_all": "Зберегти все", + "keep_albums": "Залишити альбоми", + "keep_albums_count": "Залишається: {count} {count, plural, one {альбом} few {альбоми} many {альбомів} other {альбомів}}", + "keep_all": "Залишити все", "keep_description": "Виберіть, що залишиться на вашому пристрої після звільнення місця.", - "keep_favorites": "Зберегти обране", - "keep_on_device": "Зберегти на пристрої", + "keep_favorites": "Залишити вибране", + "keep_on_device": "Залишити на пристрої", "keep_on_device_hint": "Виберіть елементи, які потрібно зберегти на цьому пристрої", - "keep_this_delete_others": "Залишити цей файл, видалити інші", - "keeping": "Зберігання: {items}", - "kept_this_deleted_others": "Збережено цей файл і видалено {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}}", + "keep_this_delete_others": "Залишити цей елемент, видалити інші", + "keeping": "Залишається: {items}", + "kept_this_deleted_others": "Збережено цей елемент і видалено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", "keyboard_shortcuts": "Сполучення клавіш", "language": "Мова", "language_no_results_subtitle": "Спробуйте змінити пошуковий запит", "language_no_results_title": "Мови не знайдено", - "language_search_hint": "Пошук мов...", + "language_search_hint": "Пошук мов…", "language_setting_description": "Виберіть мову, якій ви надаєте перевагу", "large_files": "Великі файли", "last": "Останній", - "last_months": "{count, plural, one {Минулого місяця} few {Останні # місяці} many {Останні # місяців} other {Останні # місяців}}", - "last_seen": "Востаннє бачили", + "last_months": "{count, plural, one {Останній місяць} few {Останні # місяці} many {Останні # місяців} other {Останні # місяців}}", + "last_seen": "Востаннє помічено", "latest_version": "Остання версія", "latitude": "Широта", "leave": "Покинути", - "leave_album": "Вийти з альбому", + "leave_album": "Покинути альбом", "lens_model": "Модель об'єктива", - "let_others_respond": "Дозволити іншим відповідати", + "let_others_respond": "Дати змогу іншим відповідати", "level": "Рівень", "library": "Бібліотека", "library_add_folder": "Додати папку", "library_edit_folder": "Редагувати папку", - "library_options": "Параметри бібліотеки", + "library_options": "Варіанти бібліотеки", "library_page_device_albums": "Альбоми на пристрої", "library_page_new_album": "Новий альбом", - "library_page_sort_asset_count": "Кількість файлів", - "library_page_sort_created": "Нещодавно створені", + "library_page_sort_asset_count": "Кількість елементів", + "library_page_sort_created": "Дата створення", "library_page_sort_last_modified": "Остання зміна", "library_page_sort_title": "Назва альбому", "licenses": "Ліцензії", "light": "Світла", + "light_theme": "Перемкнути на світлу тему", "like": "Подобається", "like_deleted": "Вподобання видалено", - "link_motion_video": "Посилання на рухоме відео", - "link_to_oauth": "Приєднання до OAuth", - "linked_oauth_account": "Прив'язаний обліковий запис OAuth", - "list": "Перелік", + "link_motion_video": "Приєднати рухоме відео", + "link_to_docs": "Докладніше дивіться в документації.", + "link_to_oauth": "Приєднати до OAuth", + "linked_oauth_account": "Приєднаний обліковий запис OAuth", + "list": "Список", "loading": "Завантаження", "loading_search_results_failed": "Не вдалося завантажити результати пошуку", "local": "На пристрої", - "local_asset_cast_failed": "Неможливо транслювати файл, який не завантажено на сервер", + "local_asset_cast_failed": "Не вдається транслювати елемент, який не вивантажено на сервер", "local_assets": "Локальні фото та відео", - "local_id": "Місцевий ідентифікатор", - "local_media_summary": "Зведення локальних медіафайлів", + "local_id": "Локальний ідентифікатор", + "local_media_summary": "Зведення локальних медіа", "local_network": "Локальна мережа", - "local_network_sheet_info": "Застосунок підключатиметься до сервера через цей URL, коли використовується вказана Wi-Fi мережа", - "location": "Розташування", - "location_permission": "Дозвіл до місцезнаходження", - "location_permission_content": "Щоб перемикати мережі у фоновому режимі, Immich має завжди мати доступ до точної геолокації, щоб зчитувати назву Wi-Fi мережі", + "local_network_sheet_info": "Застосунок під'єднуватиметься до сервера через цей URL, коли використовується вказана мережа Wi-Fi", + "location": "Місце", + "location_permission": "Дозвіл на визначення місця", + "location_permission_content": "Щоб автоматичне перемикання працювало, Immich потребує дозволу на точне визначення місця, щоб зчитувати назву поточної мережі Wi-Fi", "location_picker_choose_on_map": "Обрати на мапі", "location_picker_latitude_error": "Вкажіть дійсну широту", "location_picker_latitude_hint": "Вкажіть широту", @@ -1415,57 +1416,57 @@ "log_detail_title": "Деталі журналу", "log_out": "Вийти", "log_out_all_devices": "Вийти з усіх пристроїв", - "logged_in_as": "Вхід виконано як {user}", - "logged_out_all_devices": "Вийшли з усіх пристроїв", - "logged_out_device": "Вихід з пристрою", + "logged_in_as": "Ви ввійшли як {user}", + "logged_out_all_devices": "Вийдено з усіх пристроїв", + "logged_out_device": "Вийдено з пристрою", "login": "Вхід", - "login_disabled": "Авторизацію вимкнено", + "login_disabled": "Вхід вимкнено", "login_form_api_exception": "Помилка API. Перевірте адресу сервера і спробуйте знову.", "login_form_back_button_text": "Назад", "login_form_email_hint": "youremail@email.com", "login_form_endpoint_hint": "http://your-server-ip:port", - "login_form_endpoint_url": "Адреса серверу", + "login_form_endpoint_url": "Адреса сервера", "login_form_err_http": "Вкажіть http:// або https://", "login_form_err_invalid_email": "Недійсна електронна адреса", "login_form_err_invalid_url": "Недійсний URL", "login_form_err_leading_whitespace": "Пробіл на початку", - "login_form_err_trailing_whitespace": "Пробіл в кінці", - "login_form_failed_get_oauth_server_config": "Помилка входу через OAuth, перевірте адресу сервера", + "login_form_err_trailing_whitespace": "Пробіл у кінці", + "login_form_failed_get_oauth_server_config": "Не вдалося ввійти через OAuth, перевірте адресу сервера", "login_form_failed_get_oauth_server_disable": "OAuth недоступний на цьому сервері", - "login_form_failed_login": "Помилка входу, перевірте URL-адресу сервера, електронну пошту та пароль", - "login_form_handshake_exception": "Помилка встановлення з'єднання з сервером. Увімкніть підтримку самопідписаного сертифіката в налаштуваннях, якщо ви використовуєте самопідписаний сертифікат.", + "login_form_failed_login": "Не вдалося ввійти, перевірте URL-адресу сервера, електронну пошту та пароль", + "login_form_handshake_exception": "Не вдалося установити з'єднання із сервером. Увімкніть підтримку самопідписаного сертифіката в налаштуваннях, якщо ви використовуєте самопідписаний сертифікат.", "login_form_password_hint": "пароль", - "login_form_save_login": "Запам'ятати вхід", + "login_form_save_login": "Залишатися у системі", "login_form_server_empty": "Введіть URL-адресу сервера.", - "login_form_server_error": "Не вдалося підключитися до сервера.", + "login_form_server_error": "Не вдалося з'єднатися із сервером.", "login_has_been_disabled": "Вхід було вимкнено.", - "login_password_changed_error": "Помилка у оновлені вашого пароля", - "login_password_changed_success": "Пароль оновлено успішно", + "login_password_changed_error": "Не вдалося оновити пароль", + "login_password_changed_success": "Пароль оновлено", "logout_all_device_confirmation": "Ви впевнені, що хочете вийти з усіх пристроїв?", "logout_this_device_confirmation": "Ви впевнені, що хочете вийти з цього пристрою?", "logs": "Журнали", "longitude": "Довгота", "look": "Вигляд", - "loop_videos": "Циклічні відео", - "loop_videos_description": "Увімкнути циклічне відтворення відео.", + "loop_videos": "Повторювати відео", + "loop_videos_description": "Вмикати циклічне відтворення відео під час детального перегляду.", "main_branch_warning": "Ви використовуєте версію для розробників; настійно рекомендуємо використовувати релізну версію!", "main_menu": "Головне меню", "maintenance_action_restore": "Відновлення бази даних", - "maintenance_description": "Immich переведено в режим технічного обслуговування.", - "maintenance_end": "Завершити режим технічного обслуговування", + "maintenance_description": "Immich переведено в режим обслуговування.", + "maintenance_end": "Завершити режим обслуговування", "maintenance_end_error": "Не вдалося завершити режим обслуговування.", "maintenance_logged_in_as": "Наразі ви ввійшли як {user}", "maintenance_restore_from_backup": "Відновлення з резервної копії", "maintenance_restore_library": "Відновіть свою бібліотеку", - "maintenance_restore_library_confirm": "Якщо це виглядає правильно, продовжуйте відновлення резервної копії!", + "maintenance_restore_library_confirm": "Якщо все правильно, продовжуйте відновлення резервної копії!", "maintenance_restore_library_description": "Відновлення бази даних", - "maintenance_restore_library_folder_has_files": "{folder} має {count} папок(ок)", + "maintenance_restore_library_folder_has_files": "{folder} має {count, plural, one {# папку} few {# папки} many {# папок} other {# папок}}", "maintenance_restore_library_folder_no_files": "У папці {folder} відсутні файли!", - "maintenance_restore_library_folder_pass": "читабельний та записуваний", - "maintenance_restore_library_folder_read_fail": "нечитабельно", - "maintenance_restore_library_folder_write_fail": "не можна записувати", - "maintenance_restore_library_hint_missing_files": "Можливо, ви пропускаєте важливі файли", - "maintenance_restore_library_hint_regenerate_later": "Ви можете відновити їх пізніше в налаштуваннях", + "maintenance_restore_library_folder_pass": "доступна для читання та запису", + "maintenance_restore_library_folder_read_fail": "недоступна для читання", + "maintenance_restore_library_folder_write_fail": "недоступна для запису", + "maintenance_restore_library_hint_missing_files": "Можливо, у вас відсутні важливі файли", + "maintenance_restore_library_hint_regenerate_later": "Ви можете перестворити їх пізніше в налаштуваннях", "maintenance_restore_library_hint_storage_template_missing_files": "Використовуєте шаблон сховища? Можливо, вам бракує файлів", "maintenance_restore_library_loading": "Завантаження перевірок цілісності та евристик…", "maintenance_task_backup": "Створення резервної копії існуючої бази даних…", @@ -1474,102 +1475,102 @@ "maintenance_task_rollback": "Не вдалося відновити, повернення до точки відновлення…", "maintenance_title": "Тимчасово недоступно", "make": "Виробник", - "manage_geolocation": "Керувати місцезнаходженням", - "manage_media_access_rationale": "Цей дозвіл потрібен для належного переміщення файлів до кошика та їх відновлення з нього.", + "manage_geolocation": "Керувати місцем", + "manage_media_access_rationale": "Цей дозвіл потрібен, щоб належно переміщувати елементи до кошика та відновлювати їх з нього.", "manage_media_access_settings": "Відкрити налаштування", - "manage_media_access_subtitle": "Дозвольте застосунку Immich керувати медіафайлами та переміщувати їх.", + "manage_media_access_subtitle": "Дайте змогу застосунку Immich керувати медіафайлами та переміщувати їх.", "manage_media_access_title": "Доступ до керування медіа", "manage_shared_links": "Керування спільними посиланнями", - "manage_sharing_with_partners": "Керування спільним доступом з партнерами", + "manage_sharing_with_partners": "Керування спільним доступом із партнерами", "manage_the_app_settings": "Керування налаштуваннями застосунку", "manage_your_account": "Керування обліковим записом", "manage_your_api_keys": "Керування ключами API", "manage_your_devices": "Керування авторизованими пристроями", - "manage_your_oauth_connection": "Налаштування підключеного OAuth", + "manage_your_oauth_connection": "Керування під'єднанням OAuth", "map": "Мапа", - "map_assets_in_bounds": "{count, plural, =0 {Немає фотографій у цій місцевості} one {# фото} few {# фотографії} many {# фотографій} other {# фотографій}}", - "map_cannot_get_user_location": "Не можу отримати місцезнаходження", + "map_assets_in_bounds": "{count, plural, =0 {Немає фото у цій місцевості} one {# фото} few {# фото} many {# фото} other {# фото}}", + "map_cannot_get_user_location": "Не вдається отримати місце користувача", "map_location_dialog_yes": "Так", - "map_location_picker_page_use_location": "Використати це місцезнаходження", - "map_location_service_disabled_content": "Служба геолокації має бути ввімкненою, щоб відображати файли з вашого поточного місцезнаходження. Увімкнути її зараз?", - "map_location_service_disabled_title": "Служба місцезнаходження вимкнена", - "map_marker_for_images": "Маркер на мапі для зображень, зроблених у місті {city}, {country}", + "map_location_picker_page_use_location": "Використати це місце", + "map_location_service_disabled_content": "Служба визначення місця має бути увімкнена, щоб відображати елементи з вашого поточного місця. Увімкнути її зараз?", + "map_location_service_disabled_title": "Служба визначення місця вимкнена", + "map_marker_for_images": "Маркер на мапі для зображень, знятих у {city}, {country}", "map_marker_with_image": "Маркер на мапі із зображенням", - "map_no_location_permission_content": "Потрібен дозвіл, аби показувати файли із поточного місцезнаходження. Надати його зараз?", - "map_no_location_permission_title": "Помилка доступу до місцезнаходження", + "map_no_location_permission_content": "Потрібен дозвіл, щоб показувати елементи із поточного місця. Надати його зараз?", + "map_no_location_permission_title": "Доступ до місця не надано", "map_settings": "Налаштування мапи", "map_settings_dark_mode": "Темний режим", - "map_settings_date_range_option_day": "Минулі 24 години", - "map_settings_date_range_option_days": "Минулих {days} днів", - "map_settings_date_range_option_year": "Минулий рік", + "map_settings_date_range_option_day": "За останні 24 години", + "map_settings_date_range_option_days": "За останні {days} днів", + "map_settings_date_range_option_year": "За останній рік", "map_settings_date_range_option_years": "Минулі {years} роки", "map_settings_dialog_title": "Налаштування мапи", - "map_settings_include_show_archived": "Відображати архів", - "map_settings_include_show_partners": "Відображати фото партнера", - "map_settings_only_show_favorites": "Лише обрані", + "map_settings_include_show_archived": "Враховувати архів", + "map_settings_include_show_partners": "Враховувати партнерів", + "map_settings_only_show_favorites": "Відображати лише вибране", "map_settings_theme_settings": "Тема мапи", "map_zoom_to_see_photos": "Зменште масштаб, щоб побачити фото", "mark_all_as_read": "Позначити всі як прочитані", "mark_as_read": "Позначити як прочитане", "marked_all_as_read": "Позначено всі як прочитані", "matches": "Збіги", - "matching_assets": "Відповідні файли", + "matching_assets": "Відповідні елементи", "media_type": "Тип медіа", "memories": "Спогади", "memories_all_caught_up": "Це все на сьогодні", "memories_check_back_tomorrow": "Завітайте завтра, щоб побачити більше спогадів", - "memories_setting_description": "Налаштування вмісту спогадів", - "memories_start_over": "Почати заново", + "memories_setting_description": "Керування вмістом спогадів", + "memories_start_over": "Почати знову", "memories_swipe_to_close": "Змахніть вгору, щоб закрити", "memory": "Спогад", - "memory_lane_title": "Алея Спогадів {title}", + "memory_lane_title": "Алея спогадів {title}", "menu": "Меню", "merge": "Об'єднати", "merge_people": "Об'єднати людей", "merge_people_limit": "Ви можете об'єднати до 5 облич одночасно", "merge_people_prompt": "Ви хочете об'єднати цих людей? Ця дія незворотна.", - "merge_people_successfully": "Успішне об'єднання людей", - "merged_people_count": "Об'єднано {count, plural, one {# особа} few {# особи} many {# осіб} other {# людей}}", - "minimize": "Мінімізувати", + "merge_people_successfully": "Людей об'єднано", + "merged_people_count": "Об'єднано {count, plural, one {# людину} few {# людини} many {# людей} other {# людей}}", + "minimize": "Згорнути", "minute": "Хвилина", "minutes": "Хвилини", - "mirror_horizontal": "Горизонтальний", - "mirror_vertical": "Вертикальний", + "mirror_horizontal": "По горизонталі", + "mirror_vertical": "По вертикалі", "missing": "Відсутні", "mobile_app": "Мобільний застосунок", - "mobile_app_download_onboarding_note": "Завантажте супутній мобільний застосунок, скориставшись наведеними нижче опціями", + "mobile_app_download_onboarding_note": "Завантажте мобільний застосунок одним із наведених нижче способів", "model": "Модель", "month": "Місяць", - "monthly_title_text_date_format": "ММММ р", + "monthly_title_text_date_format": "MMMM y", "more": "Більше", "move": "Перемістити", "move_down": "Перемістити вниз", - "move_off_locked_folder": "Вийти з особистої папки", + "move_off_locked_folder": "Перемістити з особистої папки", "move_to": "Перемістити до", - "move_to_device_trash": "Перемістити в кошик пристрою", - "move_to_lock_folder_action_prompt": "{count} додано до особистої папки", + "move_to_device_trash": "Перемістити до кошика пристрою", + "move_to_lock_folder_action_prompt": "{count, plural, one {# елемент додано до особистої папки} few {# елементи додано до особистої папки} many {# елементів додано до особистої папки} other {# елементів додано до особистої папки}}", "move_to_locked_folder": "Перемістити до особистої папки", - "move_to_locked_folder_confirmation": "Ці фото та відео буде видалено зі всіх альбомів і їх можна буде переглядати лише в особистій папці", + "move_to_locked_folder_confirmation": "Ці фото та відео буде вилучено з усіх альбомів і їх можна буде переглядати лише в особистій папці", "move_up": "Перемістити вгору", - "moved_to_archive": "Переміщено {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}} в архів", - "moved_to_library": "Переміщено {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}} в бібліотеку", + "moved_to_archive": "Переміщено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до архіву", + "moved_to_library": "Переміщено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до бібліотеки", "moved_to_trash": "Переміщено до кошика", - "multiselect_grid_edit_date_time_err_read_only": "Неможливо редагувати дату файлів лише для читання, пропускаю", - "multiselect_grid_edit_gps_err_read_only": "Неможливо редагувати геолокацію файлів лише для читання, пропускаю", - "mute_memories": "Приглушити спогади", + "multiselect_grid_edit_date_time_err_read_only": "Не вдається редагувати дату елементів лише для читання, пропущено", + "multiselect_grid_edit_gps_err_read_only": "Не вдається редагувати місце елементів лише для читання, пропущено", + "mute_memories": "Вимкнути спогади", "my_albums": "Мої альбоми", "name": "Ім'я", "name_or_nickname": "Ім'я або псевдонім", "name_required": "Ім'я обов'язкове", "navigate": "Навігація", - "navigate_to_time": "Перейти до Часу", - "network_requirement_photos_upload": "Використовувати стільникові дані для резервного копіювання фото", - "network_requirement_videos_upload": "Використовувати стільникові дані для резервного копіювання відео", + "navigate_to_time": "Перейти до часу", + "network_requirement_photos_upload": "Використовувати мобільні дані для резервного копіювання фото", + "network_requirement_videos_upload": "Використовувати мобільні дані для резервного копіювання відео", "network_requirements": "Вимоги до мережі", - "network_requirements_updated": "Вимоги до мережі змінилися, черга резервного копіювання очищена", - "networking_settings": "Мережеві налаштування", - "networking_subtitle": "Керування налаштуванням адреси серверу", - "never": "ніколи", + "network_requirements_updated": "Вимоги до мережі змінено, чергу резервного копіювання скинуто", + "networking_settings": "Мережа", + "networking_subtitle": "Керування налаштуваннями адреси сервера", + "never": "Ніколи", "new_album": "Новий альбом", "new_api_key": "Новий ключ API", "new_date_range": "Новий діапазон дат", @@ -1585,36 +1586,36 @@ "next": "Далі", "next_memory": "Наступний спогад", "no": "Ні", - "no_actions_added": "Поки що жодних дій не додано", + "no_actions_added": "Дій ще не додано", "no_albums_found": "Альбоми не знайдено", - "no_albums_message": "Створіть альбом, щоб упорядкувати свої фотографії та відео", - "no_albums_with_name_yet": "Схоже, у вас ще немає альбомів з такою назвою.", + "no_albums_message": "Створіть альбом, щоб упорядкувати свої фото та відео", + "no_albums_with_name_yet": "Схоже, у вас ще немає альбомів із такою назвою.", "no_albums_yet": "Схоже, у вас ще немає жодного альбому.", - "no_archived_assets_message": "Заархівувати фотографії та відео, щоб приховати їх у вашому перегляді фото", - "no_assets_message": "Натисніть, щоб завантажити своє перше фото", - "no_assets_to_show": "Фото та відео відсутні", + "no_archived_assets_message": "Архівуйте фото та відео, щоб приховати їх з основної стрічки", + "no_assets_message": "Натисніть, щоб вивантажити своє перше фото", + "no_assets_to_show": "Немає елементів для показу", "no_cast_devices_found": "Пристрої для трансляції не знайдено", - "no_checksum_local": "Контрольна сума недоступна – неможливо отримати локальні файли", - "no_checksum_remote": "Контрольна сума недоступна – неможливо отримати віддалений файл", - "no_configuration_needed": "Не потрібна конфігурація", + "no_checksum_local": "Контрольна сума недоступна — не вдається отримати локальні елементи", + "no_checksum_remote": "Контрольна сума недоступна — не вдається отримати віддалений елемент", + "no_configuration_needed": "Налаштування не потрібне", "no_devices": "Немає авторизованих пристроїв", "no_duplicates_found": "Дублікатів не виявлено.", - "no_exif_info_available": "Відсутня інформація про exif", - "no_explore_results_message": "Завантажуйте більше фотографій, щоб насолоджуватися вашою колекцією.", - "no_favorites_message": "Додавайте фото та відео в Обране, щоб швидко знаходити найкращі", + "no_exif_info_available": "Відсутня інформація про Exif", + "no_explore_results_message": "Вивантажуйте більше фото, щоб дослідити свою колекцію.", + "no_favorites_message": "Додавайте фото та відео у вибране, щоб швидко знаходити найкращі", "no_filters_added": "Фільтри ще не додано", - "no_libraries_message": "Створіть зовнішню бібліотеку для перегляду фотографій і відео", - "no_local_assets_found": "З цією контрольною сумою не знайдено локальних файлів", - "no_location_set": "Місцезнаходження не встановлено", - "no_locked_photos_message": "Фото та відео в особистій папці приховані і не відображаються під час перегляду чи пошуку у вашій бібліотеці.", + "no_libraries_message": "Створіть зовнішню бібліотеку для перегляду фото і відео", + "no_local_assets_found": "З цією контрольною сумою не знайдено локальних елементів", + "no_location_set": "Місце не установлено", + "no_locked_photos_message": "Фото та відео в особистій папці приховані й не відображаються під час перегляду чи пошуку у вашій бібліотеці.", "no_name": "Без імені", "no_notifications": "Немає сповіщень", "no_people_found": "Людей, що відповідають запиту, не знайдено", "no_places": "Місць немає", - "no_remote_assets_found": "З цією контрольною сумою не знайдено віддалених файлів", + "no_remote_assets_found": "З цією контрольною сумою не знайдено віддалених елементів", "no_results": "Немає результатів", "no_results_description": "Спробуйте використовувати синонім або більш загальне ключове слово", - "no_shared_albums_message": "Створіть альбом, щоб ділитися фотографіями та відео з людьми у вашій мережі", + "no_shared_albums_message": "Створіть альбом, щоб ділитися фото та відео з людьми у вашій мережі", "no_uploads_in_progress": "Немає активних вивантажень", "none": "Жоден", "not_allowed": "Не дозволено", @@ -1623,141 +1624,141 @@ "not_selected": "Не вибрано", "notes": "Нотатки", "nothing_here_yet": "Тут ще нічого немає", - "notification_permission_dialog_content": "Щоб увімкнути сповіщення, перейдіть до Налаштувань і надайте дозвіл.", - "notification_permission_list_tile_content": "Надати дозвіл для сповіщень.", - "notification_permission_list_tile_enable_button": "Увімкнути Сповіщення", - "notification_permission_list_tile_title": "Дозвіл на Сповіщення", - "notification_toggle_setting_description": "Увімкнути сповіщення електронною поштою", + "notification_permission_dialog_content": "Щоб увімкнути сповіщення, перейдіть до налаштувань і надайте дозвіл.", + "notification_permission_list_tile_content": "Надайте дозвіл для сповіщень.", + "notification_permission_list_tile_enable_button": "Увімкнути сповіщення", + "notification_permission_list_tile_title": "Дозвіл на сповіщення", + "notification_toggle_setting_description": "Отримувати сповіщення електронною поштою", "notifications": "Сповіщення", "notifications_setting_description": "Керування сповіщеннями", "oauth": "OAuth", "obtainium_configurator": "Конфігуратор Obtainium", - "obtainium_configurator_instructions": "Використовуйте Obtainium для встановлення та оновлення застосунку Android безпосередньо з релізу Immich на GitHub. Створіть ключ API та виберіть варіант, щоб створити посилання на конфігурацію Obtainium", + "obtainium_configurator_instructions": "Використовуйте Obtainium для установлення та оновлення застосунку Android безпосередньо з релізу Immich на GitHub. Створіть ключ API та виберіть варіант, щоб створити посилання на конфігурацію Obtainium", "ocr": "OCR", "official_immich_resources": "Офіційні ресурси Immich", "offline": "Недоступний", "offset": "Зсув", "ok": "Ок", - "oldest_first": "Спочатку найстарші", + "oldest_first": "Спочатку найдавніші", "on_this_device": "На цьому пристрої", - "onboarding": "Введення", + "onboarding": "Початкове налаштування", "onboarding_locale_description": "Виберіть бажану мову. Ви зможете змінити це пізніше в налаштуваннях.", - "onboarding_privacy_description": "Наступні (необов’язкові) функції залежать від зовнішніх сервісів і можуть бути вимкнені будь-коли в налаштуваннях.", + "onboarding_privacy_description": "Наступні (необов'язкові) функції залежать від зовнішніх служб, і їх можна вимкнути будь-коли в налаштуваннях.", "onboarding_server_welcome_description": "Налаштуймо ваш сервер з базовими параметрами.", - "onboarding_theme_description": "Оберіть тему. Ви можете змінити її пізніше в налаштуваннях.", + "onboarding_theme_description": "Оберіть тему оформлення для вашого сервера. Ви зможете змінити її пізніше в налаштуваннях.", "onboarding_user_welcome_description": "Почнемо!", "onboarding_welcome_user": "Ласкаво просимо, {user}", "online": "Доступний", - "only_favorites": "Лише обрані", + "only_favorites": "Лише вибране", "open": "Відкрити", "open_calendar": "Відкрити календар", "open_in_browser": "Відкрити в браузері", "open_in_map_view": "Відкрити на мапі", "open_in_openstreetmap": "Відкрити в OpenStreetMap", - "open_the_search_filters": "Відкрийте фільтри пошуку", - "options": "Налаштування", + "open_the_search_filters": "Відкрити фільтри пошуку", + "options": "Варіанти", "or": "або", "organize_into_albums": "Упорядкувати в альбоми", - "organize_into_albums_description": "Помістити наявні фотографії в альбоми, використовуючи поточні налаштування синхронізації", - "organize_your_library": "Організуйте свою бібліотеку", + "organize_into_albums_description": "Помістити наявні фото в альбоми відповідно до поточних налаштувань синхронізації", + "organize_your_library": "Упорядкуйте свою бібліотеку", "original": "оригінал", "other": "Інше", "other_devices": "Інші пристрої", - "other_entities": "Інші файли", + "other_entities": "Інші об'єкти", "other_variables": "Інші змінні", "owned": "Власні", "owner": "Власник", "page": "Сторінка", "partner": "Партнер", "partner_can_access": "{partner} має доступ", - "partner_can_access_assets": "Всі ваші фотографії та відео, окрім тих, що знаходяться в Архіві та Видалені", - "partner_can_access_location": "Місце, де були зроблені ваші фотографії", - "partner_list_user_photos": "Фотографії {user}", - "partner_list_view_all": "Переглянути усі", - "partner_page_empty_message": "Ви ще не поділилися фото з партнером.", + "partner_can_access_assets": "Усі ваші фото та відео, окрім тих, що в архіві та кошику", + "partner_can_access_location": "Місце, де зроблено ваші фото", + "partner_list_user_photos": "Фото {user}", + "partner_list_view_all": "Переглянути все", + "partner_page_empty_message": "Ви ще не поділилися фото з жодним партнером.", "partner_page_no_more_users": "Більше немає кого додати", "partner_page_partner_add_failed": "Не вдалося додати партнера", - "partner_page_select_partner": "Обрати партнера", - "partner_page_shared_to_title": "Спільне із", + "partner_page_select_partner": "Вибрати партнера", + "partner_page_shared_to_title": "Доступ надано", "partner_page_stop_sharing_content": "{partner} більше не матиме доступу до ваших фото.", - "partner_sharing": "Спільне використання", + "partner_sharing": "Спільний доступ із партнерами", "partners": "Партнери", "password": "Пароль", "password_does_not_match": "Паролі не збігаються", "password_required": "Потрібен пароль", - "password_reset_success": "Пароль було успішно скинуто", + "password_reset_success": "Пароль скинуто", "past_durations": { - "days": "Пройшло {days, plural, one {день} few {# дні} many {# днів} other {# днів}}", - "hours": "За останні {hours, plural, one {годину} few {# години} many {# годин} other {# години}}", - "years": "Пройшло {years, plural, one {рік} few {# роки} many {# років} other {# року}}" + "days": "За {days, plural, one {останній # день} few {останні # дні} many {останніх # днів} other {останніх # днів}}", + "hours": "За {hours, plural, one {останню # годину} few {останні # години} many {останніх # годин} other {останніх # годин}}", + "years": "За {years, plural, one {останній # рік} few {останні # роки} many {останніх # років} other {останніх # років}}" }, "path": "Шлях", "pattern": "Шаблон", - "pause": "Пауза", + "pause": "Призупинити", "pause_memories": "Призупинити спогади", "paused": "Призупинено", - "pending": "На розгляді", + "pending": "В очікуванні", "people": "Люди", - "people_edits_count": "Відредаговано {count, plural, one {# особу} few {# особи} many {# осіб} other {# людей}}", - "people_feature_description": "Перегляд фотографій і відео, згрупованих за людьми", - "people_selected": "{count, plural, one {# обрана особа} few {# вибрані особи} many {# вибраних осіб} other {# вибраних осіб}}", + "people_edits_count": "Відредаговано {count, plural, one {# людину} few {# людини} many {# людей} other {# людей}}", + "people_feature_description": "Перегляд фото і відео, згрупованих за людьми", + "people_selected": "{count, plural, one {Вибрано # людину} few {Вибрано # людини} many {Вибрано # людей} other {Вибрано # людей}}", "people_sidebar_description": "Відображення посилання на людей у бічній панелі", - "permanent_deletion_warning": "Попередження про видалення", - "permanent_deletion_warning_setting_description": "Показувати попередження при остаточному видаленні файлів", + "permanent_deletion_warning": "Попередження про остаточне видалення", + "permanent_deletion_warning_setting_description": "Показувати попередження під час остаточного видалення елементів", "permanently_delete": "Видалити назавжди", - "permanently_delete_assets_count": "Остаточно видалити {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}}", - "permanently_delete_assets_prompt": "Ви впевнені, що хочете назавжди видалити {count, plural, one {цей файл?} few {ці # файли?} many {ці # файлів?} other {ці # файлів?}} Це також видалить {count, plural, one {його з} few {їх з} many {їх з} other {їх з}} альбому(ів).", - "permanently_deleted_asset": "Файл видалено назавжди", - "permanently_deleted_assets_count": "Видалено остаточно {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}}", - "permission": "Дозволи", - "permission_empty": "Дозволи не повинні бути порожніми", + "permanently_delete_assets_count": "Остаточно видалити {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "permanently_delete_assets_prompt": "Ви впевнені, що хочете назавжди видалити {count, plural, one {цей елемент? Його} few {ці # елементи? Їх} many {# елементів? Їх} other {# елементів? Їх}} також буде видалено з {count, plural, one {його} few {їхніх} many {їхніх} other {їхніх}} альбомів.", + "permanently_deleted_asset": "Елемент видалено назавжди", + "permanently_deleted_assets_count": "Остаточно видалено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "permission": "Дозвіл", + "permission_empty": "Дозволи не мають бути порожніми", "permission_onboarding_back": "Назад", "permission_onboarding_continue_anyway": "Все одно продовжити", "permission_onboarding_get_started": "Розпочати", "permission_onboarding_go_to_settings": "Перейти до налаштувань", - "permission_onboarding_permission_denied": "Доступ заборонено. Для використання Immich надайте дозволи до \"Фото та відео\" в налаштуваннях.", + "permission_onboarding_permission_denied": "Доступ заборонено. Щоб використовувати Immich, надайте дозволи до «Фото та відео» в налаштуваннях.", "permission_onboarding_permission_granted": "Доступ надано! Все готово.", - "permission_onboarding_permission_limited": "Доступ обмежено. Щоби дозволити Immich створювати резервні копії та керувати всією галереєю, надайте дозволи на фото й відео в налаштуваннях.", + "permission_onboarding_permission_limited": "Доступ обмежено. Щоб дати змогу Immich створювати резервні копії та керувати всією галереєю, надайте дозволи на фото й відео в налаштуваннях.", "permission_onboarding_request": "Застосунку Immich потрібен дозвіл для перегляду ваших фото та відео.", "person": "Людина", - "person_age_months": "{months, plural, one {# місяць} few {# місяці} many {# місяців} other {# місяців}}", - "person_age_year_months": "1 рік, {months, plural, one {# місяць} few {# місяці} many {# місяців} other {# місяців}}", - "person_age_years": "{years, plural, one {# рік} few {# роки} many {# років} other {# років}}", + "person_age_months": "Вік: {months, plural, one {# місяць} few {# місяці} many {# місяців} other {# місяців}}", + "person_age_year_months": "Вік: 1 рік, {months, plural, one {# місяць} few {# місяці} many {# місяців} other {# місяців}}", + "person_age_years": "Вік: {years, plural, one {# рік} few {# роки} many {# років} other {# років}}", "person_birthdate": "Дата народження: {date}", "person_hidden": "{name}{hidden, select, true { (приховано)} other {}}", - "person_recognized": "Особу розпізнали", - "person_selected": "Обрана особа", - "photo_shared_all_users": "Виглядає так, що ви поділилися своїми фотографіями з усіма користувачами або у вас немає жодного користувача, з яким можна поділитися.", + "person_recognized": "Людину розпізнано", + "person_selected": "Людину вибрано", + "photo_shared_all_users": "Схоже, ви вже поділилися фото з усіма користувачами, або немає з ким ділитися.", "photos": "Фото", "photos_and_videos": "Фото та відео", - "photos_count": "{count, plural, one {{count, number} Фотографія} few {{count, number} Фотографії} many {{count, number} Фотографій} other {{count, number} Фотографій}}", - "photos_from_previous_years": "Фотографії минулих років у цей день", - "photos_only": "Тільки фотографії", - "pick_a_location": "Виберіть місце розташування", - "pick_custom_range": "Користувацький діапазон", - "pick_date_range": "Виберіть діапазон дат", - "pin_code_changed_successfully": "PIN-код успішно змінено", - "pin_code_reset_successfully": "PIN-код успішно скинуто", - "pin_code_setup_successfully": "PIN-код успішно налаштовано", + "photos_count": "{count, plural, one {{count, number} фото} few {{count, number} фото} many {{count, number} фото} other {{count, number} фото}}", + "photos_from_previous_years": "Фото минулих років", + "photos_only": "Лише фото", + "pick_a_location": "Вибрати місце", + "pick_custom_range": "Довільний діапазон", + "pick_date_range": "Вибрати діапазон дат", + "pin_code_changed_successfully": "PIN-код змінено", + "pin_code_reset_successfully": "PIN-код скинуто", + "pin_code_setup_successfully": "PIN-код налаштовано", "pin_verification": "Перевірка PIN-коду", "place": "Місце", "places": "Місця", - "places_count": "{count, plural, one {{count, number} Місце} few {{count, number} Місця} many {{count, number} Місць} other {{count, number} Місць}}", + "places_count": "{count, plural, one {{count, number} місце} few {{count, number} місця} many {{count, number} місць} other {{count, number} місць}}", "play": "Відтворити", "play_memories": "Відтворити спогади", - "play_motion_photo": "Відтворювати рухомі фото", - "play_or_pause_video": "Відтворення або призупинення відео", - "play_original_video": "Відтворювати оригінальне відео", - "play_original_video_setting_description": "Надавати перевагу відтворенню оригінальних відео, а не перекодованих. Якщо оригінальний файл несумісний, відтворення може бути некоректним.", - "play_transcoded_video": "Відтворювати перекодоване відео", - "please_auth_to_access": "Будь ласка, пройдіть автентифікацію", + "play_motion_photo": "Відтворити рухоме фото", + "play_or_pause_video": "Відтворити або призупинити відео", + "play_original_video": "Відтворити оригінальне відео", + "play_original_video_setting_description": "Надавати перевагу відтворенню оригінальних відео, а не перекодованих. Якщо оригінальний елемент несумісний, відтворення може бути некоректним.", + "play_transcoded_video": "Відтворити перекодоване відео", + "please_auth_to_access": "Автентифікуйтеся для доступу", "port": "Порт", - "preferences_settings_subtitle": "Керування налаштуваннями застосунку", - "preferences_settings_title": "Параметри", + "preferences_settings_subtitle": "Керування уподобаннями застосунку", + "preferences_settings_title": "Уподобання", "preparing": "Підготовка", - "preset": "Передвстановлення", + "preset": "Пресет", "preview": "Попередній перегляд", - "previous": "Попереднє", + "previous": "Попередній", "previous_memory": "Попередній спогад", "previous_or_next_day": "День вперед/назад", "previous_or_next_month": "Місяць вперед/назад", @@ -1769,526 +1770,529 @@ "profile_drawer_app_logs": "Журнал", "profile_drawer_client_server_up_to_date": "Клієнт та сервер — актуальні", "profile_drawer_github": "GitHub", - "profile_drawer_readonly_mode": "Режим лише для читання ввімкнено. Щоб вийти, довго натисніть значок аватара користувача.", + "profile_drawer_readonly_mode": "Режим лише для читання увімкнено. Щоб вийти, утримуйте значок аватара.", "profile_image_of_user": "Зображення профілю {user}", - "profile_picture_set": "Зображення профілю встановлено.", + "profile_picture_set": "Зображення профілю установлено.", "public_album": "Публічний альбом", - "public_share": "Публічний доступ", - "purchase_account_info": "Підтримка", + "public_share": "Публічний спільний доступ", + "purchase_account_info": "Прихильник", "purchase_activated_subtitle": "Дякуємо за підтримку Immich та програмного забезпечення з відкритим кодом", "purchase_activated_time": "Активовано {date}", - "purchase_activated_title": "Ваш ключ було успішно активовано", + "purchase_activated_title": "Ваш ключ активовано", "purchase_button_activate": "Активувати", "purchase_button_buy": "Купити", "purchase_button_buy_immich": "Купити Immich", - "purchase_button_never_show_again": "Ніколи більше не показувати", + "purchase_button_never_show_again": "Більше не показувати", "purchase_button_reminder": "Нагадати через 30 днів", - "purchase_button_remove_key": "Видалити ключ", - "purchase_button_select": "Обрати", - "purchase_failed_activation": "Не вдалося активувати! Будь ласка, перевірте свою електронну пошту для отримання правильного ключа продукту!", - "purchase_individual_description_1": "Для індивідуального використання", - "purchase_individual_description_2": "Статус підтримки", + "purchase_button_remove_key": "Вилучити ключ", + "purchase_button_select": "Вибрати", + "purchase_failed_activation": "Не вдалося активувати! Перевірте електронну пошту — там має бути правильний ключ продукту!", + "purchase_individual_description_1": "Для одного користувача", + "purchase_individual_description_2": "Статус прихильника", "purchase_individual_title": "Індивідуальний", "purchase_input_suggestion": "Маєте ключ продукту? Введіть ключ нижче", - "purchase_license_subtitle": "Купіть Immich, щоб підтримати подальший розвиток сервісу", - "purchase_lifetime_description": "Назавжди", + "purchase_license_subtitle": "Купіть Immich, щоб підтримати подальший розвиток проєкту", + "purchase_lifetime_description": "Безстрокова купівля", "purchase_option_title": "ВАРІАНТИ КУПІВЛІ", - "purchase_panel_info_1": "Розробка Immich вимагає багато часу та зусиль. Ми маємо штатних інженерів, які працюють над тим, щоб зробити його якомога кращим. Наша місія — зробити програмне забезпечення з відкритим кодом та етичні бізнес-практики стійким джерелом доходу для розробників і створити екосистему, що поважає конфіденційність, з реальними альтернативами експлуататорським хмарним сервісам.", - "purchase_panel_info_2": "Оскільки ми зобов’язуємося не додавати платні обмеження, ця покупка не надасть вам додаткових функцій в Immich. Ми покладаємося на таких користувачів, як ви, щоб підтримувати подальший розвиток Immich.", + "purchase_panel_info_1": "Розробка Immich потребує багато часу та зусиль. Ми маємо штатних інженерів, які працюють над тим, щоб зробити його якомога кращим. Наша місія — зробити програмне забезпечення з відкритим кодом та етичні бізнес-практики стійким джерелом доходу для розробників і створити екосистему, що поважає конфіденційність, з реальними альтернативами експлуататорським хмарним службам.", + "purchase_panel_info_2": "Оскільки ми взяли на себе зобов'язання не додавати платні обмеження, ця купівля не надасть вам додаткових функцій в Immich. Подальший розвиток Immich залежить від підтримки таких користувачів, як ви.", "purchase_panel_title": "Підтримати проєкт", "purchase_per_server": "На сервер", "purchase_per_user": "На користувача", - "purchase_remove_product_key": "Видалити ключ продукту", - "purchase_remove_product_key_prompt": "Ви впевнені, що хочете видалити ключ продукту?", - "purchase_remove_server_product_key": "Видалити ключ продукту для сервера", - "purchase_remove_server_product_key_prompt": "Ви впевнені, що хочете видалити ключ продукту для сервера?", + "purchase_remove_product_key": "Вилучити ключ продукту", + "purchase_remove_product_key_prompt": "Ви впевнені, що хочете вилучити ключ продукту?", + "purchase_remove_server_product_key": "Вилучити ключ продукту для сервера", + "purchase_remove_server_product_key_prompt": "Ви впевнені, що хочете вилучити ключ продукту для сервера?", "purchase_server_description_1": "Для всього сервера", - "purchase_server_description_2": "Статус підтримки", + "purchase_server_description_2": "Статус прихильника", "purchase_server_title": "Сервер", "purchase_settings_server_activated": "Ключ продукту сервера керується адміністратором", - "query_asset_id": "Ідентифікатор файлу запиту", + "query_asset_id": "Запит за ID елемента", "queue_status": "У черзі {count} з {total}", - "rate_asset": "Оцінити файл", - "rating": "Зоряний рейтинг", - "rating_clear": "Очистити рейтинг", - "rating_count": "{count, plural, one {# зірка} few {# зірки} many {# зірок} other {# зірок}}", - "rating_description": "Показувати рейтинг EXIF на інформаційній панелі", - "reaction_options": "Параметри реакції", - "read_changelog": "Прочитати зміни в оновленні", + "rate_asset": "Оцінити елемент", + "rating": "Зірковий рейтинг", + "rating_clear": "Скинути рейтинг", + "rating_count": "{count, plural, =0 {Без рейтингу} one {# зірка} few {# зірки} many {# зірок} other {# зірок}}", + "rating_description": "Показувати рейтинг Exif на інформаційній панелі", + "reaction_options": "Варіанти реакції", + "read_changelog": "Переглянути журнал змін", "readonly_mode_disabled": "Режим лише для читання вимкнено", - "readonly_mode_enabled": "Режим лише для читання ввімкнено", + "readonly_mode_enabled": "Режим лише для читання увімкнено", "ready_for_upload": "Готово до вивантаження", "reassign": "Перепризначити", - "reassigned_assets_to_existing_person": "Перепризначено {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}} {name, select, null {існуючій особі} other {{name}}}", - "reassigned_assets_to_new_person": "Перепризначено {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}} новій особі", - "reassing_hint": "Призначити обрані файли існуючій особі", + "reassigned_assets_to_existing_person": "Перепризначено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} {name, select, null {наявній людині} other {{name}}}", + "reassigned_assets_to_new_person": "Перепризначено {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} новій людині", + "reassing_hint": "Призначити вибрані елементи наявній людині", "recent": "Нещодавно", "recent_albums": "Останні альбоми", "recent_searches": "Нещодавні пошукові запити", "recently_added": "Нещодавно додані", - "recently_added_page_title": "Нещодавні", - "recently_taken": "Недавно зроблено", - "recently_taken_page_title": "Недавно зроблені", + "recently_added_page_title": "Нещодавно додані", + "recently_taken": "Нещодавно зняті", + "recently_taken_page_title": "Нещодавно зняті", "refresh": "Оновити", "refresh_encoded_videos": "Оновити закодовані відео", "refresh_faces": "Оновити обличчя", "refresh_metadata": "Оновити метадані", "refresh_thumbnails": "Оновити мініатюри", - "refreshed": "Оновлений", - "refreshes_every_file": "Повторно читає всі існуючі та нові файли", + "refreshed": "Оновлено", + "refreshes_every_file": "Повторно зчитує всі наявні та нові файли", "refreshing_encoded_video": "Оновлення закодованого відео", "refreshing_faces": "Оновлення облич", "refreshing_metadata": "Оновлення метаданих", "regenerating_thumbnails": "Повторне створення мініатюр", - "remote": "На сервері", - "remote_assets": "Віддалені фото та відео", - "remote_media_summary": "Зведення віддалених медіафайлів", + "remote": "Віддалений", + "remote_assets": "Віддалені елементи", + "remote_media_summary": "Зведення віддалених медіа", "remove": "Вилучити", - "remove_assets_album_confirmation": "Ви впевнені, що хочете видалити {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}} з альбому?", - "remove_assets_shared_link_confirmation": "Ви впевнені, що хочете видалити {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}} з цього спільного посилання?", - "remove_assets_title": "Видалити файли?", - "remove_custom_date_range": "Видалити користувацький діапазон дат", - "remove_deleted_assets": "Видалення автономних файлів", - "remove_from_album": "Видалити з альбому", - "remove_from_album_action_prompt": "{count} видалено з альбому", - "remove_from_favorites": "Видалити з обраного", + "remove_assets_album_confirmation": "Ви впевнені, що хочете вилучити {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з альбому?", + "remove_assets_shared_link_confirmation": "Ви впевнені, що хочете вилучити {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з цього спільного посилання?", + "remove_assets_title": "Вилучити елементи?", + "remove_custom_date_range": "Вилучити довільний діапазон дат", + "remove_deleted_assets": "Вилучити видалені елементи", + "remove_from_album": "Вилучити з альбому", + "remove_from_album_action_prompt": "{count} вилучено з альбому", + "remove_from_favorites": "Вилучити з вибраного", "remove_from_lock_folder_action_prompt": "{count} вилучено з особистої папки", - "remove_from_locked_folder": "Видалити з особистої папки", - "remove_from_locked_folder_confirmation": "Ви впевнені, що хочете перемістити ці фото та відео з особистої папки? Вони будуть видимі у вашій бібліотеці.", - "remove_from_shared_link": "Видалити зі спільного посилання", - "remove_memory": "Видалити спогад", - "remove_photo_from_memory": "Видалити фото з цього спогаду", - "remove_tag": "Видалити тег", - "remove_url": "Видалити URL", - "remove_user": "Видалити користувача", - "removed_api_key": "Видалено ключ API: {name}", - "removed_from_archive": "Видалено з архіву", - "removed_from_favorites": "Видалено з обраного", - "removed_from_favorites_count": "{count, plural, other {Видалено #}} з обраних", - "removed_memory": "Видалений спогад", - "removed_photo_from_memory": "Фото видалене зі спогаду", - "removed_tagged_assets": "Видалено тег із {count, plural, one {# файлу} few {# файлів} many {# файлів} other {# файлів}}", + "remove_from_locked_folder": "Вилучити з особистої папки", + "remove_from_locked_folder_confirmation": "Ви впевнені, що хочете перемістити ці фото та відео з особистої папки? Їх буде видно у вашій бібліотеці.", + "remove_from_shared_link": "Вилучити зі спільного посилання", + "remove_memory": "Вилучити спогад", + "remove_photo_from_memory": "Вилучити фото з цього спогаду", + "remove_tag": "Вилучити тег", + "remove_url": "Вилучити URL", + "remove_user": "Вилучити користувача", + "removed_api_key": "Вилучено ключ API: {name}", + "removed_from_archive": "Вилучено з архіву", + "removed_from_favorites": "Вилучено з вибраного", + "removed_from_favorites_count": "{count, plural, one {Вилучено # з вибраного} few {Вилучено # з вибраного} many {Вилучено # з вибраного} other {Вилучено # з вибраного}}", + "removed_memory": "Вилучено спогад", + "removed_photo_from_memory": "Вилучено фото зі спогаду", + "removed_tagged_assets": "Вилучено тег із {count, plural, one {# елемента} few {# елементів} many {# елементів} other {# елементів}}", "rename": "Перейменувати", - "repair": "Відновлення", - "repair_no_results_message": "Невідстежувані та відсутні файли будуть відображені тут", - "replace_with_upload": "Замінити на вивантажене", + "repair": "Виправити", + "repair_no_results_message": "Невідстежувані та відсутні файли з'являться тут", + "replace_with_upload": "Замінити вивантаженим", "repository": "Репозиторій", - "require_password": "Вимагати пароль", - "require_user_to_change_password_on_first_login": "Вимагати від користувача змінювати пароль при першому вході", - "rescan": "Пересканування", + "require_password": "Запитувати пароль", + "require_user_to_change_password_on_first_login": "Зобов'язувати користувача змінити пароль під час першого входу", + "rescan": "Пересканувати", "reset": "Скинути", "reset_password": "Скинути пароль", "reset_people_visibility": "Відновити видимість людей", "reset_pin_code": "Скинути PIN-код", "reset_pin_code_description": "Якщо ви забули свій PIN-код, ви можете звернутися до адміністратора сервера, щоб скинути його", - "reset_pin_code_success": "PIN-код успішно скинуто", + "reset_pin_code_success": "PIN-код скинуто", "reset_pin_code_with_password": "Ви завжди можете скинути свій PIN-код за допомогою пароля", - "reset_sqlite": "Очистити базу даних SQLite", + "reset_sqlite": "Скинути базу даних SQLite", "reset_sqlite_clear_app_data": "Очистити дані", - "reset_sqlite_confirmation": "Ви впевнені, що хочете видалити всі дані? Це видалить всі налаштування і вийде з вийде з вашого облікового записую", - "reset_sqlite_confirmation_note": "Увага: Вам потрібно буде перезапустити програму після очистки.", - "reset_sqlite_done": "Дані було очищено. Будь ласка, перезавантажте програму і знову увійдіть у свій обліковий запис.", - "reset_sqlite_success": "Базу даних SQLite успішно очищено", - "reset_to_default": "Скинути до налаштування за замовчуванням", - "resolution": "Роздільна Здатність", + "reset_sqlite_confirmation": "Ви впевнені, що хочете очистити дані застосунку? Усі налаштування буде видалено, а сеанс — завершено.", + "reset_sqlite_confirmation_note": "Увага: Вам потрібно буде перезапустити застосунок після очищення.", + "reset_sqlite_done": "Дані було очищено. Будь ласка, перезапустіть застосунок і знову увійдіть у свій обліковий запис.", + "reset_sqlite_success": "Базу даних SQLite скинуто", + "reset_to_default": "Скинути до типових", + "resolution": "Роздільна здатність", "resolve_duplicates": "Усунути дублікати", "resolved_all_duplicates": "Усі дублікати усунуто", "restore": "Відновити", "restore_all": "Відновити все", "restore_trash_action_prompt": "{count} відновлено з кошика", "restore_user": "Відновити користувача", - "restored_asset": "Відновлений файл", + "restored_asset": "Відновлено елемент", "resume": "Продовжити", "resume_paused_jobs": "Відновити {count, plural, one {# призупинене завдання} few {# призупинені завдання} many {# призупинених завдань} other {# призупинених завдань}}", "retry_upload": "Повторити вивантаження", "review_duplicates": "Переглянути дублікати", - "review_large_files": "Перегляд великих файлів", + "review_large_files": "Переглянути великі файли", "role": "Роль", "role_editor": "Редактор", - "role_viewer": "Глядач", - "running": "Активний", + "role_viewer": "Переглядач", + "running": "Виконується", "save": "Зберегти", "save_to_gallery": "Зберегти в галерею", "saved": "Збережено", - "saved_api_key": "Збережені ключі API", + "saved_api_key": "Ключ API збережено", "saved_profile": "Профіль збережено", "saved_settings": "Налаштування збережено", - "say_something": "Скажіть що-небудь", + "say_something": "Напишіть щось", "scaffold_body_error_occurred": "Виникла помилка", - "scan": "Сканування", + "scaffold_body_error_unrecoverable": "Виникла критична помилка. Надішліть опис помилки та стек викликів на Discord або GitHub, щоб ми могли допомогти. Якщо вам порадили, ви можете очистити дані застосунку нижче.", + "scan": "Сканувати", "scan_all_libraries": "Сканувати всі бібліотеки", "scan_library": "Сканувати", "scan_settings": "Налаштування сканування", "scanning": "Сканування", - "scanning_for_album": "Сканування альбому...", + "scanning_for_album": "Пошук альбому…", "search": "Пошук", - "search_albums": "Шукати альбоми", + "search_albums": "Пошук альбомів", "search_by_context": "Пошук за контекстом", "search_by_description": "Пошук за описом", - "search_by_description_example": "Похідний день у Сапі", - "search_by_filename": "Пошук за назвою або розширенням файлу", + "search_by_description_example": "Похід у Сапі", + "search_by_filename": "Пошук за назвою файлу або розширенням", "search_by_filename_example": "Наприклад, IMG_1234.JPG або PNG", "search_by_ocr": "Пошук за OCR", "search_by_ocr_example": "Латте", "search_camera_lens_model": "Пошук моделі об’єктива…", - "search_camera_make": "Пошук виробника камери...", - "search_camera_model": "Пошук моделі камери...", - "search_city": "Пошук міста...", - "search_country": "Пошук країни...", + "search_camera_make": "Пошук виробника камери…", + "search_camera_model": "Пошук моделі камери…", + "search_city": "Пошук міста…", + "search_country": "Пошук країни…", "search_filter_apply": "Застосувати фільтр", "search_filter_camera_title": "Виберіть тип камери", "search_filter_date": "Дата", - "search_filter_date_interval": "{start} до {end}", + "search_filter_date_interval": "{start} — {end}", "search_filter_date_title": "Виберіть діапазон дат", "search_filter_display_option_not_in_album": "Не в альбомі", - "search_filter_display_options": "Параметри відображення", + "search_filter_display_options": "Варіанти відображення", "search_filter_filename": "Пошук за назвою файлу", - "search_filter_location": "Місцезнаходження", - "search_filter_location_title": "Виберіть місцезнаходження", + "search_filter_location": "Місце", + "search_filter_location_title": "Виберіть місце", "search_filter_media_type": "Тип медіа", "search_filter_media_type_title": "Виберіть тип медіа", "search_filter_ocr": "Пошук за OCR", "search_filter_people_title": "Виберіть людей", - "search_filter_star_rating": "Зоряний рейтинг", - "search_filter_tags_title": "Вибрати теги", - "search_for": "Шукати для", - "search_for_existing_person": "Пошук існуючої особи", + "search_filter_star_rating": "Рейтинг зірками", + "search_filter_tags_title": "Виберіть теги", + "search_for": "Шукати", + "search_for_existing_person": "Пошук наявної людини", "search_no_more_result": "Більше результатів немає", "search_no_people": "Немає людей", - "search_no_people_named": "Немає осіб з іменем \"{name}\"", + "search_no_people_named": "Немає людей з іменем «{name}»", "search_no_result": "Результатів не знайдено, спробуйте інший запит або комбінацію", - "search_options": "Параметри пошуку", + "search_options": "Варіанти пошуку", "search_page_categories": "Категорії", - "search_page_motion_photos": "Живі фото", - "search_page_no_objects": "Немає інформації про файли", - "search_page_no_places": "Інформація про місця недоступна", + "search_page_motion_photos": "Рухомі фото", + "search_page_no_objects": "Інформація про об'єкти відсутня", + "search_page_no_places": "Інформація про місця відсутня", "search_page_screenshots": "Знімки екрану", "search_page_search_photos_videos": "Шукайте ваші фото та відео", "search_page_selfies": "Селфі", "search_page_things": "Речі", - "search_page_view_all_button": "Переглянути усі", + "search_page_view_all_button": "Переглянути все", "search_page_your_activity": "Ваші дії", "search_page_your_map": "Ваша мапа", - "search_people": "Шукати людей", + "search_people": "Пошук людей", "search_places": "Пошук місць", - "search_rating": "Пошук за рейтингом...", + "search_rating": "Пошук за рейтингом…", "search_result_page_new_search_hint": "Новий пошук", - "search_settings": "Пошук налаштування", - "search_state": "Пошук регіону...", - "search_suggestion_list_smart_search_hint_1": "Розумний пошук увімкнено за замовчуванням, для пошуку за метаданими використовуйте синтаксис. ", + "search_settings": "Налаштування пошуку", + "search_state": "Пошук регіону…", + "search_suggestion_list_smart_search_hint_1": "Розумний пошук увімкнено типово, для пошуку за метаданими використовуйте синтаксис ", "search_suggestion_list_smart_search_hint_2": "m:ваш-пошуковий-термін", - "search_tags": "Пошук тегів...", - "search_timezone": "Пошук часового поясу...", + "search_tags": "Пошук тегів…", + "search_timezone": "Пошук часового поясу…", "search_type": "Тип пошуку", "search_your_photos": "Пошук серед ваших фото", - "searching_locales": "Триває пошук перекладів...", + "searching_locales": "Пошук локалей…", "second": "Секунда", "see_all_people": "Переглянути всіх людей", "select": "Вибрати", "select_album": "Вибрати альбом", - "select_album_cover": "Обрати обкладинку альбому", + "select_album_cover": "Вибрати обкладинку альбому", "select_albums": "Вибрати альбоми", "select_all": "Вибрати все", "select_all_duplicates": "Вибрати всі дублікати", "select_all_in": "Вибрати все в {group}", "select_avatar_color": "Вибрати колір аватара", "select_count": "{count, plural, one {Вибрати #} few {Вибрати #} many {Вибрати #} other {Вибрати #}}", - "select_cutoff_date": "Виберіть кінцеву дату", - "select_face": "Виберіть обличчя", - "select_featured_photo": "Обрати обране фото", - "select_from_computer": "Виберіть з комп'ютера", - "select_keep_all": "Залишити все обране", + "select_cutoff_date": "Вибрати кінцеву дату", + "select_face": "Вибрати обличчя", + "select_featured_photo": "Вибрати головне фото", + "select_from_computer": "Вибрати з комп'ютера", + "select_keep_all": "Залишити всі дублікати", "select_library_owner": "Вибрати власника бібліотеки", - "select_new_face": "Обрати нове обличчя", + "select_new_face": "Вибрати нове обличчя", "select_people": "Вибрати людей", - "select_person": "Виберіть особу", - "select_person_to_tag": "Виберіть людину для позначення", + "select_person": "Вибрати людину", + "select_person_to_tag": "Вибрати людину для позначення", "select_photos": "Вибрати фото", - "select_trash_all": "Видалити все вибране", + "select_trash_all": "Перемістити всі до кошика", "select_user_for_sharing_page_err_album": "Не вдалося створити альбом", - "selected": "Обрано", - "selected_count": "{count, plural, one {# обраний} few {# обрані} many {# обраних} other {# обраних}}", - "selected_gps_coordinates": "Вибрані координати", + "selected": "Вибрано", + "selected_count": "{count, plural, one {# вибрано} few {# вибрано} many {# вибрано} other {# вибрано}}", + "selected_gps_coordinates": "Вибрані GPS-координати", "send_message": "Надіслати повідомлення", - "send_welcome_email": "Надішліть вітальний лист", - "server_endpoint": "Адреса серверу", + "send_welcome_email": "Надіслати вітальний лист", + "server_endpoint": "Адреса сервера", "server_info_box_app_version": "Версія застосунку", "server_info_box_server_url": "URL сервера", "server_offline": "Сервер недоступний", "server_online": "Сервер доступний", "server_privacy": "Конфіденційність сервера", - "server_restarting_description": "Ця сторінка оновиться миттєво.", - "server_restarting_title": "Сервер перезавантажується", + "server_restarting_description": "Ця сторінка оновиться за мить.", + "server_restarting_title": "Сервер перезапускається", "server_stats": "Статистика сервера", "server_update_available": "Оновлення сервера доступне", "server_version": "Версія сервера", - "set": "Встановити", - "set_as_album_cover": "Встановити як обкладинку альбому", - "set_as_featured_photo": "Встановити як основне фото", - "set_as_profile_picture": "Встановити як зображення профілю", - "set_date_of_birth": "Встановити дату народження", - "set_profile_picture": "Встановити зображення профілю", - "set_slideshow_to_fullscreen": "Встановити слайд-шоу на весь екран", - "set_stack_primary_asset": "Встановити як основний файл", - "setting_image_navigation_title": "Навігація по зображеннях", - "setting_image_viewer_help": "Повноекранний переглядач спочатку завантажує зображення для попереднього перегляду в низькій роздільній здатності, потім завантажує зображення в зменшеній роздільній здатності відносно оригіналу (якщо включено) і зрештою завантажує оригінал (якщо включено).", - "setting_image_viewer_original_subtitle": "Увімкнути для завантаження оригінального зображення з повною роздільною здатністю (велике!). Вимкнути, щоб зменшити використання даних (як через мережу, так і на кеші пристрою).", + "set": "Установити", + "set_as_album_cover": "Установити як обкладинку альбому", + "set_as_featured_photo": "Установити як головне фото", + "set_as_profile_picture": "Установити як зображення профілю", + "set_date_of_birth": "Установити дату народження", + "set_profile_picture": "Установити зображення профілю", + "set_slideshow_to_fullscreen": "Установити слайд-шоу на весь екран", + "set_stack_primary_asset": "Установити як основний елемент", + "setting_image_navigation_enable_subtitle": "Якщо увімкнено, ви можете переходити до попереднього або наступного зображення, натискаючи на крайню ліву або праву чверть екрана.", + "setting_image_navigation_enable_title": "Торкніться, щоб перейти до зображення", + "setting_image_navigation_title": "Навігація зображеннями", + "setting_image_viewer_help": "Переглядач спочатку завантажує малу мініатюру, потім попередній перегляд середньої роздільної здатності (якщо увімкнено) і зрештою оригінал (якщо увімкнено).", + "setting_image_viewer_original_subtitle": "Увімкніть, щоб завантажити оригінальне зображення з повною роздільною здатністю (велике!). Вимкніть, щоб зменшити використання даних (як через мережу, так і в кеші пристрою).", "setting_image_viewer_original_title": "Завантажувати оригінальне зображення", - "setting_image_viewer_preview_subtitle": "Увімкнути для завантаження зображення середньої роздільної здатності. Вимкнути, щоб завантажувати оригінал або використовувати тільки мініатюру.", + "setting_image_viewer_preview_subtitle": "Увімкніть, щоб завантажити зображення середньої роздільної здатності. Вимкніть, щоб завантажувати оригінал або використовувати лише мініатюру.", "setting_image_viewer_preview_title": "Завантажувати зображення попереднього перегляду", "setting_image_viewer_title": "Зображення", "setting_languages_apply": "Застосувати", "setting_languages_subtitle": "Змінити мову застосунку", - "setting_notifications_notify_failures_grace_period": "Повідомити про помилки фонового резервного копіювання: {duration}", - "setting_notifications_notify_hours": "{count} годин", + "setting_notifications_notify_failures_grace_period": "Сповіщати про помилки фонового резервного копіювання: {duration}", + "setting_notifications_notify_hours": "{count, plural, one {# година} few {# години} many {# годин} other {# годин}}", "setting_notifications_notify_immediately": "негайно", - "setting_notifications_notify_minutes": "{count} хвилин", + "setting_notifications_notify_minutes": "{count, plural, one {# хвилина} few {# хвилини} many {# хвилин} other {# хвилин}}", "setting_notifications_notify_never": "ніколи", - "setting_notifications_notify_seconds": "{count} секунд", - "setting_notifications_single_progress_subtitle": "Детальна інформація про хід завантаження для кожного фото та відео", - "setting_notifications_single_progress_title": "Показати хід фонового резервного копіювання", - "setting_notifications_subtitle": "Налаштування параметрів сповіщень", - "setting_notifications_total_progress_subtitle": "Загальний прогрес (виконано/загалом)", - "setting_notifications_total_progress_title": "Показати загальний хід фонового резервного копіювання", + "setting_notifications_notify_seconds": "{count, plural, one {# секунда} few {# секунди} many {# секунд} other {# секунд}}", + "setting_notifications_single_progress_subtitle": "Детальна інформація про поступ вивантаження для кожного елемента", + "setting_notifications_single_progress_title": "Показувати детальний поступ фонового резервного копіювання", + "setting_notifications_subtitle": "Налаштуйте уподобання сповіщень", + "setting_notifications_total_progress_subtitle": "Загальний поступ вивантаження (виконано/загалом елементів)", + "setting_notifications_total_progress_title": "Показувати загальний поступ фонового резервного копіювання", "setting_video_viewer_auto_play_subtitle": "Автоматично починати відтворення відео під час їх відкриття", "setting_video_viewer_auto_play_title": "Автоматичне відтворення відео", "setting_video_viewer_looping_title": "Циклічне відтворення", - "setting_video_viewer_original_video_subtitle": "При трансляції відео з сервера відтворювати оригінал, навіть якщо доступна транскодування. Може призвести до буферизації. Відео, доступні локально, відтворюються в оригінальній якості, незважаючи на це налаштування.", + "setting_video_viewer_original_video_subtitle": "Під час потокового відтворення відео із сервера відтворювати оригінал, навіть якщо доступне транскодування. Може призвести до буферизації. Відео, доступні локально, відтворюються в оригінальній якості, незалежно від цього налаштування.", "setting_video_viewer_original_video_title": "Примусово відтворювати оригінальне відео", "settings": "Налаштування", - "settings_require_restart": "Перезавантажте застосунок для застосування цього налаштування", - "settings_saved": "Налаштування збережені", + "settings_require_restart": "Перезапустіть Immich, щоб застосувати це налаштування", + "settings_saved": "Налаштування збережено", "setup_pin_code": "Налаштувати PIN-код", - "share": "Поширити", - "share_action_prompt": "{count} фото та відео надіслано", + "share": "Поділитися", + "share_action_prompt": "Надано спільний доступ до {count, plural, one {# елемента} few {# елементів} many {# елементів} other {# елементів}}", "share_add_photos": "Додати фото", - "share_assets_selected": "{count} обрано", - "share_dialog_preparing": "Підготовка...", + "share_assets_selected": "{count} вибрано", + "share_dialog_preparing": "Підготовка…", "share_link": "Поділитися посиланням", "shared": "Спільні", "shared_album_activities_input_disable": "Коментування вимкнено", - "shared_album_activity_remove_content": "Ви бажаєте видалити цю активність?", - "shared_album_activity_remove_title": "Видалити активність", - "shared_album_section_people_action_error": "Помилка виходу/видалення з альбому", - "shared_album_section_people_action_leave": "Видалити користувача з альбому", - "shared_album_section_people_action_remove_user": "Видалити користувача з альбому", + "shared_album_activity_remove_content": "Ви хочете видалити цей запис?", + "shared_album_activity_remove_title": "Видалити запис", + "shared_album_section_people_action_error": "Не вдалося вийти з альбому або вилучити з нього", + "shared_album_section_people_action_leave": "Вилучити користувача з альбому", + "shared_album_section_people_action_remove_user": "Вилучити користувача з альбому", "shared_album_section_people_title": "ЛЮДИ", - "shared_by": "Поділився", - "shared_by_user": "Спільний доступ з {user}", - "shared_by_you": "Ви поділились", + "shared_by": "Надано доступ", + "shared_by_user": "Надано доступ: {user}", + "shared_by_you": "Надано доступ вами", "shared_from_partner": "Фото від {partner}", "shared_intent_upload_button_progress_text": "{current} / {total} Вивантажено", "shared_link_app_bar_title": "Спільні посилання", "shared_link_clipboard_copied_massage": "Скопійовано в буфер обміну", "shared_link_clipboard_text": "Посилання: {link}\nПароль: {password}", - "shared_link_create_error": "Помилка під час створення спільного посилання", - "shared_link_custom_url_description": "Отримайте доступ до цього спільного посилання за власною URL-адресою", + "shared_link_create_error": "Не вдалося створити спільне посилання", + "shared_link_custom_url_description": "Використовувати довільну URL-адресу для цього спільного посилання", "shared_link_edit_description_hint": "Введіть опис для спільного доступу", "shared_link_edit_expire_after_option_day": "1 день", - "shared_link_edit_expire_after_option_days": "{count} днів", + "shared_link_edit_expire_after_option_days": "{count, plural, one {# день} few {# дні} many {# днів} other {# днів}}", "shared_link_edit_expire_after_option_hour": "1 годину", - "shared_link_edit_expire_after_option_hours": "{count} годин", + "shared_link_edit_expire_after_option_hours": "{count, plural, one {# годину} few {# години} many {# годин} other {# годин}}", "shared_link_edit_expire_after_option_minute": "1 хвилину", - "shared_link_edit_expire_after_option_minutes": "{count} хвилин", - "shared_link_edit_expire_after_option_months": "{count} місяців", - "shared_link_edit_expire_after_option_year": "{count} років", + "shared_link_edit_expire_after_option_minutes": "{count, plural, one {# хвилину} few {# хвилини} many {# хвилин} other {# хвилин}}", + "shared_link_edit_expire_after_option_months": "{count, plural, one {# місяць} few {# місяці} many {# місяців} other {# місяців}}", + "shared_link_edit_expire_after_option_year": "{count, plural, one {# рік} few {# роки} many {# років} other {# років}}", "shared_link_edit_password_hint": "Введіть пароль для спільного доступу", "shared_link_edit_submit_button": "Оновити посилання", - "shared_link_error_server_url_fetch": "Неможливо запитати url із сервера", - "shared_link_expires_day": "Закінчується через {count} день", - "shared_link_expires_days": "Закінчується через {count} днів", - "shared_link_expires_hour": "Закінчується через {count} годину", - "shared_link_expires_hours": "Закінчується через {count} годин", - "shared_link_expires_minute": "Закінчується через {count} хвилину", - "shared_link_expires_minutes": "Закінчується через {count} хвилин", + "shared_link_error_server_url_fetch": "Не вдається отримати URL сервера", + "shared_link_expires_day": "Закінчується через {count, plural, one {# день} few {# дні} many {# днів} other {# днів}}", + "shared_link_expires_days": "Закінчується через {count, plural, one {# день} few {# дні} many {# днів} other {# днів}}", + "shared_link_expires_hour": "Закінчується через {count, plural, one {# годину} few {# години} many {# годин} other {# годин}}", + "shared_link_expires_hours": "Закінчується через {count, plural, one {# годину} few {# години} many {# годин} other {# годин}}", + "shared_link_expires_minute": "Закінчується через {count, plural, one {# хвилину} few {# хвилини} many {# хвилин} other {# хвилин}}", + "shared_link_expires_minutes": "Закінчується через {count, plural, one {# хвилину} few {# хвилини} many {# хвилин} other {# хвилин}}", "shared_link_expires_never": "Закінчується ∞", - "shared_link_expires_second": "Закінчується через {count} секунду", - "shared_link_expires_seconds": "Закінчується через {count} секунд", + "shared_link_expires_second": "Закінчується через {count, plural, one {# секунду} few {# секунди} many {# секунд} other {# секунд}}", + "shared_link_expires_seconds": "Закінчується через {count, plural, one {# секунду} few {# секунди} many {# секунд} other {# секунд}}", "shared_link_individual_shared": "Індивідуальний спільний доступ", - "shared_link_info_chip_metadata": "EXIF", + "shared_link_info_chip_metadata": "Exif", "shared_link_manage_links": "Керування спільними посиланнями", - "shared_link_options": "Параметри спільних посилань", - "shared_link_password_description": "Вимагати пароль для доступу до цього спільного посилання", + "shared_link_options": "Варіанти спільних посилань", + "shared_link_password_description": "Запитувати пароль, щоб отримати доступ до цього спільного посилання", "shared_links": "Спільні посилання", "shared_links_description": "Діліться фото та відео за посиланням", - "shared_photos_and_videos_count": "{assetCount, plural, other {# спільні фотографії та відео.}}", - "shared_with_me": "Доступні мені", + "shared_photos_and_videos_count": "{assetCount, plural, one {# спільне фото та відео} few {# спільні фото та відео} many {# спільних фото та відео} other {# спільних фото та відео}}", + "shared_with_me": "Спільні зі мною", "shared_with_partner": "Спільно з {partner}", - "sharing": "Спільні", - "sharing_enter_password": "Будь ласка, введіть пароль для перегляду цієї сторінки.", + "sharing": "Спільний доступ", + "sharing_enter_password": "Введіть пароль для перегляду цієї сторінки.", "sharing_page_album": "Спільні альбоми", "sharing_page_description": "Створюйте спільні альбоми, щоб ділитися фото та відео з людьми зі своєї мережі.", "sharing_page_empty_list": "ПОРОЖНІЙ СПИСОК", "sharing_sidebar_description": "Відображати посилання на спільний доступ у бічній панелі", "sharing_silver_appbar_create_shared_album": "Створити спільний альбом", "sharing_silver_appbar_share_partner": "Поділитися з партнером", - "shift_to_permanent_delete": "натисніть ⇧ щоб видалити файл назавжди", - "show_album_options": "Показати параметри альбому", + "shift_to_permanent_delete": "натисніть ⇧, щоб видалити елемент назавжди", + "show_album_options": "Показати варіанти альбому", "show_albums": "Показувати альбоми", "show_all_people": "Показати всіх людей", "show_and_hide_people": "Показати та приховати людей", "show_file_location": "Показати розташування файлу", "show_gallery": "Показати галерею", "show_hidden_people": "Показати прихованих людей", - "show_in_timeline": "Показати на часовій шкалі", - "show_in_timeline_setting_description": "Показуйте фото та відео цього користувача у своїй стрічці", + "show_in_timeline": "Показувати в хронології", + "show_in_timeline_setting_description": "Показувати фото та відео цього користувача у вашій хронології", "show_keyboard_shortcuts": "Показати сполучення клавіш", "show_metadata": "Показувати метадані", "show_or_hide_info": "Показати або приховати інформацію", "show_password": "Показати пароль", - "show_person_options": "Показати параметри людини", - "show_progress_bar": "Показати індикатор прогресу", + "show_person_options": "Показати варіанти людини", + "show_progress_bar": "Показувати індикатор поступу", "show_schema": "Показати схему", - "show_search_options": "Показати параметри пошуку", + "show_search_options": "Показати варіанти пошуку", "show_shared_links": "Показати спільні посилання", - "show_slideshow_transition": "Показати перехід слайд-шоу", - "show_supporter_badge": "Значок підтримки", - "show_supporter_badge_description": "Показати значок підтримки", + "show_slideshow_transition": "Показувати перехід слайд-шоу", + "show_supporter_badge": "Значок прихильника", + "show_supporter_badge_description": "Показувати значок прихильника", "show_text_recognition": "Показати розпізнавання тексту", "show_text_search_menu": "Показати меню текстового пошуку", "shuffle": "Перемішати", "sidebar": "Бічна панель", - "sidebar_display_description": "Відобразити посилання на перегляд у бічній панелі", - "sign_out": "Вихід", + "sidebar_display_description": "Відображати посилання на перегляд у бічній панелі", + "sign_out": "Вийти", "sign_up": "Зареєструватися", "size": "Розмір", "skip_to_content": "Перейти до вмісту", "skip_to_folders": "Перейти до папок", "skip_to_tags": "Перейти до тегів", - "slideshow": "Слайдшоу", - "slideshow_repeat": "Повторити слайд-шоу", + "slideshow": "Слайд-шоу", + "slideshow_repeat": "Повторювати слайд-шоу", "slideshow_repeat_description": "Повернення до початку після завершення слайд-шоу", "slideshow_settings": "Налаштування слайд-шоу", - "sort_albums_by": "Сортувати альбоми за...", + "sort_albums_by": "Сортувати альбоми за…", "sort_created": "Дата створення", - "sort_items": "Кількість файлів", + "sort_items": "Кількість елементів", "sort_modified": "Дата зміни", "sort_newest": "Найновіше фото", - "sort_oldest": "Старі фото", + "sort_oldest": "Найстаріше фото", "sort_people_by_similarity": "Сортувати людей за схожістю", - "sort_recent": "Нещодавні", - "sort_title": "Заголовок", + "sort_recent": "Найсвіжіше фото", + "sort_title": "Назва", "source": "Джерело", - "stack": "У стопку", - "stack_action_prompt": "Згруповано: {count}", + "stack": "Згрупувати", + "stack_action_prompt": "{count} згруповано", "stack_duplicates": "Групувати дублікати", "stack_select_one_photo": "Вибрати одне основне фото для групи", - "stack_selected_photos": "Згрупувати обрані фотографії", - "stacked_assets_count": "Згруповано {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}}", + "stack_selected_photos": "Згрупувати вибрані фото", + "stacked_assets_count": "Згруповано {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", "stacktrace": "Стек викликів", - "start": "Старт", + "start": "Почати", "start_date": "Дата початку", "start_date_before_end_date": "Дата початку має бути раніше дати завершення", "state": "Регіон", "status": "Стан", "stop_casting": "Зупинити трансляцію", - "stop_motion_photo": "Фото \"Стоп-моушен\"", - "stop_photo_sharing": "Зупинити спільний доступ до ваших фото?", - "stop_photo_sharing_description": "{partner} більше не матиме доступу до ваших фотографій.", - "stop_sharing_photos_with_user": "Припинити ділитися своїми фотографіями з цим користувачем", + "stop_motion_photo": "Зупинити рухоме фото", + "stop_photo_sharing": "Припинити спільний доступ до ваших фото?", + "stop_photo_sharing_description": "{partner} більше не матиме доступу до ваших фото.", + "stop_sharing_photos_with_user": "Припинити ділитися своїми фото з цим користувачем", "storage": "Сховище", - "storage_label": "Мітка для зберігання", - "storage_quota": "Обсяг сховища", + "storage_label": "Мітка сховища", + "storage_quota": "Квота сховища", "storage_usage": "{used} з {available} використано", - "submit": "Підтвердити", - "success": "Успішно", + "submit": "Надіслати", + "success": "Готово", "suggestions": "Пропозиції", "sunrise_on_the_beach": "Світанок на пляжі", "support": "Підтримка", "support_and_feedback": "Підтримка та зворотний зв'язок", - "support_third_party_description": "Вашу установку Immich було упаковано третьою стороною. Проблеми, з якими ви стикаєтесь, можуть бути викликані цим пакетом, тому спочатку зверніться до них за допомогою, використовуючи наведені нижче посилання.", + "support_third_party_description": "Вашу збірку Immich було підготовлено стороннім розробником. Проблеми можуть бути викликані цим пакетом, тому спершу зверніться до його автора за посиланнями нижче.", "supporter": "Прихильник", "swap_merge_direction": "Змінити напрямок об'єднання", "sync": "Синхронізувати", "sync_albums": "Синхронізувати альбоми", - "sync_albums_manual_subtitle": "Синхронізувати всі завантажені фото та відео у вибрані альбоми для резервного копіювання", + "sync_albums_manual_subtitle": "Синхронізувати всі вивантажені фото та відео у вибрані альбоми для резервного копіювання", "sync_local": "Синхронізувати на пристрої", "sync_remote": "Синхронізувати з сервером", "sync_status": "Стан синхронізації", "sync_status_subtitle": "Перегляд та керування системою синхронізації", - "sync_upload_album_setting_subtitle": "Створюйте та вивантажуйте свої фотографії та відео до вибраних альбомів на сервер Immich", + "sync_upload_album_setting_subtitle": "Створювати та вивантажувати свої фото та відео до вибраних альбомів на сервер Immich", "tag": "Тег", "tag_assets": "Додати теги", "tag_created": "Створено тег: {tag}", - "tag_feature_description": "Перегляд фотографій та відео, згрупованих за логічними темами тегів", - "tag_not_found_question": "Не вдається знайти тег? Створити новий тег.", - "tag_people": "Тег людей", + "tag_feature_description": "Перегляд фото та відео, згрупованих за логічними темами тегів", + "tag_not_found_question": "Не вдається знайти тег? Створіть новий тег.", + "tag_people": "Позначити людей", "tag_updated": "Оновлено тег: {tag}", - "tagged_assets": "Позначено тегом {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}}", + "tagged_assets": "Позначено тегом {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", "tags": "Теги", - "tap_to_run_job": "Торкніться, щоб запустити завдання", + "tap_to_run_job": "Торкніться, щоб виконати завдання", "template": "Шаблон", "text_recognition": "Розпізнавання тексту", - "theme": "Тема", - "theme_selection": "Вибір теми", - "theme_selection_description": "Автоматично встановлювати тему на світлу або темну залежно від системних налаштувань вашого браузера", - "theme_setting_asset_list_storage_indicator_title": "Показувати піктограму сховища на плитках файлів", - "theme_setting_asset_list_tiles_per_row_title": "Кількість файлів у рядку ({count})", - "theme_setting_colorful_interface_subtitle": "Застосувати основний колір на поверхню фону.", + "theme": "Тема оформлення", + "theme_selection": "Вибір теми оформлення", + "theme_selection_description": "Автоматично установлювати тему оформлення на світлу або темну залежно від системних налаштувань вашого браузера", + "theme_setting_asset_list_storage_indicator_title": "Показувати піктограму сховища на плитках елементів", + "theme_setting_asset_list_tiles_per_row_title": "Кількість елементів у рядку ({count})", + "theme_setting_colorful_interface_subtitle": "Застосовувати основний колір до фонових поверхонь.", "theme_setting_colorful_interface_title": "Барвистий інтерфейс", - "theme_setting_image_viewer_quality_subtitle": "Налаштування якості перегляду повноекранних зображень", + "theme_setting_image_viewer_quality_subtitle": "Налаштування якості детального перегляду зображень", "theme_setting_image_viewer_quality_title": "Якість перегляду зображень", "theme_setting_primary_color_subtitle": "Виберіть колір для основних дій і акцентів.", "theme_setting_primary_color_title": "Основний колір", "theme_setting_system_primary_color_title": "Використовувати колір системи", "theme_setting_system_theme_switch": "Автоматично (як у системі)", - "theme_setting_theme_subtitle": "Налаштування теми застосунку", - "theme_setting_three_stage_loading_subtitle": "Триетапне завантаження може підвищити продуктивність завантаження, але спричинить значно більше навантаження на мережу", - "theme_setting_three_stage_loading_title": "Увімкнути триетапне завантаження", + "theme_setting_theme_subtitle": "Налаштування теми оформлення застосунку", + "theme_setting_three_stage_loading_subtitle": "Триетапне завантаження може підвищити швидкість відображення, але значно збільшить навантаження на мережу", + "theme_setting_three_stage_loading_title": "Триетапне завантаження", "then": "Тоді", - "they_will_be_merged_together": "Вони будуть об'єднані разом", + "they_will_be_merged_together": "Їх буде об'єднано", "third_party_resources": "Сторонні ресурси", "time": "Час", - "time_based_memories": "Спогади, що базуються на часі", + "time_based_memories": "Спогади за датою", "time_based_memories_duration": "Кількість секунд для відображення кожного зображення.", "timeline": "Хронологія", "timezone": "Часовий пояс", "to_archive": "Архів", "to_change_password": "Змінити пароль", - "to_favorite": "Обране", + "to_favorite": "Вибране", "to_login": "Вхід", "to_multi_select": "для множинного вибору", - "to_parent": "Повернутись назад", + "to_parent": "До батьківської папки", "to_select": "вибрати", "to_trash": "Кошик", "toggle_settings": "Перемикання налаштувань", - "toggle_theme_description": "Перемкнути тему", + "toggle_theme_description": "Перемкнути тему оформлення", "total": "Усього", "total_usage": "Загальне використання", "trash": "Кошик", "trash_action_prompt": "{count} переміщено до кошика", - "trash_all": "Видалити все", - "trash_count": "Видалити {count, number}", - "trash_delete_asset": "У Кошик/Видалити файл", + "trash_all": "Перемістити все до кошика", + "trash_count": "Кошик {count, number}", + "trash_delete_asset": "У кошик/Видалити елемент", "trash_emptied": "Кошик очищено", - "trash_no_results_message": "Тут з'являтимуться видалені фото та відео.", + "trash_no_results_message": "Фото та відео з кошика з'являтимуться тут.", "trash_page_delete_all": "Видалити усе", - "trash_page_empty_trash_dialog_content": "Ви хочете очистити кошик? Ці файли будуть остаточно видалені з Immich", + "trash_page_empty_trash_dialog_content": "Хочете очистити кошик? Ці елементи буде остаточно видалено з Immich", "trash_page_info": "Переміщені до кошика файли буде остаточно видалено через {days} днів", - "trash_page_no_assets": "Видалені фото та відео відсутні", + "trash_page_no_assets": "Немає елементів у кошику", "trash_page_restore_all": "Відновити усе", - "trash_page_select_assets_btn": "Вибрати файли", + "trash_page_select_assets_btn": "Вибрати елементи", "trash_page_title": "Кошик ({count})", - "trashed_items_will_be_permanently_deleted_after": "Видалені файли будуть остаточно видалені через {days, plural, one {# день} few {# дні} many {# днів} other {# днів}}.", + "trashed_items_will_be_permanently_deleted_after": "Елементи у кошику буде остаточно видалено через {days, plural, one {# день} few {# дні} many {# днів} other {# днів}}.", "trigger": "Тригер", - "trigger_asset_uploaded": "Файл додано", - "trigger_asset_uploaded_description": "Запускається під час вивантаження нового файлу", + "trigger_asset_uploaded": "Елемент вивантажено", + "trigger_asset_uploaded_description": "Спрацьовує, коли вивантажено новий елемент", "trigger_description": "Подія, яка запускає автоматизацію", - "trigger_person_recognized": "Особа розпізнана", + "trigger_person_recognized": "Людину розпізнано", "trigger_person_recognized_description": "Спрацьовує, коли виявляється людина", "trigger_type": "Тип тригера", - "troubleshoot": "Виправлення неполадок", + "troubleshoot": "Усунення неполадок", "type": "Тип", - "unable_to_change_pin_code": "Неможливо змінити PIN-код", + "unable_to_change_pin_code": "Не вдається змінити PIN-код", "unable_to_check_version": "Не вдається перевірити версію застосунку або сервера", - "unable_to_setup_pin_code": "Неможливо налаштувати PIN-код", - "unarchive": "Розархівувати", - "unarchive_action_prompt": "{count, plural, one {# файл вилучено з архіву} few {# файли вилучено з архіву} other {# файлів вилучено з архіву}}", - "unarchived_count": "{count, plural, other {Повернуто з архіву #}}", + "unable_to_setup_pin_code": "Не вдається налаштувати PIN-код", + "unarchive": "Вилучити з архіву", + "unarchive_action_prompt": "{count, plural, one {# елемент вилучено з архіву} few {# елементи вилучено з архіву} many {# елементів вилучено з архіву} other {# елементів вилучено з архіву}}", + "unarchived_count": "{count, plural, one {Вилучено з архіву #} few {Вилучено з архіву #} many {Вилучено з архіву #} other {Вилучено з архіву #}}", "undo": "Скасувати", - "unfavorite": "Видалити з обраного", - "unfavorite_action_prompt": "{count} вилучено з обраного", - "unhide_person": "Розкрити особу", + "unfavorite": "Вилучити з вибраного", + "unfavorite_action_prompt": "{count} вилучено з вибраного", + "unhide_person": "Розкрити людину", "unknown": "Невідомо", "unknown_country": "Невідома країна", "unknown_date": "Невідома дата", @@ -2296,130 +2300,133 @@ "unlimited": "Без обмежень", "unlink_motion_video": "Від'єднати рухоме відео", "unlink_oauth": "Від'єднати OAuth", - "unlinked_oauth_account": "Від'єднаний обліковий запис OAuth", - "unmute_memories": "Увімкнути звук спогадів", + "unlinked_oauth_account": "Обліковий запис OAuth від'єднано", + "unmute_memories": "Увімкнути спогади", "unnamed_album": "Альбом без назви", - "unnamed_album_delete_confirmation": "Ви впевнені, що бажаєте видалити цей альбом?", + "unnamed_album_delete_confirmation": "Ви впевнені, що хочете видалити цей альбом?", "unnamed_share": "Спільний доступ без назви", "unsaved_change": "Незбережена зміна", - "unselect_all": "Зняти все", - "unselect_all_duplicates": "Скасувати вибір усіх дублікатів", - "unselect_all_in": "Зняти вибір у всьому {group}", - "unstack": "Розібрати стек", - "unstack_action_prompt": "{count} роз’єднано", - "unstacked_assets_count": "Розгорнути {count, plural, one {# файл} few {# файли} many {# файлів} other {# файлів}}", + "unselect_all": "Зняти вибір з усіх", + "unselect_all_duplicates": "Зняти вибір з усіх дублікатів", + "unselect_all_in": "Зняти вибір у {group}", + "unstack": "Розгрупувати", + "unstack_action_prompt": "{count} — розгруповано", + "unstacked_assets_count": "Розгруповано {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", "unsupported_field_type": "Непідтримуваний тип поля", + "unsupported_file_type": "Файл {file} не вдається вивантажити, оскільки тип файлу {type} не підтримується.", "untagged": "Без тегів", - "untitled_workflow": "Безіменний робочий процес", + "untitled_workflow": "Безіменна автоматизація", "up_next": "Наступне", - "update_location_action_prompt": "Оновити розташування вибраних об’єктів ({count}) за допомогою:", + "update_location_action_prompt": "Оновити місце вибраних елементів ({count}) за допомогою:", "updated_at": "Оновлено", "updated_password": "Пароль оновлено", "upload": "Вивантажити", - "upload_concurrency": "Паралельність вивантаження", + "upload_concurrency": "Одночасні вивантаження", "upload_details": "Деталі вивантаження", - "upload_dialog_info": "Бажаєте створити резервну копію вибраних файлів на сервері?", - "upload_dialog_title": "Вивантажити файли", - "upload_error_with_count": "Помилка вивантаження для {count, plural, one {# файлу} few {# файлів} many {# файлів} other {# файлів}}", - "upload_errors": "Вивантаження завершено з {count, plural, one {# помилкою} few {# помилками} many {# помилками} other {# помилками}}, оновіть сторінку, щоб побачити нові вивантажені файли.", + "upload_dialog_info": "Хочете створити резервну копію вибраних елементів на сервері?", + "upload_dialog_title": "Вивантажити елемент", + "upload_error_with_count": "Не вдалося вивантажити {count, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}", + "upload_errors": "Вивантаження завершено з {count, plural, one {# помилкою} few {# помилками} many {# помилками} other {# помилками}}, оновіть сторінку, щоб побачити нові вивантажені елементи.", "upload_finished": "Вивантаження завершено", - "upload_progress": "Залишилось {remaining, number} - Опрацьовано {processed, number}/{total, number}", - "upload_skipped_duplicates": "Пропущено {count, plural, one {# дубльований файл} few {# дубльовані файли} many {# дубльованих файлів} other {# дубльованих файлів}}", + "upload_progress": "Залишилося {remaining, number} - Опрацьовано {processed, number}/{total, number}", + "upload_skipped_duplicates": "Пропущено {count, plural, one {# дублікат} few {# дублікати} many {# дублікатів} other {# дублікатів}}", "upload_status_duplicates": "Дублікати", "upload_status_errors": "Помилки", "upload_status_uploaded": "Вивантажено", - "upload_success": "Вивантаження успішне. Оновіть сторінку, щоб побачити нові вивантажені файли.", + "upload_success": "Вивантажено. Оновіть сторінку, щоб побачити нові елементи.", "upload_to_immich": "Вивантажити в Immich ({count})", "uploading": "Вивантаження", - "uploading_media": "Виконується вивантаження", + "uploading_media": "Вивантаження медіа", "url": "URL", "usage": "Використання", "use_biometric": "Використовувати біометрію", "use_browser_locale": "Використовувати локаль браузера", + "use_browser_locale_description": "Форматувати дати, час та числа відповідно до локалі вашого браузера", "use_current_connection": "Використати поточне з'єднання", - "use_custom_date_range": "Використовувати користувацький діапазон дат", + "use_custom_date_range": "Натомість використовувати довільний діапазон дат", "user": "Користувач", "user_has_been_deleted": "Користувача видалено.", - "user_id": "ID Користувача", - "user_liked": "{user} вподобав {type, select, photo {це фото} video {це відео} asset {цей файл} other {це}}", + "user_id": "ID користувача", + "user_liked": "{user} вподобав(-ла) {type, select, photo {це фото} video {це відео} asset {цей елемент} other {це}}", "user_pin_code_settings": "PIN-код", "user_pin_code_settings_description": "Керування PIN-кодом", "user_privacy": "Конфіденційність користувача", - "user_purchase_settings": "Придбати", - "user_purchase_settings_description": "Керувати вашою покупкою", + "user_purchase_settings": "Придбання", + "user_purchase_settings_description": "Керування купівлею", "user_role_set": "Призначити {user} на роль {role}", "user_usage_detail": "Деталі використання користувача", "user_usage_stats": "Статистика використання облікового запису", "user_usage_stats_description": "Переглянути статистику використання облікового запису", "username": "Ім'я користувача", "users": "Користувачі", - "users_added_to_album_count": "{count, plural, one {# користувача} few {# користувачі} many {# користувачів} other {# користувачів}} додано до альбому", + "users_added_to_album_count": "{count, plural, one {# користувача} few {# користувачів} many {# користувачів} other {# користувачів}} додано до альбому", "utilities": "Утиліти", "validate": "Перевірити", "validate_endpoint_error": "Будь ласка, введіть дійсну URL-адресу", "validation_error": "Помилка перевірки", "variables": "Змінні", "version": "Версія", - "version_announcement_closing": "Твій друг, Алекс", - "version_announcement_message": "Привіт! Доступна нова версія Immich. Будь ласка, приділіть трохи часу для ознайомлення з примітками до випуску, щоб переконатися, що ваша установка оновлена і уникнути можливих помилок у налаштуваннях, особливо якщо ви використовуєте WatchTower або будь-який інший механізм, який автоматично оновлює ваш екземпляр Immich.", + "version_announcement_closing": "Ваш друг, Алекс", + "version_announcement_message": "Привіт! Доступна нова версія Immich. Будь ласка, приділіть трохи часу щоб ознайомитися з примітками до випуску, щоб переконатися, що вашу установку оновлено й уникнути можливих помилок у налаштуваннях, особливо якщо ви використовуєте WatchTower або будь-який інший механізм, який автоматично оновлює ваш екземпляр Immich.", "version_history": "Історія версій", - "version_history_item": "Встановлено {version} {date}", + "version_history_item": "Установлено {version} — {date}", "video": "Відео", "video_hover_setting": "Відтворення мініатюри відео під час наведення курсору миші", - "video_hover_setting_description": "Відтворювати зображення відео при наведенні курсора на файл. Навіть якщо вимкнено, відтворення може бути запущено, навівши курсор на піктограму відтворення.", + "video_hover_setting_description": "Відтворювати мініатюру відео під час наведення курсора на елемент. Навіть якщо вимкнено, відтворення можна розпочати, навівши курсор на піктограму відтворення.", "videos": "Відео", - "videos_count": "{count, plural, one {# Відео} few {# Відео} many {# Відео} other {# Відео}}", - "videos_only": "Тільки відео", + "videos_count": "{count, plural, one {# відео} few {# відео} many {# відео} other {# відео}}", + "videos_only": "Лише відео", "view": "Перегляд", "view_album": "Переглянути альбом", - "view_all": "Переглянути усі", + "view_all": "Переглянути все", "view_all_users": "Переглянути всіх користувачів", - "view_asset_owners": "Переглянути власників файлів", + "view_asset_owners": "Переглянути власників елементів", "view_details": "Детальніше", "view_in_timeline": "Переглянути в хронології", "view_link": "Переглянути посилання", "view_links": "Переглянути посилання", "view_name": "Переглянути", - "view_next_asset": "Переглянути наступний файл", - "view_previous_asset": "Переглянути попередній файл", + "view_next_asset": "Переглянути наступний елемент", + "view_previous_asset": "Переглянути попередній елемент", "view_qr_code": "Переглянути QR-код", - "view_similar_photos": "Переглянути схожі фотографії", - "view_stack": "Перегляд стеку", + "view_similar_photos": "Переглянути схожі фото", + "view_stack": "Переглянути стек", "view_user": "Переглянути користувача", - "viewer_remove_from_stack": "Видалити зі стеку", - "viewer_stack_use_as_main_asset": "Використовувати як основний файл", - "viewer_unstack": "Розібрати стек", - "visibility_changed": "Видимість змінено для {count, plural, one {# особи} few {# осіб} many {# осіб} other {# осіб}}", + "viewer_remove_from_stack": "Вилучити зі стеку", + "viewer_stack_use_as_main_asset": "Використати як основний елемент", + "viewer_unstack": "Розбити стек", + "visibility": "Видимість", + "visibility_changed": "Видимість змінено для {count, plural, one {# людини} few {# людей} many {# людей} other {# людей}}", "visual": "Візуальний", "visual_builder": "Візуальний конструктор", "waiting": "У черзі", - "waiting_count": "Очікують: {count}", + "waiting_count": "У черзі: {count}", "warning": "Попередження", "week": "Тиждень", "welcome": "Ласкаво просимо", "welcome_to_immich": "Ласкаво просимо до Immich", "width": "Ширина", "wifi_name": "Назва Wi-Fi", - "workflow_delete_prompt": "Ви впевнені, що хочете видалити цей робочий процес?", - "workflow_deleted": "Робочий процес видалено", - "workflow_description": "Опис робочого процесу", - "workflow_info": "Інформація про робочий процес", - "workflow_json": "Робочий процес JSON", - "workflow_json_help": "Відредагуйте конфігурацію робочого процесу у форматі JSON. Зміни будуть синхронізовані з візуальним конструктором.", - "workflow_name": "Назва робочого процесу", + "workflow_delete_prompt": "Ви впевнені, що хочете видалити цю автоматизацію?", + "workflow_deleted": "Автоматизацію видалено", + "workflow_description": "Опис автоматизації", + "workflow_info": "Інформація про автоматизацію", + "workflow_json": "JSON автоматизації", + "workflow_json_help": "Відредагуйте конфігурацію автоматизації у форматі JSON. Зміни буде синхронізовано з візуальним конструктором.", + "workflow_name": "Назва автоматизації", "workflow_navigation_prompt": "Ви впевнені, що хочете вийти без збереження змін?", - "workflow_summary": "Зведення робочого процесу", - "workflow_update_success": "Робочий процес успішно оновлено", - "workflow_updated": "Робочий процес оновлено", - "workflows": "Робочі процеси", - "workflows_help_text": "Автоматизації виконують дії з файлами залежно від тригерів і умов", + "workflow_summary": "Зведення автоматизації", + "workflow_update_success": "Автоматизацію оновлено", + "workflow_updated": "Автоматизацію оновлено", + "workflows": "Автоматизації", + "workflows_help_text": "Автоматизації виконують дії з елементами залежно від тригерів і фільтрів", "wrong_pin_code": "Неправильний PIN-код", "year": "Рік", "years_ago": "{years, plural, one {# рік} few {# роки} many {# років} other {# років}} тому", "yes": "Так", "you_dont_have_any_shared_links": "У вас немає спільних посилань", "your_wifi_name": "Назва вашої Wi-Fi мережі", - "zero_to_clear_rating": "натисніть 0, щоб очистити рейтинг файлу", + "zero_to_clear_rating": "натисніть 0, щоб скинути рейтинг елемента", "zoom_image": "Збільшити зображення", "zoom_to_bounds": "Збільшити масштаб до меж" } diff --git a/i18n/vi.json b/i18n/vi.json index 06d73b91cf..fa37d05fb2 100644 --- a/i18n/vi.json +++ b/i18n/vi.json @@ -871,8 +871,8 @@ "current_pin_code": "Mã PIN hiện tại", "current_server_address": "Địa chủ máy chủ hiện tại", "custom_date": "Thiết lập ngày tùy chỉnh", - "custom_locale": "Ngôn ngữ và khu vực", - "custom_locale_description": "Định dạng ngày và số dựa trên ngôn ngữ và khu vực", + "custom_locale": "Khu vực tùy chỉnh", + "custom_locale_description": "Định dạng ngày, thời gian và số dựa trên ngôn ngữ và khu vực đã chọn", "custom_url": "URL tùy chỉnh", "cutoff_date_description": "Giữ lại ảnh trong vòng…", "cutoff_day": "{count, plural, one {ngày} other {ngày}}", @@ -880,7 +880,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM, yyyy", "dark": "Tối", - "dark_theme": "Đổi giao diện", + "dark_theme": "Chuyển sang chủ đề tối", "date": "Ngày", "date_after": "Ngày sau", "date_and_time": "Ngày và giờ", @@ -891,10 +891,6 @@ "day": "Ngày", "days": "Ngày", "deduplicate_all": "Xóa tất cả mục trùng lặp", - "deduplication_criteria_1": "Kích cỡ ảnh theo byte", - "deduplication_criteria_2": "Số lượng dữ liệu EXIF", - "deduplication_info": "Thông tin loại bỏ dữ liệu trùng lặp", - "deduplication_info_description": "Để tự động chọn trước và loại bỏ các tệp trùng lặp hàng loạt, chúng tôi sẽ xem xét dựa trên:", "delete": "Xóa", "delete_action_confirmation_message": "Bạn có chắc muốn xóa tệp này? Thao tác này sẽ chuyển tệp vào thùng rác của máy chủ và sẽ hỏi bạn có muốn xóa nó cục bộ không", "delete_action_prompt": "{count} đã xóa", @@ -1072,7 +1068,7 @@ "failed_to_update_notification_status": "Cập nhật trạng thái thông báo thất bại", "incorrect_email_or_password": "Email hoặc mật khẩu không chính xác", "library_folder_already_exists": "Đường dẫn nhập này đã tồn tại.", - "page_not_found": "Không tìm thấy trang :/", + "page_not_found": "Không tìm thấy trang", "paths_validation_failed": "{paths, plural, one {# đường dẫn} other {# đường dẫn}} không hợp lệ", "profile_picture_transparent_pixels": "Ảnh đại diện không thể có điểm ảnh trong suốt. Vui lòng phóng to và/hoặc di chuyển hình ảnh.", "quota_higher_than_disk_size": "Bạn đã đặt hạn mức cao hơn dung lượng ổ đĩa", @@ -1649,6 +1645,7 @@ "only_favorites": "Chỉ lượt thích", "open": "Mở", "open_calendar": "Hiện thị lịch", + "open_in_browser": "Mở trong trình duyệt", "open_in_map_view": "Mở trong bản đồ", "open_in_openstreetmap": "Mở trong OpenStreetMap", "open_the_search_filters": "Mở bộ lọc tìm kiếm", @@ -1808,7 +1805,7 @@ "rate_asset": "Asset Đánh giá", "rating": "Xếp hạng sao", "rating_clear": "Xóa xếp hạng", - "rating_count": "{count, plural, one {# sao} other {# sao}}", + "rating_count": "{count, plural, =0 {Chưa xếp hạng} one {# sao} other {# sao}}", "rating_description": "Hiển thị xếp hạng EXIF trong bảng thông tin", "reaction_options": "Tùy chọn phản ứng", "read_changelog": "Đọc nhật ký thay đổi", @@ -1881,7 +1878,10 @@ "reset_pin_code_success": "Đặt lại mã PIN thành công", "reset_pin_code_with_password": "Bạn luôn có thể đặt lại mã PIN của bạn bằng mật khẩu của bạn", "reset_sqlite": "Đặt lại cơ sở dữ liệu SQLite", - "reset_sqlite_confirmation": "Bạn có chắc muốn đặt lại cơ sở dữ liệu SQLite? Bạn sẽ cần đăng xuất và đăng nhập lại để đồng bộ lại dữ liệu", + "reset_sqlite_clear_app_data": "Xóa dữ liệu", + "reset_sqlite_confirmation": "Bạn có chắc muốn xóa dữ liệu ứng dụng không? Thao tác này sẽ xóa tất cả cài đặt và đăng xuất bạn khỏi ứng dụng.", + "reset_sqlite_confirmation_note": "Lưu ý: Bạn cần khởi động lại ứng dụng sau khi xóa.", + "reset_sqlite_done": "Dữ liệu ứng dụng đã được xóa. Vui lòng khởi động lại Immich và đăng nhập lại.", "reset_sqlite_success": "Đã thiết lập lại cơ sở dữ liệu SQLite thành công", "reset_to_default": "Đặt lại về mặc định", "resolution": "Độ phân giải", @@ -2332,6 +2332,8 @@ "url": "URL", "usage": "Sử dụng", "use_biometric": "Dùng sinh trắc học", + "use_browser_locale": "Dùng ngôn ngữ trình duyệt", + "use_browser_locale_description": "Định dạng ngày, thời gian và số dựa trên ngôn ngữ trình duyệt", "use_current_connection": "Dùng kết nối hiện tại", "use_custom_date_range": "Chọn khoảng thời gian tùy chỉnh", "user": "Người dùng", diff --git a/i18n/yue_Hant.json b/i18n/yue_Hant.json index ab1ff60fef..e0cf403712 100644 --- a/i18n/yue_Hant.json +++ b/i18n/yue_Hant.json @@ -86,17 +86,18 @@ "export_config_as_json_description": "將目前嘅系統設定下載為 JSON 檔案", "external_libraries_page_description": "管理外部媒體庫嘅頁面", "face_detection": "人面偵測", - "face_detection_description": "用機器學習嚟搜尋相中嘅。", + "face_detection_description": "使用機器學習偵測項目中嘅臉孔。對於影片,只係會分析縮圖。「重新整理」會重新處理所有嘅項目;「重設」就會額外清除目前嘅臉孔資料;「加入排程」會將尚未處理嘅項目加入序列。完成「臉孔偵測」後,偵測到嘅臉孔將會加入「臉孔辨識」排程,並歸類到而家或者新嘅人物群組。", "failed_job_command": "執行{job}任務嘅{command}指令失敗", "force_delete_user_warning": "警告:呢個會立即刪除用戶同埋佢所有嘅檔案。呢個係無法撤銷嘅動作,而且刪除嘅檔案將冇辦法復原。", "image_format": "格式", "image_format_description": "WebP 格式相嘅檔案會比 JPEG 細,但係編碼嘅速度會慢啲。", "image_fullsize_description": "已刪除元數據嘅全尺寸相,喺放大相嘅時候用嘅", "image_fullsize_enabled": "啟用全尺寸嘅圖片生成", - "image_fullsize_enabled_description": "為非網頁友善格式生成大尺寸圖片。啟用", + "image_fullsize_enabled_description": "為非網頁友善格式產生大尺寸嘅相。啟用「偏好內嵌預覽」嘅時候,系統將會直接用內嵌嘅預覽而唔進行轉碼。呢個設定唔會影響 JPEG 等網頁友善格式。", "image_fullsize_quality_description": "由 1 到 100,生成全尺寸圖片嘅質素。數值越高畫質越好,但係檔案會更加大。", "image_fullsize_title": "全尺寸圖片設定", "image_prefer_embedded_preview": "偏向嵌入預覽", + "image_prefer_embedded_preview_setting_description": "喺可用嘅時候將 RAW 相片中的內嵌預覽作為影像處理嘅輸入來源。雖然呢個設定可以令到部分相片嘅色彩更加準確,但預覽品質取決於相機,且影像可能會出現較多壓縮瑕疵。", "image_prefer_wide_gamut": "傾向廣色域", "image_preview_description": "中等尺寸嘅圖片,用嚟檢視單一影像同埋機器學習", "image_preview_title": "預覽設定", diff --git a/i18n/zh_Hans.json b/i18n/zh_Hans.json index 58e41ffe00..2b1374f3e6 100644 --- a/i18n/zh_Hans.json +++ b/i18n/zh_Hans.json @@ -5,7 +5,7 @@ "acknowledge": "已知悉", "action": "操作", "action_common_update": "更新", - "action_description": "对筛选出的资产执行的一组操作", + "action_description": "对筛选出的照片/视频执行的一组操作", "actions": "操作", "active": "进行中", "active_count": "活动: {count}", @@ -18,7 +18,7 @@ "add_a_title": "添加标题", "add_action": "添加操作", "add_action_description": "点击以添加要执行的操作", - "add_assets": "添加资产", + "add_assets": "添加项目", "add_birthday": "添加生日", "add_endpoint": "添加端点", "add_exclusion_pattern": "添加排除规则", @@ -34,7 +34,7 @@ "add_to_album": "添加到相册", "add_to_album_bottom_sheet_added": "已添加至 {album}", "add_to_album_bottom_sheet_already_exists": "已在 {album} 中", - "add_to_album_bottom_sheet_some_local_assets": "部分本地资产无法添加到相册", + "add_to_album_bottom_sheet_some_local_assets": "部分本地资产无法添加至相册", "add_to_album_toggle": "切换 {album} 的选中状态", "add_to_albums": "添加到相册", "add_to_albums_count": "添加到相册 ({count})", @@ -49,9 +49,9 @@ "admin": { "add_exclusion_pattern_description": "添加排除模式(支持  * ,  ** ,  ?  通配符)。例如:忽略 \"Raw\" 目录请用  \"**/Raw/**\" ;忽略 \".tif\" 文件请用  \"**/*.tif\" ;忽略绝对路径请用  \"/path/to/ignore/**\" 。", "admin_user": "管理员用户", - "asset_offline_description": "未找到该外部资产库文件,已将其移至回收站。如果文件是在库内被移动,请在时间线中查找对应的新资产。如需恢复此资产,请确保 Immich 可访问下方的文件路径,并重新扫描该资产库。", + "asset_offline_description": "未找到该外部资源库文件,已将其移至回收站。如果文件是在资源库内被移动,请在时间线中查找对应的新文件。如需恢复此文件,请确保 Immich 可访问下方的文件路径,并重新扫描该资源库。", "authentication_settings": "认证设置", - "authentication_settings_description": "管理密码、OAuth 和其它认证设置", + "authentication_settings_description": "管理密码、OAuth 和其他认证设置", "authentication_settings_disable_all": "您确定要禁用所有登录方式吗?登录功能将完全失效。", "authentication_settings_reenable": "如需重新启用,请使用 服务器命令。", "background_task_job": "后台任务", @@ -61,40 +61,40 @@ "backup_onboarding_1_description": "异地备份,例如存储在云端或另一个物理位置。", "backup_onboarding_2_description": "本地多设备副本。即在不同设备上保存主文件及其本地备份。", "backup_onboarding_3_description": "数据的总副本数,包含原始文件。例如:1 份异地备份和 2 份本地副本。", - "backup_onboarding_description": "建议采用 3-2-1 备份策略 来保护您的数据。你应该保留已上传的照片/视频以及 Immich 数据库的副本,以实现全面的备份解决方案。", + "backup_onboarding_description": "建议采用 3-2-1 备份策略 来保护你的数据。为了实现全面的备份方案,你应该同时保存已上传的照片/视频副本以及 Immich 的数据库。", "backup_onboarding_footer": "有关备份 Immich 的更多信息,请参阅 文档。", - "backup_onboarding_parts_title": "3-2-1 备份策略包括:", + "backup_onboarding_parts_title": "3-2-1备份原则包括:", "backup_onboarding_title": "备份", "backup_settings": "数据库备份设置", "backup_settings_description": "管理数据库备份设置。", "cleared_jobs": "已清除 {job} 的任务", "config_set_by_file": "当前配置由配置文件设定", - "confirm_delete_library": "确定要删除资产库 \"{library}\" 吗?", - "confirm_delete_library_assets": "确定要删除此资产库吗?此操作将从 Immich 中删除 {count, plural, one {# 个关联资产} other {全部 # 个关联资产}},且无法撤销。注意:文件仍将保留在磁盘上。", - "confirm_email_below": "为确认操作,请在下方输入 \"{email}\"", + "confirm_delete_library": "确定要删除资源库 \"{library}\" 吗?", + "confirm_delete_library_assets": "确定要删除此资源库吗?此操作将从 Immich 中删除 {count, plural, one {# 个关联项目} other {共 # 个关联项目}},且无法撤销。注意:文件仍将保留在磁盘上。", + "confirm_email_below": "为确认操作,请在下方输入“{email}”", "confirm_reprocess_all_faces": "确定要重新处理所有人脸吗?此操作将清除已命名的人物。", "confirm_user_password_reset": "确定要重置 {user} 的密码吗?", "confirm_user_pin_code_reset": "确定要重置 {user} 的 PIN 码吗?", "copy_config_to_clipboard_description": "将当前系统配置作为 JSON 对象复制到剪贴板", "create_job": "创建任务", - "cron_expression": "Cron 表达式", - "cron_expression_description": "使用 Cron 格式设置扫描间隔。更多信息请参考 Crontab Guru 等网站", - "cron_expression_presets": "Cron 表达式预设", + "cron_expression": "Cron表达式", + "cron_expression_description": "使用Cron格式设置扫描间隔。更多信息请参考 Crontab Guru 等网站", + "cron_expression_presets": "Cron表达式预设", "disable_login": "禁用登录", "duplicate_detection_job_description": "运行机器学习来检测相似图像,此功能依赖于智能搜索", - "exclusion_pattern_description": "排除规则允许您在扫描资产库时忽略特定的文件和文件夹。如果您有某些包含不希望导入的文件(例如 RAW 格式文件)的文件夹,此功能将非常有用。", + "exclusion_pattern_description": "排除规则允许您在扫描资源库时忽略特定的文件和文件夹。如果您有某些包含不希望导入的文件(例如 RAW 格式文件)的文件夹,此功能将非常有用。", "export_config_as_json_description": "将当前系统配置下载为 JSON 文件", - "external_libraries_page_description": "管理外部资产库", + "external_libraries_page_description": "管理外部资源库", "face_detection": "人脸检测", "face_detection_description": "使用机器学习检测影像中的人脸,对于视频仅处理其缩略图。“刷新”会重新处理所有影像;“重置”会清除当前所有人脸数据;“缺失”则仅将未曾处理过的影像加入队列。当“人脸检测”完成后,系统会将新检测到的人脸放入“人脸识别”队列,以将其归类到现有或新建的人物分组中。", "facial_recognition_job_description": "将检测到的人脸归类为不同的人物,此步骤需在“人脸检测”完成后运行。“重置”会(重新)聚类所有人脸。“缺失”则将尚未确定是谁的人脸加入归类队列。", "failed_job_command": "命令 {command} 在执行任务 {job} 时失败", - "force_delete_user_warning": "警告:此操作将立即删除该用户及其所有资产。此操作不可撤销,且文件无法恢复。", + "force_delete_user_warning": "警告:此操作将立即删除该用户及其所有文件。此操作不可撤销,且文件无法恢复。", "image_format": "格式", - "image_format_description": "WebP 格式的文件体积比 JPEG 更小,但编码速度较慢。", + "image_format_description": "WebP格式的文件体积比JPEG更小,但编码速度较慢。", "image_fullsize_description": "已剥离元数据的全尺寸图像,放大查看时使用", "image_fullsize_enabled": "启用全尺寸图像生成", - "image_fullsize_enabled_description": "为非网页友好格式生成全尺寸图像。启用“优先使用嵌入式预览”后,将直接使用嵌入式预览而无需转换。此设置不影响 JPEG 等网页友好格式。", + "image_fullsize_enabled_description": "为非网页友好格式生成全尺寸图像。启用“优先使用嵌入式预览”后,将直接使用嵌入式预览而无需转换。此设置不影响JPEG等网页友好格式。", "image_fullsize_quality_description": "全尺寸图像质量(1-100)。数值越高画质越好,但生成的文件也越大。", "image_fullsize_title": "全尺寸图像设置", "image_prefer_embedded_preview": "优先使用嵌入式预览", @@ -115,29 +115,29 @@ "image_thumbnail_quality_description": "缩略图质量(1-100)。数值越高画质越好,但生成的文件越大,且可能降低应用响应速度。", "image_thumbnail_title": "缩略图设置", "import_config_from_json_description": "通过上传 JSON 配置文件导入系统配置", - "job_concurrency": "{job} 并发数", + "job_concurrency": "{job}并发数", "job_created": "任务已创建", "job_not_concurrency_safe": "该任务不支持并发操作。", "job_settings": "任务设置", "job_settings_description": "管理任务并发数", - "jobs_delayed": "{jobCount, plural, other {# 个延迟}}", + "jobs_delayed": "{jobCount, plural, other {#个延迟}}", "jobs_failed": "{jobCount, plural, other {# 个失败}}", "jobs_over_time": "任务动态", - "library_created": "已创建资产库:{library}", - "library_deleted": "资产库已删除", - "library_details": "资产库详情", + "library_created": "已创建资源库:{library}", + "library_deleted": "资源库已删除", + "library_details": "资源库详情", "library_folder_description": "指定一个导入文件夹。系统将扫描该文件夹及其所有子文件夹中的图片和视频。", "library_remove_exclusion_pattern_prompt": "确定要移除此排除规则吗?", "library_remove_folder_prompt": "确定要移除此导入文件夹吗?", "library_scanning": "定期扫描", "library_scanning_description": "配置定期扫描", "library_scanning_enable_description": "开启定期扫描", - "library_settings": "外部资产库", - "library_settings_description": "管理外部资产库设置", - "library_tasks_description": "扫描外部资产库以查找新增和变更的文件", - "library_updated": "资产库已更新", - "library_watching_enable_description": "监控外部资产库的文件变更", - "library_watching_settings": "资产库监控 [实验性功能]", + "library_settings": "外部资源库", + "library_settings_description": "管理外部资源库设置", + "library_tasks_description": "扫描外部资源库以查找新增和变更的文件", + "library_updated": "资源库已更新", + "library_watching_enable_description": "监控外部资源库的文件变更", + "library_watching_settings": "资源库监控 [实验性功能]", "library_watching_settings_description": "自动监控文件变更", "logging_enable_description": "启用日志记录", "logging_level_description": "启用后,所采用的日志级别。", @@ -149,11 +149,11 @@ "machine_learning_availability_checks_interval_description": "两次可用性检查之间的时间间隔(毫秒)", "machine_learning_availability_checks_timeout": "请求超时时间", "machine_learning_availability_checks_timeout_description": "可用性检查的请求超时时间(毫秒)", - "machine_learning_clip_model": "CLIP 模型", + "machine_learning_clip_model": "CLIP模型", "machine_learning_clip_model_description": "在 此处 列出的 CLIP 模型名称。请注意,更改模型后,必须重新运行所有图片的“智能搜索”任务。", "machine_learning_duplicate_detection": "重复项检测", "machine_learning_duplicate_detection_enabled": "启用重复项检测", - "machine_learning_duplicate_detection_enabled_description": "若关闭此功能,完全相同的资产仍会被去重处理。", + "machine_learning_duplicate_detection_enabled_description": "若关闭此功能,完全相同的文件仍会被去重处理。", "machine_learning_duplicate_detection_setting_description": "利用 CLIP 嵌入向量识别潜在的重复项", "machine_learning_enabled": "启用机器学习", "machine_learning_enabled_description": "若关闭此处总开关,所有机器学习相关特性将全部停用,下方具体设置无效。", @@ -181,12 +181,12 @@ "machine_learning_ocr_min_detection_score_description": "文本检测的最低置信度分数(0-1)。数值越低,检测到的文本越多,但可能出现误判。", "machine_learning_ocr_min_recognition_score": "最低识别阈值", "machine_learning_ocr_min_score_recognition_description": "已检测文本的最低置信度分数(0-1)。数值越低,识别出的文本越多,但可能出现误判。", - "machine_learning_ocr_model": "OCR 模型", + "machine_learning_ocr_model": "OCR模型", "machine_learning_ocr_model_description": "服务器端模型比移动端模型更精准,但处理耗时更长且更占用内存。", "machine_learning_settings": "机器学习设置", "machine_learning_settings_description": "管理机器学习功能及相关设置", "machine_learning_smart_search": "智能搜索", - "machine_learning_smart_search_description": "使用 CLIP 嵌入向量进行语义化图片搜索", + "machine_learning_smart_search_description": "使用CLIP嵌入向量进行语义化图片搜索", "machine_learning_smart_search_enabled": "启用智能搜索", "machine_learning_smart_search_enabled_description": "若禁用,图片将不会被编码以用于智能搜索。", "machine_learning_url_description": "机器学习服务器的 URL。若提供多个 URL,系统将按从前往后的顺序逐个尝试连接,直至有服务器成功响应为止。未能响应的服务器将被暂时忽略,直至其恢复在线。", @@ -194,7 +194,7 @@ "maintenance_delete_backup_description": "此文件将被永久删除。", "maintenance_delete_error": "删除备份失败。", "maintenance_restore_backup": "恢复备份", - "maintenance_restore_backup_description": "Immich 数据将被清除,并从选定的备份中恢复。在继续之前,将先创建一个当前数据的备份。", + "maintenance_restore_backup_description": "Immich数据将被清除,并从选定的备份中恢复。在继续之前,将先创建一个当前数据的备份。", "maintenance_restore_backup_different_version": "此备份是由不同版本的 Immich 创建的!", "maintenance_restore_backup_unknown_version": "无法确定备份版本。", "maintenance_restore_database_backup": "恢复数据库备份", @@ -220,13 +220,13 @@ "map_reverse_geocoding_settings": "逆地理编码设置", "map_settings": "地图", "map_settings_description": "管理地图设置", - "map_style_description": "style.json 地图主题的 URL", + "map_style_description": "style.json地图主题的URL", "memory_cleanup_job": "清理回忆数据", "memory_generate_job": "生成回忆", "metadata_extraction_job": "提取元数据", - "metadata_extraction_job_description": "从每个资产中提取元数据信息,例如 GPS、人脸和分辨率", + "metadata_extraction_job_description": "从每个文件中提取元数据信息,例如GPS、人脸和分辨率", "metadata_faces_import_setting": "启用人脸导入", - "metadata_faces_import_setting_description": "从图片 EXIF 数据和附带文件中导入人脸信息", + "metadata_faces_import_setting_description": "从图片EXIF数据和附带文件中导入人脸信息", "metadata_settings": "元数据设置", "metadata_settings_description": "管理元数据设置", "migration_job": "迁移", @@ -273,7 +273,7 @@ "oauth_auto_register_description": "用户通过 OAuth 登录后,自动为其注册新账户", "oauth_button_text": "按钮文字", "oauth_client_secret_description": "机密客户端必填,或公共客户端若不支持 PKCE(代码交换证明密钥)时必填。", - "oauth_enable_description": "使用 OAuth 登录", + "oauth_enable_description": "使用OAuth登录", "oauth_mobile_redirect_uri": "移动端重定向 URI", "oauth_mobile_redirect_uri_override": "移动端重定向 URI 覆盖", "oauth_mobile_redirect_uri_override_description": "当 OAuth 提供商不允许使用移动端 URI(例如 “{callback}”)时启用", @@ -307,13 +307,13 @@ "require_password_change_on_login": "强制用户首次登录时修改密码", "reset_settings_to_default": "将设置重置为默认值", "reset_settings_to_recent_saved": "将设置重置为上次保存的值", - "scanning_library": "正在扫描资料库", + "scanning_library": "正在扫描资源库", "search_jobs": "搜索任务…", "send_welcome_email": "发送欢迎邮件", "server_external_domain_settings": "外部域名", "server_external_domain_settings_description": "公开分享链接的域名,需包含 http(s)://", "server_public_users": "用户公开", - "server_public_users_description": "在将用户添加到共享相册时,所有用户(姓名和邮箱)都会被列出。若关闭此功能,用户列表将仅对管理员可见。", + "server_public_users_description": "在将用户添加至共享相册时,会列出所有用户(包括姓名和邮箱)。若禁用此选项,则仅管理员可见用户列表。", "server_settings": "服务器设置", "server_settings_description": "管理服务器设置", "server_stats_page_description": "管理服务器统计页面", @@ -323,21 +323,21 @@ "sidecar_job": "附属元数据", "sidecar_job_description": "从文件系统中发现或同步附属元数据", "slideshow_duration_description": "每张图片显示的秒数", - "smart_search_job_description": "对资产运行机器学习以支持智能搜索", - "storage_template_date_time_description": "资产的创建时间戳用于日期时间信息", + "smart_search_job_description": "对照片/视频运行机器学习以支持智能搜索", + "storage_template_date_time_description": "文件的创建时间戳将用于日期时间信息", "storage_template_date_time_sample": "示例时间:{date}", "storage_template_enable_description": "启用存储模板引擎", "storage_template_hash_verification_enabled": "启用哈希校验", "storage_template_hash_verification_enabled_description": "开启哈希校验功能。若不清楚关闭的后果,请勿关闭", "storage_template_migration": "存储模板迁移", - "storage_template_migration_description": "将当前 {template} 应用于已上传的资产", - "storage_template_migration_info": "存储模板会将所有文件扩展名转换为小写。模板更改仅对新上传的资产生效。若要将模板回溯应用于已上传的资产,请运行 {job}。", + "storage_template_migration_description": "将当前 {template} 应用于已上传的文件", + "storage_template_migration_info": "存储模板会将所有文件扩展名转换为小写。模板更改仅对新上传的文件生效。若要将模板回溯应用于已上传的文件,请运行 {job}。", "storage_template_migration_job": "存储模板迁移任务", "storage_template_more_details": "有关此功能的更多详细信息,请参阅 存储模板 及其 含义", "storage_template_onboarding_description_v2": "启用后,此功能将根据用户定义的模板自动整理文件。更多信息,请参阅 文档。", "storage_template_path_length": "近似路径长度限制:{length, number}/{limit, number}", "storage_template_settings": "存储模板", - "storage_template_settings_description": "管理上传资产文件夹结构和文件名", + "storage_template_settings_description": "管理存放已上传照片/视频的文件夹结构和文件名", "storage_template_user_label": "{label}为该用户的存储标签", "system_settings": "系统设置", "tag_cleanup_job": "标签清理", @@ -351,16 +351,16 @@ "template_settings": "通知模板", "template_settings_description": "管理通知的自定义模板", "theme_custom_css_settings": "自定义 CSS", - "theme_custom_css_settings_description": "CSS 允许自定义 Immich 界面设计。", + "theme_custom_css_settings_description": "使用CSS自定义Immich界面设计。", "theme_settings": "主题设置", "theme_settings_description": "自定义 Immich Web 界面", "thumbnail_generation_job": "生成缩略图", - "thumbnail_generation_job_description": "为每个资产生成不同尺寸的缩略图,并为每个人物生成缩略图", + "thumbnail_generation_job_description": "为每个照片/视频生成不同尺寸的缩略图,并为每个人物生成缩略图", "transcoding_acceleration_api": "硬件加速 API", "transcoding_acceleration_api_description": "用于与设备交互以加速转码的 API。该设置采用“尽力而为”策略:若硬件加速失败,系统将自动回退到软件转码。VP9 编码的支持情况取决于您的硬件配置。", - "transcoding_acceleration_nvenc": "NVENC(需要 NVIDIA 显卡)", - "transcoding_acceleration_qsv": "Quick Sync(需要 Intel 7代及以上的 CPU)", - "transcoding_acceleration_rkmpp": "RKMPP(仅适用于 Rockchip SOCs)", + "transcoding_acceleration_nvenc": "NVENC(需要NVIDIA显卡)", + "transcoding_acceleration_qsv": "Quick Sync(需要Intel 7代及以上的CPU)", + "transcoding_acceleration_rkmpp": "RKMPP(仅适用于Rockchip SOCs)", "transcoding_acceleration_vaapi": "视频加速 API", "transcoding_accepted_audio_codecs": "支持的音频编码格式", "transcoding_accepted_audio_codecs_description": "选择无需转码的音频编码格式。仅在特定的转码策略下生效。", @@ -370,11 +370,11 @@ "transcoding_accepted_video_codecs_description": "选择无需转码的视频编码格式。仅在特定的转码策略下生效。", "transcoding_advanced_options_description": "大多数用户不需要更改的选项", "transcoding_audio_codec": "音频编码格式", - "transcoding_audio_codec_description": "Opus 是音质最高的选项,但在老旧设备或软件上的兼容性较差。", + "transcoding_audio_codec_description": "Opus是音质最高的选项,但在老旧设备或软件上的兼容性较差。", "transcoding_bitrate_description": "视频码率高于最大限制,或格式不在接受列表中", "transcoding_codecs_learn_more": "若要了解此处使用的术语详情,请查阅 FFmpeg 文档中的 H.264 编码HEVC 编码VP9 编码。", "transcoding_constant_quality_mode": "恒定质量模式", - "transcoding_constant_quality_mode_description": "ICQ 比 CQP 效果更好,但部分硬件加速设备不支持此模式。启用该选项后,在基于质量的编码中将优先使用指定的模式。由于 NVENC(NVIDIA 显卡编码器)不支持 ICQ,因此该设置对其无效。", + "transcoding_constant_quality_mode_description": "ICQ比CQP效果更好,但部分硬件加速设备不支持此模式。启用该选项后,在基于质量的编码中将优先使用指定的模式。由于NVENC(NVIDIA显卡编码器)不支持ICQ,因此该设置对其无效。", "transcoding_constant_rate_factor": "恒定码率系数(-crf)", "transcoding_constant_rate_factor_description": "视频质量等级。典型值为:H.264 使用 23,HEVC 使用 28,VP9 使用 31,AV1 使用 35。数值越低质量越好,但生成的文件也越大。", "transcoding_disabled_description": "不转码任何视频,可能会导致部分客户端无法播放", @@ -394,7 +394,7 @@ "transcoding_policy": "转码策略", "transcoding_policy_description": "设置视频转码时机", "transcoding_preferred_hardware_device": "首选硬件设备", - "transcoding_preferred_hardware_device_description": "仅适用于 VAAPI 和 QSV。设置用于硬件转码的 DRI 设备节点。", + "transcoding_preferred_hardware_device_description": "仅适用于VAAPI和QSV。设置用于硬件转码的DRI设备节点。", "transcoding_preset_preset": "预设(-preset)", "transcoding_preset_preset_description": "压缩速度。预设速度越慢,生成的文件越小;在设定特定码率时,还能提升画质。VP9 编码器会忽略(不支持)高于“faster”速度的选项。", "transcoding_reference_frames": "参考帧", @@ -405,7 +405,7 @@ "transcoding_target_resolution": "目标分辨率", "transcoding_target_resolution_description": "更高的分辨率虽然能保留更多画面细节,但会延长编码时间、增大文件体积,并可能导致应用响应变慢。", "transcoding_temporal_aq": "时间域自适应量化", - "transcoding_temporal_aq_description": "仅适用于 NVENC。时间域自适应量化可提升高细节、低运动场景的画质。可能与较旧的设备不兼容。", + "transcoding_temporal_aq_description": "仅适用于NVENC。时间域自适应量化可提升高细节、低运动场景的画质。可能与较旧的设备不兼容。", "transcoding_threads": "线程数", "transcoding_threads_description": "数值越高,编码速度越快,但在运行时会减少服务器处理其他任务的余量。该数值不应超过 CPU 核心数。设为 0 可最大化资源利用率。", "transcoding_tone_mapping": "色调映射", @@ -415,7 +415,7 @@ "transcoding_two_pass_encoding": "二次编码", "transcoding_two_pass_encoding_setting_description": "采用两次编码模式以生成质量更优的视频。当开启最大码率限制时(H.264 和 HEVC 编码格式必须开启此选项才能生效),该模式会依据最大码率设定一个码率范围,并忽略 CRF 设置。对于 VP9 编码,若关闭最大码率限制,则可以使用 CRF 设置。", "transcoding_video_codec": "视频编码格式", - "transcoding_video_codec_description": "VP9 编码效率高,且在网页端兼容性好,但转码耗时较长。HEVC(H.265)性能与之相似,但在网页端的兼容性较差。H.264 兼容性极广且转码速度快,但生成的文件体积要大得多。AV1 是效率最高的编码格式,但在旧设备上缺乏支持。", + "transcoding_video_codec_description": "VP9编码效率高,且在网页端兼容性好,但转码耗时较长。HEVC(H.265)性能与之相似,但在网页端的兼容性较差。H.264兼容性极广且转码速度快,但生成的文件体积要大得多。AV1是效率最高的编码格式,但在旧设备上缺乏支持。", "trash_enabled_description": "启用回收站功能", "trash_number_of_days": "保留天数", "trash_number_of_days_description": "文件在回收站中保留多少天后被永久删除", @@ -425,11 +425,11 @@ "unlink_all_oauth_accounts_description": "在迁移到新服务商之前,请记得解除所有 OAuth 账户的关联。", "unlink_all_oauth_accounts_prompt": "您确定要解除所有 OAuth 账户的关联吗?此操作将重置每个用户的身份认证 ID,且无法撤销。", "user_cleanup_job": "用户清理", - "user_delete_delay": "{user}的账户及资产将在{delay, plural, one {#天} other {#天}}后被安排永久删除。", + "user_delete_delay": "{user}的账户及资产将在{delay, plural, one {#天} other {#天}}后被永久删除。", "user_delete_delay_settings": "延期删除", - "user_delete_delay_settings_description": "移除后多少天,永久删除用户的账户及资产。用户删除任务将在午夜运行,以检查是否有待删除的用户。此设置的更改将在下次任务执行时生效。", - "user_delete_immediately": "{user}的账户及资产将被立即安排永久删除。", - "user_delete_immediately_checkbox": "将用户及其资产加入立即删除队列", + "user_delete_delay_settings_description": "移除后永久删除用户的账户及文件的天数。用户删除任务将在深夜检查待删除的用户。此设置的更改将在下次任务执行时生效。", + "user_delete_immediately": "{user}的账户及资产将被立即永久删除。", + "user_delete_immediately_checkbox": "将用户及其文件加入立即删除队列", "user_details": "用户详情", "user_management": "用户管理", "user_password_has_been_reset": "用户的密码已重置:", @@ -454,10 +454,10 @@ "advanced_settings_clear_image_cache": "清空图像缓存", "advanced_settings_clear_image_cache_error": "无法清空图像缓存", "advanced_settings_clear_image_cache_success": "成功清理 {size}", - "advanced_settings_enable_alternate_media_filter_subtitle": "使用此选项可根据其他条件筛选同步期间的媒体。仅在应用无法检测到所有相册时尝试此选项。", + "advanced_settings_enable_alternate_media_filter_subtitle": "使用此选项可根据替代标准在同步期间过滤媒体。仅当应用无法检测所有相册时,才尝试使用此选项。", "advanced_settings_enable_alternate_media_filter_title": "[实验性] 使用备用设备相册筛选方式", "advanced_settings_log_level_title": "日志等级: {level}", - "advanced_settings_prefer_remote_subtitle": "部分设备读取本地资源缩略图的速度极慢。开启此设置可改为加载远程图片。", + "advanced_settings_prefer_remote_subtitle": "部分设备读取本地文件缩略图的速度极慢。开启此设置可改为加载远程图片。", "advanced_settings_prefer_remote_title": "优先使用远程图片", "advanced_settings_proxy_headers_subtitle": "定义 Immich 每次网络请求应附带的代理头信息", "advanced_settings_proxy_headers_title": "自定义代理头信息 [实验性]", @@ -474,8 +474,8 @@ "age_year_months": "1岁{months, plural, one {#个月} other {#个月}}", "age_years": "{years, plural, other {#岁}}", "album": "相册", - "album_added": "相册添加成功", - "album_added_notification_setting_description": "当您被添加到共享相册时,接收邮箱通知", + "album_added": "相册已添加", + "album_added_notification_setting_description": "当您被添加到共享相册时,通过邮件通知", "album_cover_updated": "封面已更新", "album_delete_confirmation": "确定要删除相册 “{album}” 吗?", "album_delete_confirmation_description": "如果此相册已被共享,其他用户也将无法再访问它。", @@ -491,10 +491,10 @@ "album_remove_user_confirmation": "确定要移除 “{user}” 吗?", "album_search_not_found": "未找到与搜索条件匹配的相册", "album_selected": "相册已选中", - "album_share_no_users": "看起来您已将此相册共享给所有用户,或者您没有可共享的用户。", + "album_share_no_users": "您已将此相册共享给所有用户,或没有可共享的用户。", "album_summary": "相册概览", "album_updated": "相册已更新", - "album_updated_setting_description": "当共享相册有新内容时,接收邮件通知", + "album_updated_setting_description": "当共享相册有新内容时,通过邮件通知", "album_upload_assets": "从您的电脑上传文件并添加到相册", "album_user_left": "已退出 “{album}”", "album_user_removed": "已移除 “{user}”", @@ -508,12 +508,12 @@ "album_viewer_page_share_add_users": "邀请他人", "album_with_link_access": "允许任何拥有该链接的人查看此相册中的照片和人物。", "albums": "相册", - "albums_count": "{count, plural, one {{count, number} 个相册} other {{count, number} 个相册}}", + "albums_count": "{count, plural, one {{count, number}个相册} other {{count, number}个相册}}", "albums_default_sort_order": "默认相册排序方式", - "albums_default_sort_order_description": "创建新相册时,影像的初始排序方式。", + "albums_default_sort_order_description": "创建新相册时,资源的初始排序方式。", "albums_feature_description": "可与其他用户共享的照片/内容合集。", "albums_on_device_count": "设备上的相册({count} 个)", - "albums_selected": "{count, plural, one {# 个相册已选择} other {# 个相册已选择}}", + "albums_selected": "{count, plural, one {已选中#个相册} other {已选中#个相册}}", "all": "全部", "all_albums": "所有相册", "all_people": "全部人物", @@ -529,10 +529,10 @@ "always_keep_photos_hint": "开启“释放空间”后,仍会保留所有照片在本设备上。", "always_keep_videos_hint": "开启“释放空间”后,仍会保留所有视频在本设备上。", "anti_clockwise": "逆时针", - "api_key": "API 密钥", + "api_key": "API密钥", "api_key_description": "该应用密钥只会显示一次。请确保在关闭窗口前复制下来。", - "api_key_empty": "API 密钥名称不可为空", - "api_keys": "API 密钥", + "api_key_empty": "API密钥名称不可为空", + "api_keys": "API密钥", "app_architecture_variant": "变体(架构)", "app_bar_signout_dialog_content": "您确定要退出吗?", "app_bar_signout_dialog_ok": "是", @@ -551,64 +551,64 @@ "archive_size": "归档大小", "archive_size_description": "配置下载的归档大小(GiB)", "archived": "已归档", - "archived_count": "{count, plural, other {已归档 # 项}}", + "archived_count": "{count, plural, other {已归档#项}}", "are_these_the_same_person": "这是同一个人吗?", "are_you_sure_to_do_this": "确定要执行此操作?", "array_field_not_fully_supported": "数组字段需要手动进行 JSON 编辑", - "asset_action_delete_err_read_only": "无法删除只读资源,已跳过", - "asset_action_share_err_offline": "无法获取离线资源,已跳过", + "asset_action_delete_err_read_only": "无法删除只读项目,已跳过", + "asset_action_share_err_offline": "无法获取离线项目,已跳过", "asset_added_to_album": "已添加至相册", "asset_adding_to_album": "正在添加至相册…", - "asset_created": "资源已创建", - "asset_description_updated": "资源描述已更新", - "asset_filename_is_offline": "资源“{filename}”已离线", - "asset_has_unassigned_faces": "资源包含未分配的人脸", + "asset_created": "项目已创建", + "asset_description_updated": "项目描述已更新", + "asset_filename_is_offline": "项目{filename}已离线", + "asset_has_unassigned_faces": "项目包含未分配的人脸", "asset_hashing": "正在计算哈希值…", "asset_list_group_by_sub_title": "分组依据", "asset_list_layout_settings_dynamic_layout_title": "动态布局", "asset_list_layout_settings_group_automatically": "自动", - "asset_list_layout_settings_group_by": "资源分组依据", + "asset_list_layout_settings_group_by": "照片/视频分组依据", "asset_list_layout_settings_group_by_month_day": "月份 + 日期", "asset_list_layout_sub_title": "布局", "asset_list_settings_subtitle": "照片网格布局设置", "asset_list_settings_title": "照片网格", - "asset_not_found_on_device_android": "设备上未找到该资源", - "asset_not_found_on_device_ios": "设备上未找到该资源。如果您使用了 iCloud,可能是由于 iCloud 中存储了错误的文件导致资源无法访问", - "asset_not_found_on_icloud": "iCloud 中未找到该资源。可能是由于 iCloud 中存储了错误的文件导致资源无法访问", - "asset_offline": "资源离线", - "asset_offline_description": "磁盘上未找到此外部资源。请联系您的 Immich 管理员寻求帮助。", - "asset_restored_successfully": "资源恢复成功", + "asset_not_found_on_device_android": "设备上未找到该照片/视频", + "asset_not_found_on_device_ios": "设备上未找到该照片/视频。如果您使用了 iCloud,可能是由于 iCloud 中存储了错误的文件导致资源无法访问", + "asset_not_found_on_icloud": "iCloud中未找到该照片/视频。可能是由于iCloud中存储了错误的文件导致资源无法访问", + "asset_offline": "项目离线", + "asset_offline_description": "磁盘上未找到此外部文件。请联系您的 Immich 管理员寻求帮助。", + "asset_restored_successfully": "文件恢复成功", "asset_skipped": "已跳过", "asset_skipped_in_trash": "在回收站中", - "asset_trashed": "资源已移至回收站", - "asset_troubleshoot": "资源诊断", + "asset_trashed": "文件已移至回收站", + "asset_troubleshoot": "文件诊断", "asset_uploaded": "已上传", "asset_uploading": "上传中…", "asset_viewer_settings_subtitle": "管理画廊查看器设置", - "asset_viewer_settings_title": "资源查看器", + "asset_viewer_settings_title": "文件查看器", "assets": "资源", - "assets_added_count": "已添加{count, plural, one {#个资源} other {#个资源}}", + "assets_added_count": "已添加{count, plural, one {#个文件} other {#个文件}}", "assets_added_to_album_count": "已向相册添加{count, plural, one {#个资源} other {#个资源}}", - "assets_added_to_albums_count": "已向 {albumTotal, plural, one {# 个相册} other {# 个相册}}添加 {assetTotal, plural, one {# 个资源} other {# 个资源}}", + "assets_added_to_albums_count": "已向 {albumTotal, plural, one {# 个相册} other {# 个相册}}添加 {assetTotal, plural, one {# 个资源} other {# 个医院}}", "assets_cannot_be_added_to_album_count": "无法向相册添加{count, plural, one {个资源} other {个资源}}", "assets_cannot_be_added_to_albums": "无法向任何一个相册添加 {count, plural, one {个资源} other {个资源}}", - "assets_count": "{count, plural, one {#个资源} other {#个资源}}", - "assets_deleted_permanently": "已永久删除 {count} 个资源", - "assets_deleted_permanently_from_server": "已永久移除 {count} 个资产", - "assets_downloaded_failed": "{count, plural, one {已下载#个文件 - {error} 个文件下载失败} other {已下载#个文件 - {error} 个文件下载失败}}", - "assets_downloaded_successfully": "{count, plural, one {已成功下载 # 个文件} other {已成功下载 # 个文件}}", - "assets_moved_to_trash_count": "已将{count, plural, one {#个资源} other {#个资源}}移动到回收站", - "assets_permanently_deleted_count": "已永久删除{count, plural, one {#个资源} other {#个资源}}", - "assets_removed_count": "已移除{count, plural, one {#个资源} other {#个资源}}", - "assets_removed_permanently_from_device": "已从您的设备中永久删除 {count} 个资源", - "assets_restore_confirmation": "您确定要恢复回收站中的所有资源吗?此操作无法撤销!请注意,任何离线资源无法通过此方式恢复。", - "assets_restored_count": "已恢复{count, plural, one {#个资源} other {#个资源}}", - "assets_restored_successfully": "已成功恢复{count}个资源", - "assets_trashed": "{count} 个资源移至回收站", - "assets_trashed_count": "已将{count, plural, one {#个资源} other {#个资源}}移至回收站", - "assets_trashed_from_server": "Immich 服务器上已移除 {count} 个资源", - "assets_were_part_of_album_count": "{count, plural, one {个资源} other {个资源}}已在该相册中", - "assets_were_part_of_albums_count": "{count, plural, one {个资源} other {个资源}} 已存在于这些相册中", + "assets_count": "{count, plural, one {#个项目} other {#个项目}}", + "assets_deleted_permanently": "已永久删除 {count} 个文件", + "assets_deleted_permanently_from_server": "已永久移除 {count} 个文件", + "assets_downloaded_failed": "{count, plural, one {已下载#个文件 - {error}个文件下载失败} other {已下载#个文件 - {error}个文件下载失败}}", + "assets_downloaded_successfully": "{count, plural, one {已成功下载#个文件} other {已成功下载#个文件}}", + "assets_moved_to_trash_count": "已将{count, plural, one {#个文件} other {#个文件}}移动到回收站", + "assets_permanently_deleted_count": "已永久删除{count, plural, one {#个文件} other {#个文件}}", + "assets_removed_count": "已移除{count, plural, one {#个文件} other {#个文件}}", + "assets_removed_permanently_from_device": "已从您的设备中永久删除{count}个文件", + "assets_restore_confirmation": "您确定要恢复回收站中的所有文件吗?此操作无法撤销!请注意,离线文件无法通过此方式恢复。", + "assets_restored_count": "已恢复{count, plural, one {#个文件} other {#个文件}}", + "assets_restored_successfully": "已成功恢复{count}个文件", + "assets_trashed": "{count}个文件移至回收站", + "assets_trashed_count": "已将{count, plural, one {#个文件} other {#个文件}}移至回收站", + "assets_trashed_from_server": "已从Immich服务器上移除{count}个文件", + "assets_were_part_of_album_count": "{count, plural, one {个医院} other {个资源}}已在该相册中", + "assets_were_part_of_albums_count": "{count, plural, one {个项目} other {个项目}}已存在于这些相簿中", "authorized_devices": "已授权设备", "automatic_endpoint_switching_subtitle": "在可用时通过指定的 Wi-Fi 进行本地连接,其他位置则使用替代网络连接", "automatic_endpoint_switching_title": "自动切换 URL", @@ -617,31 +617,31 @@ "back_close_deselect": "返回、关闭或取消选择", "background_backup_running_error": "后台备份正在运行中,无法启动手动备份", "background_location_permission": "后台定位权限", - "background_location_permission_content": "为了在后台运行时实现网络切换,Immich 必须始终拥有精确位置访问权限,以便应用能够读取 Wi-Fi 网络的名称", + "background_location_permission_content": "为了在后台运行时实现网络切换,Immich必须始终拥有精确位置访问权限,以便应用能够读取 Wi-Fi 网络的名称", "background_options": "后台选项", "backup": "备份", - "backup_album_selection_page_albums_device": "设备上的相册({count})", + "backup_album_selection_page_albums_device": "设备上的相簿({count})", "backup_album_selection_page_albums_tap": "单击包含,双击排除", - "backup_album_selection_page_assets_scatter": "资源文件可能分散在多个相册中。因此,在备份过程中,您可以选择包含或排除特定的相册。", - "backup_album_selection_page_select_albums": "选择相册", + "backup_album_selection_page_assets_scatter": "选择包含或排除特定的相簿。(因为文件可能分散在多个相簿中)", + "backup_album_selection_page_select_albums": "选择相簿", "backup_album_selection_page_selection_info": "选择信息", - "backup_album_selection_page_total_assets": "唯一资源总计", - "backup_albums_sync": "备份相册同步", + "backup_album_selection_page_total_assets": "选中的照片或视频总数", + "backup_albums_sync": "备份相簿同步", "backup_all": "全部", - "backup_background_service_backup_failed_message": "资源备份失败。正在重试…", - "backup_background_service_complete_notification": "资源备份完成", + "backup_background_service_backup_failed_message": "文件备份失败。正在重试…", + "backup_background_service_complete_notification": "文件备份完成", "backup_background_service_connection_failed_message": "无法连接到服务器。正在重试…", "backup_background_service_current_upload_notification": "正在上传 “{filename}”", - "backup_background_service_default_notification": "正在检查新资源…", + "backup_background_service_default_notification": "正在检查新文件…", "backup_background_service_error_title": "备份错误", - "backup_background_service_in_progress_notification": "正在备份您的资源…", + "backup_background_service_in_progress_notification": "正在备份您的文件…", "backup_background_service_upload_failure_notification": "“{filename}”上传失败", - "backup_controller_page_albums": "备份相册", + "backup_controller_page_albums": "备份相簿", "backup_controller_page_background_app_refresh_disabled_content": "在“设置”>“通用”>“后台 App 刷新”中启用此功能,以使用后台备份。", "backup_controller_page_background_app_refresh_disabled_title": "后台 App 刷新已关闭", "backup_controller_page_background_app_refresh_enable_button_text": "前往设置", "backup_controller_page_background_battery_info_link": "展示操作步骤", - "backup_controller_page_background_battery_info_message": "为获得最佳的后台备份体验,请在系统设置中禁用针对 Immich 的任何电池优化限制。\n\n由于该设置因设备而异,请查询您设备制造商的具体要求。", + "backup_controller_page_background_battery_info_message": "为获得最佳的后台备份体验,请在系统设置中禁用针对Immich的任何电池优化限制。\n\n由于该设置因设备而异,请查询您设备制造商的具体要求。", "backup_controller_page_background_battery_info_ok": "我知道了", "backup_controller_page_background_battery_info_title": "电池优化", "backup_controller_page_background_charging": "仅在充电时", @@ -652,7 +652,7 @@ "backup_controller_page_background_is_on": "后台自动备份已开启", "backup_controller_page_background_turn_off": "关闭后台服务", "backup_controller_page_background_turn_on": "开启后台服务", - "backup_controller_page_background_wifi": "仅在 Wi-Fi 下", + "backup_controller_page_background_wifi": "仅在Wi-Fi下", "backup_controller_page_backup": "备份", "backup_controller_page_backup_selected": "已选: ", "backup_controller_page_backup_sub": "已备份的照片和视频", @@ -661,7 +661,7 @@ "backup_controller_page_excluded": "已排除: ", "backup_controller_page_failed": "失败({count})", "backup_controller_page_filename": "文件名:{filename} [{size}]", - "backup_controller_page_id": "ID:{id}", + "backup_controller_page_id": "ID: {id}", "backup_controller_page_info": "备份信息", "backup_controller_page_none_selected": "暂未选择", "backup_controller_page_remainder": "剩余", @@ -671,14 +671,14 @@ "backup_controller_page_status_off": "未开启前台自动备份", "backup_controller_page_status_on": "前台自动备份已打开", "backup_controller_page_storage_format": "已用 {used}(共 {total})", - "backup_controller_page_to_backup": "待备份的相册", - "backup_controller_page_total_sub": "包含所选相册内全部唯一的照片和视频", + "backup_controller_page_to_backup": "待备份的相簿", + "backup_controller_page_total_sub": "包含所选相簿内全部唯一的照片和视频", "backup_controller_page_turn_off": "关闭前台备份", "backup_controller_page_turn_on": "开启前台备份", "backup_controller_page_uploading_file_info": "正在上传文件信息", - "backup_err_only_album": "无法删除唯一的相册", + "backup_err_only_album": "无法删除唯一的相簿", "backup_error_sync_failed": "同步失败。无法处理备份。", - "backup_info_card_assets": "资产", + "backup_info_card_assets": "照片和视频", "backup_manual_cancelled": "已取消", "backup_manual_in_progress": "上传正在进行中,请稍后再试", "backup_manual_success": "成功", @@ -707,10 +707,10 @@ "cache_settings_clear_cache_button_title": "清理应用缓存。在缓存重建期间,应用的运行速度会明显变慢。", "cache_settings_duplicated_assets_clear_button": "清除", "cache_settings_duplicated_assets_subtitle": "忽略列表中的媒体文件", - "cache_settings_duplicated_assets_title": "重复资产({count})", + "cache_settings_duplicated_assets_title": "重复文件({count})", "cache_settings_statistics_album": "图库缩略图", "cache_settings_statistics_full": "原图", - "cache_settings_statistics_shared": "共享相册缩略图", + "cache_settings_statistics_shared": "共享相簿缩略图", "cache_settings_statistics_thumbnail": "缩略图", "cache_settings_statistics_title": "缓存占用情况", "cache_settings_subtitle": "管理 Immich 手机端的缓存", @@ -752,25 +752,25 @@ "changed_visibility_successfully": "可见状态更新成功", "charging": "充电中", "charging_requirement_mobile_backup": "后台备份需要设备处于充电状态", - "check_corrupt_asset_backup": "检查资产备份是否损坏", + "check_corrupt_asset_backup": "检查文件备份是否损坏", "check_corrupt_asset_backup_button": "执行检查", - "check_corrupt_asset_backup_description": "仅在 Wi-Fi 环境下运行此检查,并确保所有资源均已备份。该过程可能需要几分钟时间。", + "check_corrupt_asset_backup_description": "仅在Wi-Fi环境下运行此检查,并确保所有文件均已备份。该过程可能需要几分钟时间。", "check_logs": "检查日志", "checksum": "校验和", "choose_matching_people_to_merge": "选择要合并的人物", "city": "城市", - "cleanup_confirm_description": "Immich 已找到 {count} 个安全备份至服务器的资源(创建于 {date} 之前)。是否从此设备移除本地副本?", + "cleanup_confirm_description": "Immich已找到{count}个安全备份至服务器的文件(创建于{date}之前)。是否从此设备移除本地副本?", "cleanup_confirm_prompt_title": "是否从此设备移除?", - "cleanup_deleted_assets": "已将 {count} 个资源移至设备回收站", + "cleanup_deleted_assets": "已将{count}个文件移至设备回收站", "cleanup_deleting": "正在移至回收站...", - "cleanup_found_assets": "已找到 {count} 个已备份的资源", - "cleanup_found_assets_with_size": "已找到 {count} 个已备份的资源 ({size})", - "cleanup_icloud_shared_albums_excluded": "iCloud 共享相册已排除在扫描范围之外", - "cleanup_no_assets_found": "未找到符合上述条件的资源。“释放空间”仅能移除已备份至服务器的文件", - "cleanup_preview_title": "待移除的资源 ({count})", - "cleanup_step3_description": "扫描符合日期及保留设置的已备份资源。", - "cleanup_step4_summary": "将从本机移除 {count} 个资源(创建于 {date} 之前)。照片仍可在 Immich 应用中访问。", - "cleanup_trash_hint": "为彻底释放存储空间,请打开系统相册应用并清空回收站", + "cleanup_found_assets": "已找到{count}个已备份的文件", + "cleanup_found_assets_with_size": "已找到{count}个已备份的文件({size})", + "cleanup_icloud_shared_albums_excluded": "iCloud共享相簿已排除在扫描范围之外", + "cleanup_no_assets_found": "未找到符合上述条件的文件。“释放空间”仅能移除已备份至服务器的文件", + "cleanup_preview_title": "待移除的照片/视频({count})", + "cleanup_step3_description": "扫描符合日期及保留设置的已备份照片/视频。", + "cleanup_step4_summary": "将从本地移除{count}个照片/视频(创建于 {date} 之前)。照片仍可在Immich App中访问。", + "cleanup_trash_hint": "为彻底释放存储空间,请打开系统照片App并清空回收站", "clear": "清空", "clear_all": "全部清除", "clear_all_recent_searches": "清除全部最近搜索记录", @@ -786,7 +786,7 @@ "client_cert_password_title": "证书密码", "client_cert_remove_msg": "客户端证书已移除", "client_cert_subtitle": "仅支持 PKCS12 格式 (.p12, .pfx)。登录后将无法导入或移除证书", - "client_cert_title": "SSL 客户端证书[实验性功能]", + "client_cert_title": "SSL客户端证书 [实验性功能]", "clockwise": "顺时针", "close": "关闭", "collapse": "收起", @@ -803,13 +803,13 @@ "comment_options": "更多", "comments_and_likes": "评论 & 点赞", "comments_are_disabled": "评论已关闭", - "common_create_new_album": "创建新相册", + "common_create_new_album": "创建新相簿", "completed": "已完成", "confirm": "确认", "confirm_admin_password": "确认管理员密码", "confirm_delete_face": "确定要从此文件中删除 {name} 的面部信息吗?", "confirm_delete_shared_link": "确定要删除此共享链接吗?", - "confirm_keep_this_delete_others": "堆栈中所有其他资源都将被删除,仅保留此资源。确定要继续吗?", + "confirm_keep_this_delete_others": "堆栈中除此项目外的所有其他项目都将被删除。确定要继续吗?", "confirm_new_pin_code": "确认新 PIN 码", "confirm_password": "确认密码", "confirm_tag_face": "是否将此人脸标记为 {name}?", @@ -819,8 +819,8 @@ "contain": "适应", "context": "以文搜图", "continue": "继续", - "control_bottom_app_bar_create_new_album": "新建相册", - "control_bottom_app_bar_delete_from_immich": "从 Immich 服务器中删除", + "control_bottom_app_bar_create_new_album": "新建相簿", + "control_bottom_app_bar_delete_from_immich": "从Immich服务器中删除", "control_bottom_app_bar_delete_from_local": "从设备中删除", "control_bottom_app_bar_edit_location": "编辑位置", "control_bottom_app_bar_edit_time": "编辑日期和时间", @@ -840,19 +840,19 @@ "cover": "填充", "covers": "封面", "create": "创建", - "create_album": "创建相册", + "create_album": "创建相簿", "create_album_page_untitled": "未命名", "create_api_key": "创建 API 密钥", "create_first_workflow": "创建首个工作流", - "create_library": "创建资料库", + "create_library": "创建资源库", "create_link": "创建链接", "create_link_to_share": "创建共享链接", "create_link_to_share_description": "允许任何拥有链接的人查看所选照片", "create_new": "新建", "create_new_person": "创建新人物", - "create_new_person_hint": "将所选资源分配给新人物", + "create_new_person_hint": "将所选照片/视频分配给新人物", "create_new_user": "新建用户", - "create_shared_album_page_share_add_assets": "添加资源", + "create_shared_album_page_share_add_assets": "添加照片/视频", "create_shared_album_page_share_select_photos": "选择照片", "create_shared_link": "创建共享链接", "create_tag": "创建标签", @@ -861,11 +861,12 @@ "create_workflow": "新建工作流", "created": "已创建", "created_at": "创建时间", - "creating_linked_albums": "正在创建相册链接…", + "creating_linked_albums": "正在创建相簿链接…", "crop": "裁剪", "crop_aspect_ratio_fixed": "固定比例", "crop_aspect_ratio_free": "自由比例", "crop_aspect_ratio_original": "原始比例", + "crop_aspect_ratio_square": "方形", "curated_object_page_title": "精选集", "current_device": "当前设备", "current_pin_code": "当前 PIN 码", @@ -880,7 +881,7 @@ "daily_title_text_date": "MMM dd (E)", "daily_title_text_date_year": "YYYY年M月d日 (E)", "dark": "深色", - "dark_theme": "切换深色主题", + "dark_theme": "切换到深色主题", "date": "日期", "date_after": "开始日期", "date_and_time": "日期与时间", @@ -891,14 +892,12 @@ "day": "日", "days": "天", "deduplicate_all": "删除所有重复项", - "deduplication_criteria_1": "图像大小(字节)", - "deduplication_criteria_2": "EXIF 数据计数", - "deduplication_info": "去重统计", - "deduplication_info_description": "为了自动预选素材并批量去除重复项,我们会参考以下信息:", + "default_locale": "默认语言", + "default_locale_description": "根据您的浏览器区域格式化日期和数字", "delete": "删除", "delete_action_confirmation_message": "您确定要删除此素材吗?此操作会将该素材移至服务器的回收站,并提示您是否将其在本地设备上删除", "delete_action_prompt": "已删除 {count} 项", - "delete_album": "删除相册", + "delete_album": "删除相簿", "delete_api_key_prompt": "您确定要删除此 API 密钥吗?", "delete_dialog_alert": "这些项目将从 Immich 服务器以及你的设备上被永久删除", "delete_dialog_alert_local": "这些项目将从你的设备上被永久移除,但依然会保留在 Immich 服务器上", @@ -909,14 +908,14 @@ "delete_duplicates_confirmation": "您确定要永久删除这些重复项吗?", "delete_face": "删除该人脸", "delete_key": "删除密钥", - "delete_library": "删除资料库", + "delete_library": "删除资源库", "delete_link": "删除链接", - "delete_local_action_prompt": "{count} 项已在本地删除", + "delete_local_action_prompt": "{count}项已在本地删除", "delete_local_dialog_ok_backed_up_only": "仅删除已备份的项目", "delete_local_dialog_ok_force": "强制删除", - "delete_others": "删除其它", + "delete_others": "删除其他", "delete_permanently": "永久删除", - "delete_permanently_action_prompt": "{count} 项已永久删除", + "delete_permanently_action_prompt": "{count}项已永久删除", "delete_shared_link": "删除共享链接", "delete_shared_link_dialog_title": "删除共享链接", "delete_tag": "删除标签", @@ -933,7 +932,7 @@ "disable": "禁用", "disabled": "禁用", "disallow_edits": "禁止编辑", - "discord": "Discord 社区", + "discord": "Discord", "discover": "发现", "discovered_devices": "已发现的设备", "dismiss_all_errors": "忽略所有错误", @@ -970,10 +969,10 @@ "downloading_media": "正在下载媒体文件", "drop_files_to_upload": "随意拖放文件以上传", "duplicates": "重复项", - "duplicates_description": "请逐一标记每组中的重复文件", + "duplicates_description": "请逐一标记每组中的重复文件。", "duration": "时长", "edit": "编辑", - "edit_album": "编辑相册", + "edit_album": "编辑相簿", "edit_avatar": "编辑头像", "edit_birthday": "编辑生日", "edit_date": "编辑日期", @@ -1007,7 +1006,7 @@ "editor_edits_applied_success": "编辑已成功应用", "editor_flip_horizontal": "水平翻转", "editor_flip_vertical": "垂直翻转", - "editor_handle_corner": "{corner, select, top_left {左上角} top_right {右上角} bottom_left {左下角} bottom_right {右下角} other {某个}} 角落的控制手柄", + "editor_handle_corner": "{corner, select, top_left {左上角} top_right {右上角} bottom_left {左下角} bottom_right {右下角} other {某个}}角落的控制手柄", "editor_handle_edge": "{edge, select, top {顶部} bottom {底部} left {左侧} right {右侧} other {某个}} 边缘的控制手柄", "editor_orientation": "方向", "editor_reset_all_changes": "还原更改", @@ -1017,7 +1016,7 @@ "email_notifications": "邮件通知", "empty_folder": "此文件夹为空", "empty_trash": "清空回收站", - "empty_trash_confirmation": "确定要清空回收站吗?此操作将永久删除回收站中的所有资源。\n该操作无法撤销!", + "empty_trash_confirmation": "确定要清空回收站吗?此操作将永久删除回收站中的所有照片/视频。\n该操作无法撤销!", "enable": "启用", "enable_backup": "启用备份", "enable_biometric_auth_description": "请输入您的 PIN 码以启用生物识别认证", @@ -1028,49 +1027,49 @@ "enter_your_pin_code": "输入您的 PIN 码", "enter_your_pin_code_subtitle": "输入你的 PIN 码以访问锁定的文件夹", "error": "错误", - "error_change_sort_album": "更改相册排序顺序失败", - "error_delete_face": "删除该资产中的人脸时出错", + "error_change_sort_album": "更改相簿排序顺序失败", + "error_delete_face": "删除该照片/视频中的人脸时出错", "error_getting_places": "获取地点信息时出错", - "error_loading_albums": "加载相册时出错", + "error_loading_albums": "加载相簿时出错", "error_loading_image": "加载图片时出错", "error_loading_partners": "加载协作者时出错:{error}", - "error_retrieving_asset_information": "获取资源信息时出错", + "error_retrieving_asset_information": "获取项目信息时出错", "error_saving_image": "错误:{error}", "error_tag_face_bounding_box": "标记人脸时出错 - 无法获取边界框坐标", "error_title": "错误 - 出现了问题", - "error_while_navigating": "跳转到资源时出错", + "error_while_navigating": "跳转到照片/视频时出错", "errors": { - "cannot_navigate_next_asset": "无法跳转到下一个资源", - "cannot_navigate_previous_asset": "无法跳转到上一个资源", + "cannot_navigate_next_asset": "无法跳转到下一个照片/视频", + "cannot_navigate_previous_asset": "无法跳转到上一个照片/视频", "cant_apply_changes": "无法应用更改", "cant_change_activity": "无法 {enabled, select, true {禁用} other {启用}} 活动", - "cant_change_asset_favorite": "无法更改资源的收藏状态", - "cant_change_metadata_assets_count": "无法修改{count, plural, one {#个资源} other {#个资源}}的元数据", + "cant_change_asset_favorite": "无法更改照片/视频的收藏状态", + "cant_change_metadata_assets_count": "无法修改{count, plural, one {#个} other {#个}}照片/视频的元数据", "cant_get_faces": "无法获取人脸", "cant_get_number_of_comments": "无法获取评论数量", "cant_search_people": "无法搜索人物", "cant_search_places": "无法搜索地点", - "error_adding_assets_to_album": "添加资源到相册时出错", - "error_adding_users_to_album": "添加用户到相册时出错", + "error_adding_assets_to_album": "添加照片/视频到相簿时出错", + "error_adding_users_to_album": "添加用户到相簿时出错", "error_deleting_shared_user": "删除共享用户时出错", - "error_downloading": "下载“{filename}”时出错", + "error_downloading": "下载{filename}时出错", "error_hiding_buy_button": "隐藏购买按钮时出错", - "error_removing_assets_from_album": "移除相册资源时出错,请检查控制台以获取更多详情", - "error_selecting_all_assets": "全选资源时出错", + "error_removing_assets_from_album": "从相簿中移除照片/视频时出错,请检查控制台以获取更多详情", + "error_selecting_all_assets": "全选照片/视频时出错", "exclusion_pattern_already_exists": "此排除模式已存在。", - "failed_to_create_album": "创建相册失败", + "failed_to_create_album": "创建相簿失败", "failed_to_create_shared_link": "创建共享链接失败", "failed_to_edit_shared_link": "编辑共享链接失败", "failed_to_get_people": "获取人物列表失败", - "failed_to_keep_this_delete_others": "保留此资源并删除其他资源失败", - "failed_to_load_asset": "加载资源失败", - "failed_to_load_assets": "加载资源失败", + "failed_to_keep_this_delete_others": "删除除此项目外的其他项目失败", + "failed_to_load_asset": "加载照片/视频失败", + "failed_to_load_assets": "加载照片/视频失败", "failed_to_load_notifications": "加载通知失败", "failed_to_load_people": "加载人物失败", "failed_to_remove_product_key": "移除产品密钥失败", "failed_to_reset_pin_code": "重置 PIN 码失败", - "failed_to_stack_assets": "堆叠资源失败", - "failed_to_unstack_assets": "取消堆叠资源失败", + "failed_to_stack_assets": "堆叠照片/视频失败", + "failed_to_unstack_assets": "取消堆叠照片/视频失败", "failed_to_update_notification_status": "更新通知状态失败", "incorrect_email_or_password": "邮箱或密码错误", "library_folder_already_exists": "该导入路径已存在。", @@ -1079,18 +1078,18 @@ "profile_picture_transparent_pixels": "头像不支持透明背景,请放大或移动图片。", "quota_higher_than_disk_size": "你设置的配额超过了磁盘总大小", "something_went_wrong": "出错了", - "unable_to_add_album_users": "无法向相册添加用户", - "unable_to_add_assets_to_shared_link": "无法向分享链接添加资源", + "unable_to_add_album_users": "无法向相簿添加用户", + "unable_to_add_assets_to_shared_link": "无法向分享链接添加照片/视频", "unable_to_add_comment": "无法添加评论", "unable_to_add_exclusion_pattern": "无法添加排除规则", "unable_to_add_partners": "无法添加协作者", - "unable_to_add_remove_archive": "无法{archived, select, true {从归档中移除} other {添加资源到归档}}", - "unable_to_add_remove_favorites": "无法{favorite, select, true {添加资源到收藏} other {从收藏中移除}}", + "unable_to_add_remove_archive": "无法{archived, select, true {从归档中移除} other {添加照片/视频到归档}}", + "unable_to_add_remove_favorites": "无法{favorite, select, true {添加照片/视频到收藏} other {从收藏中移除}}", "unable_to_archive_unarchive": "无法{archived, select, true {归档} other {取消归档}}", - "unable_to_change_album_user_role": "无法更改相册用户的角色", + "unable_to_change_album_user_role": "无法更改相簿用户的角色", "unable_to_change_date": "无法更改日期", "unable_to_change_description": "无法修改描述", - "unable_to_change_favorite": "无法更改资源的收藏状态", + "unable_to_change_favorite": "无法更改照片/视频的收藏状态", "unable_to_change_location": "无法更改位置", "unable_to_change_password": "无法修改密码", "unable_to_change_visibility": "无法修改{count, plural, one {#个人} other {#个人}}的可见性设置", @@ -1102,9 +1101,9 @@ "unable_to_create_api_key": "无法创建新的 API 密钥", "unable_to_create_library": "无法创建库", "unable_to_create_user": "无法创建用户", - "unable_to_delete_album": "无法删除相册", - "unable_to_delete_asset": "无法删除资源", - "unable_to_delete_assets": "删除资源 时出错", + "unable_to_delete_album": "无法删除相簿", + "unable_to_delete_asset": "无法删除照片/视频", + "unable_to_delete_assets": "删除照片/视频时出错", "unable_to_delete_exclusion_pattern": "无法删除排除规则", "unable_to_delete_shared_link": "无法删除共享链接", "unable_to_delete_user": "无法删除用户", @@ -1124,21 +1123,21 @@ "unable_to_login_with_oauth": "无法使用 OAuth 进行登录", "unable_to_play_video": "无法播放视频", "unable_to_reassign_assets_existing_person": "无法将项目重新分配给{name, select, null {已存在的人物} other {{name}}}", - "unable_to_reassign_assets_new_person": "无法重新分配资源给新的人物", + "unable_to_reassign_assets_new_person": "无法重新分配照片/视频给新的人物", "unable_to_refresh_user": "无法刷新用户", - "unable_to_remove_album_users": "无法从相册中移除用户", + "unable_to_remove_album_users": "无法从相簿中移除用户", "unable_to_remove_api_key": "无法移除 API 密钥", - "unable_to_remove_assets_from_shared_link": "无法从共享链接中移除资源", + "unable_to_remove_assets_from_shared_link": "无法从共享链接中移除照片/视频", "unable_to_remove_library": "无法移除库", "unable_to_remove_partner": "无法移除协作者", "unable_to_remove_reaction": "无法删除回复", "unable_to_reset_password": "无法重置密码", "unable_to_reset_pin_code": "无法重置 PIN 码", "unable_to_resolve_duplicate": "无法处理重复项", - "unable_to_restore_assets": "无法恢复资源", + "unable_to_restore_assets": "无法恢复照片/视频", "unable_to_restore_trash": "无法还原回收站", "unable_to_restore_user": "无法恢复用户", - "unable_to_save_album": "无法保存相册", + "unable_to_save_album": "无法保存相簿", "unable_to_save_api_key": "无法保存 API 密钥", "unable_to_save_date_of_birth": "无法保存出生日期", "unable_to_save_name": "无法更新人物名称", @@ -1153,8 +1152,8 @@ "unable_to_trash_asset": "无法移至回收站", "unable_to_unlink_account": "无法解除账号关联", "unable_to_unlink_motion_video": "无法解除实况视频关联", - "unable_to_update_album_cover": "无法更新相册封面", - "unable_to_update_album_info": "无法更新相册信息", + "unable_to_update_album_cover": "无法更改相簿封面", + "unable_to_update_album_info": "无法更改相簿信息", "unable_to_update_library": "无法更新图库", "unable_to_update_location": "无法更新位置信息", "unable_to_update_settings": "无法更新设置", @@ -1184,7 +1183,7 @@ "expired": "已过期", "expires_date": "将于 {date} 过期", "explore": "探索", - "explorer": "资源管理器", + "explorer": "探索", "export": "导出", "export_as_json": "导出为 JSON", "export_database": "导出数据库", @@ -1198,13 +1197,13 @@ "failed": "失败", "failed_count": "失败: {count}次", "failed_to_authenticate": "身份验证失败", - "failed_to_load_assets": "资源加载失败", + "failed_to_load_assets": "照片/视频加载失败", "failed_to_load_folder": "文件夹加载失败", "favorite": "收藏", "favorite_action_prompt": "已添加 {count} 个到收藏夹", "favorite_or_unfavorite_photo": "收藏或取消收藏照片", "favorites": "收藏夹", - "favorites_page_no_favorites": "未找到收藏的资源", + "favorites_page_no_favorites": "未找到收藏的照片/视频", "feature_photo_updated": "更换人物封面照片成功", "features": "功能", "features_in_development": "开发中的功能", @@ -1216,7 +1215,7 @@ "filename": "文件名", "filetype": "文件类型", "filter": "筛选", - "filter_description": "筛选目标资源的条件", + "filter_description": "筛选目标文件的条件", "filter_people": "筛选人物", "filter_places": "筛选地点", "filter_tags": "筛选标签", @@ -1248,7 +1247,7 @@ "gps": "有GPS信息", "gps_missing": "无GPS信息", "grant_permission": "授权权限", - "group_albums_by": "相册分组依据...", + "group_albums_by": "相簿分组依据...", "group_country": "按国家分组", "group_no": "不分组", "group_owner": "按所有者分组", @@ -1268,17 +1267,17 @@ "height": "高度", "hi_user": "您好,{name}({email})", "hide_all_people": "隐藏所有人物", - "hide_gallery": "隐藏相册", + "hide_gallery": "隐藏相簿", "hide_named_person": "隐藏人物:{name}", "hide_password": "隐藏密码", "hide_person": "隐藏人物", "hide_schema": "隐藏模式", "hide_text_recognition": "隐藏文本识别结果", "hide_unnamed_people": "隐藏未命名的人物", - "home_page_add_to_album_conflicts": "已将 {added} 个文件添加到相册 \"{album}\" 中。其中有 {failed} 个文件本来就在相册里了。", - "home_page_add_to_album_err_local": "暂时无法将本地文件添加到相册,正在跳过", - "home_page_add_to_album_success": "已成功将 {added} 个文件添加到相册 \"{album}\" 中。", - "home_page_album_err_partner": "暂时无法将\"对方\"的资产添加到相册中,正在跳过", + "home_page_add_to_album_conflicts": "已将 {added} 个文件添加到相簿“{album}”。{failed} 个文件已存在。", + "home_page_add_to_album_err_local": "暂时无法将本地文件添加到相簿,正在跳过", + "home_page_add_to_album_success": "已成功将 {added} 个文件添加到相簿“{album}”中。", + "home_page_album_err_partner": "暂时无法将“对方”的照片/视频添加到相簿中,正在跳过", "home_page_archive_err_local": "暂时无法归档本地文件,正在跳过", "home_page_archive_err_partner": "无法归档协作者的文件,正在跳过", "home_page_building_timeline": "正在构建时间线", @@ -1286,7 +1285,7 @@ "home_page_delete_remote_err_local": "检测到待删除列表中包含了本地文件,正在跳过", "home_page_favorite_err_local": "暂不支持收藏本地文件,正在跳过", "home_page_favorite_err_partner": "暂不支持收藏协作者的文件,正在跳过", - "home_page_first_time_notice": "如果您是首次使用本应用,请务必选择一个备份相册,以便时间线能从中获取并展示照片和视频", + "home_page_first_time_notice": "如果您是首次使用本应用,请务必选择一个备份相簿,以便时间线能从中获取并展示照片和视频", "home_page_locked_error_local": "无法将本地文件移入锁定的文件夹,正在跳过", "home_page_locked_error_partner": "无法将协作者的文件移入锁定的文件夹,正在跳过", "home_page_share_err_local": "无法通过链接分享本地文件,正在跳过", @@ -1313,17 +1312,17 @@ "image_viewer_page_state_provider_download_started": "开始下载", "image_viewer_page_state_provider_download_success": "下载成功", "image_viewer_page_state_provider_share_error": "分享出错", - "immich_logo": "Immich 标志", - "immich_web_interface": "Immich 网页界面", - "import_from_json": "从 JSON 导入", + "immich_logo": "Immich Logo", + "immich_web_interface": "Immich网页界面", + "import_from_json": "从JSON导入", "import_path": "导入路径", - "in_albums": "在{count, plural, one {# 个相册} other {# 个相册}}中", + "in_albums": "在{count, plural, one {# 个相簿} other {# 个相簿}}中", "in_archive": "已归档", "in_year": "{year}年", "in_year_selector": "在", "include_archived": "包括已归档", - "include_shared_albums": "包括共享相册", - "include_shared_partner_assets": "包括协作者共享资源", + "include_shared_albums": "包括共享相簿", + "include_shared_partner_assets": "包括协作者共享照片/视频", "individual_share": "单独分享", "individual_shares": "单独分享", "info": "信息", @@ -1336,20 +1335,20 @@ "invalid_date": "无效的日期", "invalid_date_format": "无效的日期格式", "invite_people": "邀请人员", - "invite_to_album": "邀请加入相册", + "invite_to_album": "邀请加入相簿", "ios_debug_info_fetch_ran_at": "运行拉取 {dateTime}", "ios_debug_info_last_sync_at": "上次同步于 {dateTime}", "ios_debug_info_no_processes_queued": "无待处理的后台进程", "ios_debug_info_no_sync_yet": "尚未执行后台同步任务", - "ios_debug_info_processes_queued": "{count, plural, one {{count} 个后台任务在排队} other {{count} 个后台任务在排队}}", + "ios_debug_info_processes_queued": "{count, plural, one {{count}个后台任务在排队} other {{count}个后台任务在排队}}", "ios_debug_info_processing_ran_at": "处理于 {dateTime}", - "items_count": "{count, plural, one {#个} other {#个}}", + "items_count": "{count, plural, one {#个} other {#个}}项目", "jobs": "任务", "json_editor": "JSON编辑器", "json_error": "JSON错误", "keep": "保留", - "keep_albums": "保留相册", - "keep_albums_count": "保留 {count} {count, plural, one {个相册} other {个相册}}", + "keep_albums": "保留相簿", + "keep_albums_count": "保留 {count} {count, plural, one {个相簿} other {个相簿}}", "keep_all": "全部保留", "keep_description": "选择释放空间时保留在设备上的内容。", "keep_favorites": "保留收藏", @@ -1357,7 +1356,7 @@ "keep_on_device_hint": "选择要保留在本设备上的项目", "keep_this_delete_others": "保留此项,其余删除", "keeping": "保留: {items}", - "kept_this_deleted_others": "保留该资源并删除 {count, plural, one {# 个资源} other {# 个资源}}", + "kept_this_deleted_others": "保留该照片/视频并删除{count, plural, one {# 个项目} other {# 个项目}}", "keyboard_shortcuts": "键盘快捷键", "language": "语言", "language_no_results_subtitle": "尝试调整您的搜索词", @@ -1366,45 +1365,47 @@ "language_setting_description": "选择您的首选语言", "large_files": "大文件", "last": "最后一个", - "last_months": "{count, plural, one {上个月} other {最近 # 个月}}", + "last_months": "{count, plural, one {上个月} other {最近#个月}}", "last_seen": "最后上线于", "latest_version": "最新版本", "latitude": "纬度", "leave": "离开", - "leave_album": "离开相册", + "leave_album": "离开相簿", "lens_model": "镜头型号", "let_others_respond": "允许他人回复", "level": "等级", - "library": "资料库", + "library": "资源库", "library_add_folder": "添加文件夹", "library_edit_folder": "编辑文件夹", - "library_options": "资料库选项", - "library_page_device_albums": "设备上的相册", - "library_page_new_album": "新建相册", - "library_page_sort_asset_count": "资源数量", + "library_options": "资源库选项", + "library_page_device_albums": "设备上的相簿", + "library_page_new_album": "新建相簿", + "library_page_sort_asset_count": "项目数量", "library_page_sort_created": "创建日期", "library_page_sort_last_modified": "上次修改", - "library_page_sort_title": "相册标题", + "library_page_sort_title": "相簿标题", "licenses": "许可证", "light": "浅色", + "light_theme": "切换到浅色主题", "like": "点赞", "like_deleted": "取消点赞", "link_motion_video": "链接动态视频", + "link_to_docs": "更多信息, 请参见 文档.", "link_to_oauth": "绑定 OAuth", "linked_oauth_account": "已绑定的 OAuth 账户", "list": "列表", "loading": "加载中", "loading_search_results_failed": "加载搜索结果失败", "local": "本地", - "local_asset_cast_failed": "无法处理尚未上传至服务器的资产", - "local_assets": "本地资源", + "local_asset_cast_failed": "无法处理尚未上传至服务器的照片/视频", + "local_assets": "本地项目", "local_id": "本地 ID", "local_media_summary": "本地媒体摘要", "local_network": "本地网络", "local_network_sheet_info": "使用指定的 Wi-Fi 网络时,应用将通过此 URL 连接到服务器", "location": "位置", "location_permission": "定位权限", - "location_permission_content": "为了使用自动切换功能,Immich 需要获取精确位置权限,以便读取当前 Wi-Fi 网络的名称", + "location_permission_content": "为了使用自动切换功能,Immich需要获取精确位置权限,以便读取当前 Wi-Fi 网络的名称", "location_picker_choose_on_map": "从地图选取", "location_picker_latitude_error": "请输入有效的纬度", "location_picker_latitude_hint": "请在此处输入纬度", @@ -1420,7 +1421,7 @@ "logged_out_device": "已退出设备登录", "login": "登录", "login_disabled": "登录功能已禁用", - "login_form_api_exception": "API 异常。请检查服务器 URL 并重试。", + "login_form_api_exception": "API异常。请检查服务器URL并重试。", "login_form_back_button_text": "返回", "login_form_email_hint": "youremail@email.com", "login_form_endpoint_hint": "http://您的服务器地址:端口", @@ -1430,7 +1431,7 @@ "login_form_err_invalid_url": "无效的URL", "login_form_err_leading_whitespace": "不允许前导空格", "login_form_err_trailing_whitespace": "不允许尾随空格", - "login_form_failed_get_oauth_server_config": "使用 OAuth 登录出错,请检查服务器地址", + "login_form_failed_get_oauth_server_config": "使用OAuth登录出错,请检查服务器地址", "login_form_failed_get_oauth_server_disable": "此服务器不支持 OAuth 功能", "login_form_failed_login": "登录失败,请检查服务器地址、邮箱和密码", "login_form_handshake_exception": "与服务器的握手异常。如果您使用的是自签名证书,请在设置中开启对自签名证书的支持。", @@ -1459,8 +1460,8 @@ "maintenance_restore_library": "恢复您的图库", "maintenance_restore_library_confirm": "如果确认无误,请继续进行备份恢复!", "maintenance_restore_library_description": "正在恢复数据库", - "maintenance_restore_library_folder_has_files": "{folder} 包含 {count} 个文件夹", - "maintenance_restore_library_folder_no_files": "{folder} 缺少文件!", + "maintenance_restore_library_folder_has_files": "{folder}包含{count}个文件夹", + "maintenance_restore_library_folder_no_files": "{folder}缺少文件!", "maintenance_restore_library_folder_pass": "可读可写", "maintenance_restore_library_folder_read_fail": "不可读", "maintenance_restore_library_folder_write_fail": "不可写", @@ -1495,14 +1496,14 @@ "map_location_service_disabled_title": "定位服务已禁用", "map_marker_for_images": "标记{city}、{country}拍摄照片的地图图标", "map_marker_with_image": "带预览图的地图标记", - "map_no_location_permission_content": "需要位置权限才能显示您当前位置的资源。现在要允许吗?", + "map_no_location_permission_content": "需要位置权限才能显示您当前位置的照片/视频。现在要允许吗?", "map_no_location_permission_title": "位置权限被拒绝", "map_settings": "地图设置", "map_settings_dark_mode": "深色模式", "map_settings_date_range_option_day": "过去24小时", - "map_settings_date_range_option_days": "{days} 天前", + "map_settings_date_range_option_days": "{days}天前", "map_settings_date_range_option_year": "1年前", - "map_settings_date_range_option_years": "{years} 年前", + "map_settings_date_range_option_years": "{years}年前", "map_settings_dialog_title": "地图设置", "map_settings_include_show_archived": "包含已归档的内容", "map_settings_include_show_partners": "包含协作者", @@ -1513,7 +1514,7 @@ "mark_as_read": "标记为已读", "marked_all_as_read": "已全部标记为已读", "matches": "匹配项", - "matching_assets": "匹配的资源", + "matching_assets": "匹配的项目", "media_type": "媒体类型", "memories": "那年今日", "memories_all_caught_up": "已处理完毕", @@ -1549,15 +1550,15 @@ "move_to_device_trash": "移至设备回收站", "move_to_lock_folder_action_prompt": "已将 {count} 项添加到锁定文件夹", "move_to_locked_folder": "移至锁定文件夹", - "move_to_locked_folder_confirmation": "这些照片和视频将从所有相册中移除,仅可在锁定文件夹内查看", + "move_to_locked_folder_confirmation": "这些照片和视频将从所有相簿中移除,仅可在锁定文件夹内查看", "move_up": "向上移动", - "moved_to_archive": "已将 {count, plural, one {# 项资产} other {# 项资产}} 移至归档", - "moved_to_library": "已将 {count, plural, one {# 项资产} other {# 项资产}} 移至资料库", + "moved_to_archive": "已将{count, plural, one {#个} other {#个}}照片/视频移至归档", + "moved_to_library": "已将{count, plural, one {#个} other {#个}}照片/视频移至资源库", "moved_to_trash": "已移至回收站", - "multiselect_grid_edit_date_time_err_read_only": "无法编辑只读资源的日期,正在跳过", - "multiselect_grid_edit_gps_err_read_only": "无法编辑只读资源的位置信息,正在跳过", + "multiselect_grid_edit_date_time_err_read_only": "无法编辑只读项目的日期,正在跳过", + "multiselect_grid_edit_gps_err_read_only": "无法编辑只读项目的位置信息,正在跳过", "mute_memories": "静音回忆", - "my_albums": "我的相册", + "my_albums": "我的相簿", "name": "名称", "name_or_nickname": "名称或昵称", "name_required": "名称是必填项", @@ -1570,7 +1571,7 @@ "networking_settings": "网络设置", "networking_subtitle": "管理服务器端点设置", "never": "永不过期", - "new_album": "新建相册", + "new_album": "新建相簿", "new_api_key": "新增 API 密钥", "new_date_range": "新的日期范围", "new_password": "新密码", @@ -1586,16 +1587,16 @@ "next_memory": "下一个回忆", "no": "否", "no_actions_added": "尚未添加动作", - "no_albums_found": "未找到相册", - "no_albums_message": "创建相册以整理您的照片和视频", - "no_albums_with_name_yet": "看起来还没有同名的相册。", - "no_albums_yet": "看起来您还没有创建任何相册。", + "no_albums_found": "未找到相簿", + "no_albums_message": "创建相簿以整理您的照片和视频", + "no_albums_with_name_yet": "没有同名的相簿。", + "no_albums_yet": "您还没有创建任何相簿。", "no_archived_assets_message": "归档照片和视频,将其从“照片”视图中隐藏", "no_assets_message": "点击上传你的第一张照片", "no_assets_to_show": "暂无内容可显示", "no_cast_devices_found": "未找到可用的投屏设备", - "no_checksum_local": "无可用的校验和 — 无法获取本地资源", - "no_checksum_remote": "无可用的校验和 — 无法获取远程资源", + "no_checksum_local": "无可用的校验和 — 无法获取本地项目", + "no_checksum_remote": "无可用的校验和 — 无法获取远程项目", "no_configuration_needed": "无需配置", "no_devices": "暂无已授权的设备", "no_duplicates_found": "未发现重复内容。", @@ -1604,22 +1605,22 @@ "no_favorites_message": "添加收藏,以便快速找到你最精彩的照片和视频", "no_filters_added": "尚未添加筛选条件", "no_libraries_message": "创建外部图库,以浏览你的照片和视频", - "no_local_assets_found": "未找到具有此校验和的本地资源", + "no_local_assets_found": "未找到具有此校验和的本地项目", "no_location_set": "未设置位置", "no_locked_photos_message": "锁定文件夹中的照片和视频会被隐藏,在浏览或搜索图库时不会显示。", "no_name": "未命名人物", "no_notifications": "暂无通知", "no_people_found": "未找到匹配的人物", "no_places": "暂无地点", - "no_remote_assets_found": "未找到具有此校验和的远程资源", + "no_remote_assets_found": "未找到具有此校验和的远程项目", "no_results": "未找到任何匹配项", "no_results_description": "请尝试使用同义词或更宽泛的关键词", - "no_shared_albums_message": "创建相册,与社交圈内的好友共享照片和视频", + "no_shared_albums_message": "创建相簿,与社交圈内的好友共享照片和视频", "no_uploads_in_progress": "暂无上传任务", "none": "无", "not_allowed": "不允许", "not_available": "不适用", - "not_in_any_album": "未收录于任何相册", + "not_in_any_album": "未收录于任何相簿", "not_selected": "未选择", "notes": "备注", "nothing_here_yet": "暂无内容", @@ -1634,7 +1635,7 @@ "obtainium_configurator": "Obtainium配置器", "obtainium_configurator_instructions": "使用 Obtainium 直接从 Immich 的 GitHub 发布页安装和更新 Android 应用。请创建一个 API 密钥并选择一个版本,以生成你的 Obtainium 配置链接", "ocr": "OCR", - "official_immich_resources": "Immich 官方资源", + "official_immich_resources": "Immich官方资源", "offline": "离线", "offset": "偏移量", "ok": "确定", @@ -1657,14 +1658,14 @@ "open_the_search_filters": "打开搜索筛选", "options": "选项", "or": "或", - "organize_into_albums": "整理到相册中", - "organize_into_albums_description": "使用当前的同步设置,将现有照片归入相册", - "organize_your_library": "整理您的资料库", + "organize_into_albums": "整理到相簿中", + "organize_into_albums_description": "使用当前的同步设置,将现有照片归入相簿", + "organize_your_library": "整理您的资源库", "original": "原始的", - "other": "其它", - "other_devices": "其它设备", + "other": "其他", + "other_devices": "其他设备", "other_entities": "其他实体", - "other_variables": "其它变量", + "other_variables": "其他变量", "owned": "我的", "owner": "所有者", "page": "页面", @@ -1679,7 +1680,7 @@ "partner_page_partner_add_failed": "添加好友失败", "partner_page_select_partner": "选择目标", "partner_page_shared_to_title": "分享给", - "partner_page_stop_sharing_content": "{partner} 将无法再访问您的照片。", + "partner_page_stop_sharing_content": "{partner}将无法再访问您的照片。", "partner_sharing": "好友共享", "partners": "好友", "password": "密码", @@ -1700,15 +1701,15 @@ "people": "人物", "people_edits_count": "{count, plural, one {#个人物} other {#个人物}}已编辑", "people_feature_description": "按人物分组浏览照片和视频", - "people_selected": "{count, plural, one {已选中 # 人} other {已选中 # 人}}", + "people_selected": "{count, plural, one {已选中#人} other {已选中#人}}", "people_sidebar_description": "在侧边栏显示“人物”链接", "permanent_deletion_warning": "永久删除警告", - "permanent_deletion_warning_setting_description": "永久删除资源时显示警告", + "permanent_deletion_warning_setting_description": "永久删除照片/视频时显示警告", "permanently_delete": "永久删除", - "permanently_delete_assets_count": "永久删除{count, plural, one {个资源} other {个资源}}", - "permanently_delete_assets_prompt": "确定要永久删除 {count, plural, one {此资源吗?} other {这 # 个资源吗?}}这也会将 {count, plural, one {其} other {它们}}从所属相册中移除。", - "permanently_deleted_asset": "永久删除的资源", - "permanently_deleted_assets_count": "已永久删除{count, plural, one {#个资源} other {#个资源}}", + "permanently_delete_assets_count": "永久删除{count, plural, one {个项目} other {个项目}}", + "permanently_delete_assets_prompt": "确定要永久删除 {count, plural, one {此项目吗?} other {这#个项目吗?}}这也会将{count, plural, one {其} other {它们}}从所属相簿中移除。", + "permanently_deleted_asset": "永久删除的项目", + "permanently_deleted_assets_count": "已永久删除{count, plural, one {#个项目} other {#个项目}}", "permission": "权限", "permission_empty": "权限不能为空", "permission_onboarding_back": "返回", @@ -1718,19 +1719,19 @@ "permission_onboarding_permission_denied": "权限被拒绝。要使用 Immich,请在“设置”中授予照片和视频权限。", "permission_onboarding_permission_granted": "权限已授予!一切准备就绪。", "permission_onboarding_permission_limited": "权限受限。要让 Immich 备份并管理你的整个图库,请在“设置”中授予照片和视频权限。", - "permission_onboarding_request": "Immich 需要权限才能查看你的照片和视频。", + "permission_onboarding_request": "Immich需要权限才能查看你的照片和视频。", "person": "人物", - "person_age_months": "{months, plural, one {# 个月} other {# 个月}}大", + "person_age_months": "{months, plural, one {#个月} other {#个月}}大", "person_age_year_months": "1 岁{months, plural, one {# 个月} other {# 个月}}大", - "person_age_years": "{years, plural, other {# 岁}}", + "person_age_years": "{years, plural, other {#岁}}", "person_birthdate": "出生于{date}", - "person_hidden": "{name}{hidden, select, true { (隐藏)} other {}}", + "person_hidden": "{name}{hidden, select, true {(隐藏)} other {}}", "person_recognized": "已识别人物", "person_selected": "已选择人物", "photo_shared_all_users": "看起来你已经与所有用户共享了你的照片,或者你没有任何可以共享的用户。", "photos": "照片", "photos_and_videos": "照片 & 视频", - "photos_count": "{count, plural, one {{count, number} 张照片} other {{count, number} 张照片}}", + "photos_count": "{count, plural, one {{count, number}张照片} other {{count, number}张照片}}", "photos_from_previous_years": "那年今日", "photos_only": "仅照片", "pick_a_location": "选择位置", @@ -1742,13 +1743,13 @@ "pin_verification": "PIN码验证", "place": "地点", "places": "地点", - "places_count": "{count, plural, one {{count, number} 个地点} other {{count, number} 个地点}}", + "places_count": "{count, plural, one {{count, number}个地点} other {{count, number}个地点}}", "play": "播放", "play_memories": "播放那年今日", "play_motion_photo": "播放动态图片", "play_or_pause_video": "播放或暂停视频", "play_original_video": "播放原始视频", - "play_original_video_setting_description": "优先播放原始视频,而非转码视频。如果原始资源不兼容,可能无法正常播放。", + "play_original_video_setting_description": "优先播放原始视频,而非转码视频。如果原始视频不兼容,可能无法正常播放。", "play_transcoded_video": "播放转码视频", "please_auth_to_access": "请进行身份验证以访问", "port": "端口", @@ -1772,7 +1773,7 @@ "profile_drawer_readonly_mode": "只读模式已启用。长按用户头像图标退出。", "profile_image_of_user": "{user}的个人资料图片", "profile_picture_set": "个人资料图片已设置。", - "public_album": "公开相册", + "public_album": "公开相簿", "public_share": "公开共享", "purchase_account_info": "支持者", "purchase_activated_subtitle": "感谢您对 Immich 和开源软件的支持", @@ -1806,9 +1807,9 @@ "purchase_server_description_2": "支持者状态", "purchase_server_title": "服务器", "purchase_settings_server_activated": "服务器产品密钥正在由管理员管理", - "query_asset_id": "查询资产ID", + "query_asset_id": "查询项目ID", "queue_status": "排队中 {count}/{total}", - "rate_asset": "资产星级", + "rate_asset": "项目星级", "rating": "星级", "rating_clear": "删除星级", "rating_count": "{count, plural, =0 {未评级} one {# 星} other {# 星}}", @@ -1823,7 +1824,7 @@ "reassigned_assets_to_new_person": "重新指派{count, plural, one {#个项目} other {#个项目}}到新的人物", "reassing_hint": "指派选择的项目到已存在的人物", "recent": "最近", - "recent_albums": "最近的相册", + "recent_albums": "最近的相簿", "recent_searches": "最近搜索", "recently_added": "近期添加", "recently_added_page_title": "最近添加", @@ -1849,8 +1850,8 @@ "remove_assets_title": "移除项目?", "remove_custom_date_range": "取消自定义日期范围", "remove_deleted_assets": "彻底删除文件", - "remove_from_album": "从相册中移除", - "remove_from_album_action_prompt": "从相册中移除了 {count} 项", + "remove_from_album": "从相簿中移除", + "remove_from_album_action_prompt": "从相簿中移除了 {count} 项", "remove_from_favorites": "移出收藏", "remove_from_lock_folder_action_prompt": "已从锁定的文件夹中移除 {count} 项", "remove_from_locked_folder": "从锁定文件夹中移除", @@ -1867,7 +1868,7 @@ "removed_from_favorites_count": "从收藏中移除{count, plural, other {#项}}", "removed_memory": "已删除的回忆", "removed_photo_from_memory": "从回忆区中删除的照片", - "removed_tagged_assets": "从 {count, plural, one {# 个项目} other {# 个项目}}中删除标签", + "removed_tagged_assets": "从 {count, plural, one {#个项目} other {#个项目}}中删除标签", "rename": "重命名", "repair": "修复", "repair_no_results_message": "未跟踪和缺失的文件将在此处显示", @@ -1895,7 +1896,7 @@ "resolved_all_duplicates": "处理所有重复项", "restore": "恢复", "restore_all": "恢复全部", - "restore_trash_action_prompt": "从回收站中恢复了 {count} 项", + "restore_trash_action_prompt": "从回收站中恢复了{count}项", "restore_user": "恢复用户", "restored_asset": "已恢复项目", "resume": "继续", @@ -1921,9 +1922,9 @@ "scan_library": "扫描", "scan_settings": "扫描设置", "scanning": "扫描中", - "scanning_for_album": "扫描相册中...", + "scanning_for_album": "扫描相簿中...", "search": "搜索", - "search_albums": "搜索相册", + "search_albums": "搜索相簿", "search_by_context": "通过描述的场景查找", "search_by_description": "通过描述查找", "search_by_description_example": "在沙巴徒步的日子", @@ -1941,7 +1942,7 @@ "search_filter_date": "日期", "search_filter_date_interval": "从{start}到{end}", "search_filter_date_title": "选择日期范围", - "search_filter_display_option_not_in_album": "不在相册中", + "search_filter_display_option_not_in_album": "不在相簿中", "search_filter_display_options": "显示选项", "search_filter_filename": "通过文件名搜索", "search_filter_location": "位置", @@ -1986,14 +1987,14 @@ "second": "秒", "see_all_people": "查看所有人物", "select": "选择", - "select_album": "选择相册", - "select_album_cover": "选择相册封面", - "select_albums": "选择相册", + "select_album": "选择相簿", + "select_album_cover": "选择相簿封面", + "select_albums": "选择相簿", "select_all": "全选", "select_all_duplicates": "选择所有重复项", "select_all_in": "选择 {group} 中的所有内容", "select_avatar_color": "选择头像颜色", - "select_count": "{count, plural, one {选择 # 项} other {选择 # 项}}", + "select_count": "{count, plural, one {已选中#项} other {已选中#项}}", "select_cutoff_date": "选择截止日期", "select_face": "选择人脸", "select_featured_photo": "选择个性头像", @@ -2006,14 +2007,14 @@ "select_person_to_tag": "选择要标记的人物", "select_photos": "选择照片", "select_trash_all": "全部删除", - "select_user_for_sharing_page_err_album": "创建相册失败", + "select_user_for_sharing_page_err_album": "创建相簿失败", "selected": "已选择", - "selected_count": "{count, plural, other {#项已选择}}", + "selected_count": "{count, plural, other {已选中#项}}", "selected_gps_coordinates": "已选定的GPS坐标", "send_message": "发送消息", "send_welcome_email": "发送欢迎邮件", "server_endpoint": "服务器 URL", - "server_info_box_app_version": "App 版本", + "server_info_box_app_version": "App版本", "server_info_box_server_url": "服务器地址", "server_offline": "服务器离线", "server_online": "服务器在线", @@ -2024,7 +2025,7 @@ "server_update_available": "服务器更新可用", "server_version": "服务器版本", "set": "设置", - "set_as_album_cover": "设为相册封面", + "set_as_album_cover": "设为相簿封面", "set_as_featured_photo": "设置为特色照片", "set_as_profile_picture": "设为个人资料图片", "set_date_of_birth": "设置出生日期", @@ -2043,11 +2044,11 @@ "setting_languages_apply": "应用", "setting_languages_subtitle": "更改应用语言", "setting_notifications_notify_failures_grace_period": "后台备份失败通知:{duration}", - "setting_notifications_notify_hours": "{count} 小时", + "setting_notifications_notify_hours": "{count}小时", "setting_notifications_notify_immediately": "立即", - "setting_notifications_notify_minutes": "{count} 分钟", + "setting_notifications_notify_minutes": "{count}分钟", "setting_notifications_notify_never": "从不", - "setting_notifications_notify_seconds": "{count} 秒", + "setting_notifications_notify_seconds": "{count}秒", "setting_notifications_single_progress_subtitle": "每项的详细上传进度信息", "setting_notifications_single_progress_title": "显示后台备份详细进度", "setting_notifications_subtitle": "调整通知首选项", @@ -2065,22 +2066,22 @@ "share": "分享", "share_action_prompt": "已共享 {count} 项目", "share_add_photos": "添加项目", - "share_assets_selected": "{count} 已选择", + "share_assets_selected": "{count}已选择", "share_dialog_preparing": "准备中...", "share_link": "分享链接", "shared": "共享", "shared_album_activities_input_disable": "评论已禁用", "shared_album_activity_remove_content": "是否删除此活动?", "shared_album_activity_remove_title": "删除活动", - "shared_album_section_people_action_error": "退出/删除相册失败", - "shared_album_section_people_action_leave": "从相册中删除用户", - "shared_album_section_people_action_remove_user": "从相册中删除用户", + "shared_album_section_people_action_error": "退出/删除相簿失败", + "shared_album_section_people_action_leave": "从相簿中删除用户", + "shared_album_section_people_action_remove_user": "从相簿中删除用户", "shared_album_section_people_title": "人物", "shared_by": "共享自", "shared_by_user": "由“{user}”共享", "shared_by_you": "您的共享", "shared_from_partner": "来自“{partner}”的照片", - "shared_intent_upload_button_progress_text": "{current} / {total} 已上传", + "shared_intent_upload_button_progress_text": "已上传{current} / {total}", "shared_link_app_bar_title": "共享链接", "shared_link_clipboard_copied_massage": "复制到剪贴板", "shared_link_clipboard_text": "链接:{link}\n密码:{password}", @@ -2088,25 +2089,25 @@ "shared_link_custom_url_description": "使用自定义URL访问此共享链接", "shared_link_edit_description_hint": "编辑共享描述", "shared_link_edit_expire_after_option_day": "1天", - "shared_link_edit_expire_after_option_days": "{count} 天", + "shared_link_edit_expire_after_option_days": "{count}天", "shared_link_edit_expire_after_option_hour": "1小时", - "shared_link_edit_expire_after_option_hours": "{count} 小时", + "shared_link_edit_expire_after_option_hours": "{count}小时", "shared_link_edit_expire_after_option_minute": "1分钟", - "shared_link_edit_expire_after_option_minutes": "{count} 分钟", - "shared_link_edit_expire_after_option_months": "{count} 个月", - "shared_link_edit_expire_after_option_year": "{count} 年", + "shared_link_edit_expire_after_option_minutes": "{count}分钟", + "shared_link_edit_expire_after_option_months": "{count}个月", + "shared_link_edit_expire_after_option_year": "{count}年", "shared_link_edit_password_hint": "输入共享密码", "shared_link_edit_submit_button": "更新链接", "shared_link_error_server_url_fetch": "无法获取服务器地址", - "shared_link_expires_day": "{count} 天后过期", - "shared_link_expires_days": "{count} 天后过期", - "shared_link_expires_hour": "{count} 小时后过期", - "shared_link_expires_hours": "{count} 小时后过期", - "shared_link_expires_minute": "{count} 分钟后过期", - "shared_link_expires_minutes": "{count} 分钟后过期", + "shared_link_expires_day": "{count}天后过期", + "shared_link_expires_days": "{count}天后过期", + "shared_link_expires_hour": "{count}小时后过期", + "shared_link_expires_hours": "{count}小时后过期", + "shared_link_expires_minute": "{count}分钟后过期", + "shared_link_expires_minutes": "{count}分钟后过期", "shared_link_expires_never": "过期时间 ∞", - "shared_link_expires_second": "{count} 秒后过期", - "shared_link_expires_seconds": "{count} 秒后过期", + "shared_link_expires_second": "{count}秒后过期", + "shared_link_expires_seconds": "{count}秒后过期", "shared_link_individual_shared": "个人共享", "shared_link_info_chip_metadata": "EXIF", "shared_link_manage_links": "管理共享链接", @@ -2114,20 +2115,20 @@ "shared_link_password_description": "需要密码才能访问此共享链接", "shared_links": "共享链接", "shared_links_description": "通过链接分享照片和视频", - "shared_photos_and_videos_count": "{assetCount, plural, other {#项已共享照片&视频。}}", + "shared_photos_and_videos_count": "{assetCount, plural, other {#个已共享照片/视频。}}", "shared_with_me": "共享给我", - "shared_with_partner": "与“{partner}”共享", + "shared_with_partner": "与{partner}共享", "sharing": "共享", "sharing_enter_password": "请输入密码后查看此页面。", - "sharing_page_album": "共享相册", - "sharing_page_description": "创建共享相册以与网络中的人共享照片和视频。", + "sharing_page_album": "共享相簿", + "sharing_page_description": "创建共享相簿以与网络中的人共享照片和视频。", "sharing_page_empty_list": "空", "sharing_sidebar_description": "在侧边栏中显示“共享”链接", - "sharing_silver_appbar_create_shared_album": "创建共享相册", + "sharing_silver_appbar_create_shared_album": "创建共享相簿", "sharing_silver_appbar_share_partner": "共享给协作者", "shift_to_permanent_delete": "按住 ⇧ Shift 键永久删除项目", - "show_album_options": "显示相册选项", - "show_albums": "显示相册", + "show_album_options": "显示相簿选项", + "show_albums": "显示相簿", "show_all_people": "显示所有人物", "show_and_hide_people": "显示和隐藏人物", "show_file_location": "显示文件位置", @@ -2162,7 +2163,7 @@ "slideshow_repeat": "重复幻灯片", "slideshow_repeat_description": "幻灯片结束后循环播放", "slideshow_settings": "放映设置", - "sort_albums_by": "相册排序依据...", + "sort_albums_by": "相簿排序依据...", "sort_created": "创建日期", "sort_items": "项目数量", "sort_modified": "修改日期", @@ -2171,9 +2172,9 @@ "sort_people_by_similarity": "按相似性对人物进行排序", "sort_recent": "最新的照片", "sort_title": "标题", - "source": "GitHub 源代码", + "source": "GitHub源代码", "stack": "堆叠", - "stack_action_prompt": "{count} 个已堆叠", + "stack_action_prompt": "{count}个已堆叠", "stack_duplicates": "堆叠重复项目", "stack_select_one_photo": "为堆叠选择一张展示图", "stack_selected_photos": "堆叠选定的照片", @@ -2187,7 +2188,7 @@ "stop_casting": "停止投放", "stop_motion_photo": "定格照片", "stop_photo_sharing": "停止共享照片?", - "stop_photo_sharing_description": "“{partner}”将不能访问您的照片。", + "stop_photo_sharing_description": "{partner}将不能访问您的照片。", "stop_sharing_photos_with_user": "停止与此用户共享照片", "storage": "存储空间", "storage_label": "存储标签", @@ -2203,13 +2204,13 @@ "supporter": "赞助者", "swap_merge_direction": "互换合并方向", "sync": "同步", - "sync_albums": "同步相册", - "sync_albums_manual_subtitle": "将所有上传的视频和照片同步到选定的备份相册", + "sync_albums": "同步相簿", + "sync_albums_manual_subtitle": "将所有上传的视频和照片同步到选定的备份相簿", "sync_local": "同步本地", "sync_remote": "同步远程", "sync_status": "同步状态", "sync_status_subtitle": "查看和管理同步系统", - "sync_upload_album_setting_subtitle": "创建照片和视频并上传到 Immich 上的选定相册中", + "sync_upload_album_setting_subtitle": "创建照片和视频并上传到 Immich 上选定的相簿", "tag": "标签", "tag_assets": "标记项目", "tag_created": "已创建标签:{tag}", @@ -2287,7 +2288,7 @@ "unable_to_setup_pin_code": "无法设置PIN码", "unarchive": "取消归档", "unarchive_action_prompt": "已从归档中移除 {count} 项", - "unarchived_count": "{count, plural, other {取消归档 # 项}}", + "unarchived_count": "{count, plural, other {取消归档#项}}", "undo": "撤销", "unfavorite": "取消收藏", "unfavorite_action_prompt": "已从收藏中移除 {count} 项", @@ -2301,22 +2302,22 @@ "unlink_oauth": "解绑 OAuth", "unlinked_oauth_account": "解绑 OAuth 账户", "unmute_memories": "取消静音回忆", - "unnamed_album": "未命名相册", - "unnamed_album_delete_confirmation": "您确定要删除该相册吗?", + "unnamed_album": "未命名相簿", + "unnamed_album_delete_confirmation": "您确定要删除该相簿吗?", "unnamed_share": "未命名共享", "unsaved_change": "修改未保存", "unselect_all": "取消全选", "unselect_all_duplicates": "取消选择所有重复项", "unselect_all_in": "取消选择 {group} 中的所有内容", "unstack": "取消堆叠", - "unstack_action_prompt": "{count} 个未堆叠", + "unstack_action_prompt": "{count}个未堆叠", "unstacked_assets_count": "{count, plural, one {#个项目} other {#个项目}}已取消堆叠", "unsupported_field_type": "不支持的字段类型", "unsupported_file_type": "不支持上传文件 {file},当前不支持 {type} 类型的文件。", "untagged": "无标签", "untitled_workflow": "无标题工作流", "up_next": "下一个", - "update_location_action_prompt": "更新 {count} 个所选资产的位置:", + "update_location_action_prompt": "更新{count}个所选项目的位置:", "updated_at": "最后更新时间", "updated_password": "更新密码", "upload": "上传", @@ -2333,7 +2334,7 @@ "upload_status_errors": "错误", "upload_status_uploaded": "已上传", "upload_success": "上传成功,刷新页面查看新上传的项目。", - "upload_to_immich": "上传至 Immich({count})", + "upload_to_immich": "上传至Immich({count})", "uploading": "正在上传", "uploading_media": "文件上传中", "url": "URL", @@ -2346,7 +2347,7 @@ "user": "用户", "user_has_been_deleted": "此用户已被删除。", "user_id": "用户 ID", - "user_liked": "“{user}”点赞了{type, select, photo {该照片} video {该视频} asset {该项目} other {它}}", + "user_liked": "{user}点赞了{type, select, photo {该照片} video {该视频} asset {该项目} other {它}}", "user_pin_code_settings": "PIN码", "user_pin_code_settings_description": "管理你的PIN码", "user_privacy": "用户隐私", @@ -2358,7 +2359,7 @@ "user_usage_stats_description": "查看帐户使用统计信息", "username": "用户名", "users": "用户", - "users_added_to_album_count": "已将 {count, plural, one {# 个用户} other {# 个用户}} 添加到相册", + "users_added_to_album_count": "已将 {count, plural, one {# 个用户} other {# 个用户}} 添加到相簿", "utilities": "实用工具", "validate": "验证", "validate_endpoint_error": "请输入有效的 URL", @@ -2366,7 +2367,7 @@ "variables": "变量", "version": "版本", "version_announcement_closing": "您的朋友,Alex", - "version_announcement_message": "Immich 现已推出新版本。请查阅发行说明,及时更新配置以防止出错。若您通过 WatchTower 或其他工具自动更新 Immich,需特别注意。", + "version_announcement_message": "你好!Immich 的新版本已经发布。请花点时间阅读发行说明,以确保你的部署环境保持最新,从而避免配置错误。特别是如果你使用了 WatchTower 或其他自动更新机制,这一点尤为重要。", "version_history": "版本更新历史记录", "version_history_item": "在 {date} 安装 {version} 版本", "video": "视频", @@ -2376,10 +2377,10 @@ "videos_count": "{count, plural, one {#个视频} other {#个视频}}", "videos_only": "仅视频", "view": "查看", - "view_album": "查看相册", + "view_album": "查看相簿", "view_all": "查看全部", "view_all_users": "查看全部用户", - "view_asset_owners": "查看资产所有者", + "view_asset_owners": "查看项目所有者", "view_details": "查看详情", "view_in_timeline": "在时间轴中查看", "view_link": "查看链接", @@ -2392,8 +2393,9 @@ "view_stack": "查看堆叠项目", "view_user": "查看用户", "viewer_remove_from_stack": "从堆叠中移除", - "viewer_stack_use_as_main_asset": "作为主项目使用", + "viewer_stack_use_as_main_asset": "作为主画像使用", "viewer_unstack": "取消堆叠", + "visibility": "可见性", "visibility_changed": "{count, plural, one {#个人物} other {#个人物}}的可见性已修改", "visual": "可视化", "visual_builder": "可视化生成器", @@ -2404,7 +2406,7 @@ "welcome": "欢迎", "welcome_to_immich": "欢迎使用 Immich", "width": "宽度", - "wifi_name": "Wi-Fi 名称", + "wifi_name": "Wi-Fi名称", "workflow_delete_prompt": "您确定要删除此工作流吗?", "workflow_deleted": "工作流已删除", "workflow_description": "工作流描述", @@ -2424,7 +2426,7 @@ "yes": "是", "you_dont_have_any_shared_links": "您没有任何共享链接", "your_wifi_name": "您的 Wi-Fi 名称", - "zero_to_clear_rating": "按0清除资产星级", + "zero_to_clear_rating": "按0清除项目星级", "zoom_image": "缩放图像", "zoom_to_bounds": "缩放到边界" } diff --git a/i18n/zh_Hant.json b/i18n/zh_Hant.json index 4d5c60b583..0140fe8bb8 100644 --- a/i18n/zh_Hant.json +++ b/i18n/zh_Hant.json @@ -411,7 +411,7 @@ "transcoding_tone_mapping": "色調對映", "transcoding_tone_mapping_description": "在將 HDR 影片轉換為 SDR 時,盡量維持原始觀感。每種演算法在色彩、細節和亮度方面都有不同的權衡。Hable 保留細節,Mobius 保留色彩,Reinhard 保留亮度。", "transcoding_transcode_policy": "轉碼策略", - "transcoding_transcode_policy_description": "影片轉碼策略。HDR 影片一律會進行轉碼(除非停用轉碼功能)。", + "transcoding_transcode_policy_description": "影片轉碼策略。HDR 影片和像素格式不是 YUV 4:2:0 的影片一律會進行轉碼(除非停用轉碼功能)。", "transcoding_two_pass_encoding": "兩階段編碼", "transcoding_two_pass_encoding_setting_description": "執行兩次編碼以產生品質更佳的影片。啟用最大位元速率時(H.264 與 HEVC 必須啟用),此模式會依最大位元速率調整範圍並忽略 CRF。若為 VP9,則可在停用最大位元速率時使用 CRF。", "transcoding_video_codec": "影片編解碼器", @@ -615,7 +615,7 @@ "autoplay_slideshow": "自動播放幻燈片", "back": "上一頁", "back_close_deselect": "回上一頁、關閉並取消選取", - "background_backup_running_error": "後臺備份目前正在執行,無法啟動手動備份", + "background_backup_running_error": "背景備份目前正在執行,無法啟動手動備份", "background_location_permission": "背景存取位置權限", "background_location_permission_content": "為了在背景執行時切換網路,Immich 必須始終具有精確位置存取權限,才能讀取 Wi-Fi 網路名稱", "background_options": "背景選項", @@ -668,13 +668,13 @@ "backup_controller_page_remainder_sub": "選取項目中尚未備份的相片與影片", "backup_controller_page_server_storage": "伺服器儲存空間", "backup_controller_page_start_backup": "開始備份", - "backup_controller_page_status_off": "前臺自動備份已關閉", - "backup_controller_page_status_on": "前臺自動備份已開啟", + "backup_controller_page_status_off": "前景自動備份已關閉", + "backup_controller_page_status_on": "前景自動備份已開啟", "backup_controller_page_storage_format": "{used} / {total} 已使用", "backup_controller_page_to_backup": "要備份的相簿", "backup_controller_page_total_sub": "已選取相簿中的所有不重複的相片與影片", - "backup_controller_page_turn_off": "關閉前臺備份", - "backup_controller_page_turn_on": "開啟前臺備份", + "backup_controller_page_turn_off": "關閉前景備份", + "backup_controller_page_turn_on": "開啟前景備份", "backup_controller_page_uploading_file_info": "上傳中的檔案資訊", "backup_err_only_album": "不能移除唯一的相簿", "backup_error_sync_failed": "同步失敗,無法處理備份。", @@ -685,7 +685,7 @@ "backup_manual_title": "上傳狀態", "backup_options": "備份選項", "backup_options_page_title": "備份選項", - "backup_setting_subtitle": "管理背景與前臺上傳設定", + "backup_setting_subtitle": "管理背景與前景上傳設定", "backup_settings_subtitle": "管理上傳設定", "backup_upload_details_page_more_details": "點擊查看更多詳細資訊", "backward": "由舊至新", @@ -751,7 +751,7 @@ "change_your_password": "變更您的密碼", "changed_visibility_successfully": "已成功變更可見性", "charging": "充電", - "charging_requirement_mobile_backup": "後臺備份要求裝置正在充電", + "charging_requirement_mobile_backup": "背景備份要求裝置正在充電", "check_corrupt_asset_backup": "檢查損毀的備份項目", "check_corrupt_asset_backup_button": "執行檢查", "check_corrupt_asset_backup_description": "僅在已連線至 Wi-Fi 且所有項目已完成備份後執行此檢查。此程式可能需要數分鐘。", @@ -866,13 +866,14 @@ "crop_aspect_ratio_fixed": "已修復", "crop_aspect_ratio_free": "無限制", "crop_aspect_ratio_original": "原檔", + "crop_aspect_ratio_square": "方形", "curated_object_page_title": "事物", "current_device": "目前裝置", "current_pin_code": "目前 PIN 碼", "current_server_address": "目前的伺服器位址", "custom_date": "另選日期", "custom_locale": "自訂地區設定", - "custom_locale_description": "根據語言與地區格式化日期與數字", + "custom_locale_description": "根據選定語言與地區格式化日期、時間與數字", "custom_url": "自訂 URL", "cutoff_date_description": "保留最近多少天的相片…", "cutoff_day": "{count, plural, one {天} other {天}}", @@ -880,7 +881,7 @@ "daily_title_text_date": "E, MMM dd", "daily_title_text_date_year": "YYYY 年 M 月 D 日 (E)", "dark": "深色", - "dark_theme": "切換深色主題", + "dark_theme": "切換至深色主題", "date": "日期", "date_after": "起始日期", "date_and_time": "日期與時間", @@ -891,10 +892,8 @@ "day": "日", "days": "日", "deduplicate_all": "刪除所有重複項目", - "deduplication_criteria_1": "影像大小(以位元組為單位)", - "deduplication_criteria_2": "EXIF 資料數量", - "deduplication_info": "重複資料刪除資訊", - "deduplication_info_description": "若要自動預先選取項目並批次移除重複項目,我們會檢查:", + "default_locale": "默認語言", + "default_locale_description": "使用你的瀏覽器區域以格式日期和數字", "delete": "刪除", "delete_action_confirmation_message": "您確定要刪除此項目嗎?此動作會將該項目移至伺服器的垃圾桶,並詢問您是否要在本機同步刪除", "delete_action_prompt": "{count} 個已刪除", @@ -970,7 +969,7 @@ "downloading_media": "正在下載媒體", "drop_files_to_upload": "將檔案拖放到任何位置以上傳", "duplicates": "重複項目", - "duplicates_description": "逐一檢查每個群組,並標示其中是否有重複項目", + "duplicates_description": "逐一檢查每個群組,並標示其中是否有重複項目。", "duration": "顯示時長", "edit": "編輯", "edit_album": "編輯相簿", @@ -1007,6 +1006,8 @@ "editor_edits_applied_success": "已成功套用編輯", "editor_flip_horizontal": "水平翻轉", "editor_flip_vertical": "垂直翻轉", + "editor_handle_corner": "{corner, select, top_left {左上角} top_right {右上角} bottom_left {左下角} bottom_right {右下角} other {某個}}角落的控制手柄", + "editor_handle_edge": "{edge, select, top {頂部} bottom {底部} left {左側} right {右側} other {某個}} 邊緣的控制手柄", "editor_orientation": "方向", "editor_reset_all_changes": "重設變更", "editor_rotate_left": "逆時針旋轉90度", @@ -1072,7 +1073,7 @@ "failed_to_update_notification_status": "無法更新通知狀態", "incorrect_email_or_password": "電子郵件或密碼錯誤", "library_folder_already_exists": "此匯入路徑已存在。", - "page_not_found": "未找到頁面 :/", + "page_not_found": "未找到頁面", "paths_validation_failed": "{paths, plural, one {# 個路徑} other {# 個路徑}} 驗證失敗", "profile_picture_transparent_pixels": "個人資料圖片不能有透明畫素。請放大並/或移動影像。", "quota_higher_than_disk_size": "您設定的配額大於磁碟容量", @@ -1385,9 +1386,11 @@ "library_page_sort_title": "相簿標題", "licenses": "授權", "light": "淺色", + "light_theme": "切換至淺色主題", "like": "喜歡", "like_deleted": "已取消喜歡", "link_motion_video": "連結動態影片", + "link_to_docs": "請參閱 文案 以獲取更多信息。", "link_to_oauth": "連結 OAuth", "linked_oauth_account": "已連結 OAuth 帳號", "list": "清單", @@ -1649,6 +1652,7 @@ "only_favorites": "僅顯示己收藏", "open": "開啟", "open_calendar": "打開日曆", + "open_in_browser": "在瀏覽器中開啟", "open_in_map_view": "開啟地圖檢視", "open_in_openstreetmap": "用 OpenStreetMap 開啟", "open_the_search_filters": "開啟搜尋篩選器", @@ -1881,10 +1885,10 @@ "reset_pin_code_success": "PIN 碼已成功重設", "reset_pin_code_with_password": "您可隨時使用您的密碼來重設 PIN 碼", "reset_sqlite": "重設 SQLite 資料庫", - "reset_sqlite_clear_app_data": "清除數據", - "reset_sqlite_confirmation": "確定要重設所有數據嗎?你的所有設置將被重設,且你會被登出。", - "reset_sqlite_confirmation_note": "注意:你需要在清除數據後重新開啟應用。", - "reset_sqlite_done": "數據已清除。請重啟Immich及重新登錄。", + "reset_sqlite_clear_app_data": "清除資料", + "reset_sqlite_confirmation": "確定要重設所有資料嗎?你的所有設置將被重設,且你會被登出。", + "reset_sqlite_confirmation_note": "注意:你需要在清除資料後重新開啟應用。", + "reset_sqlite_done": "資料已清除。請重啟Immich及重新登入。", "reset_sqlite_success": "已成功重設 SQLite 資料庫", "reset_to_default": "重設為預設值", "resolution": "解析度", @@ -1912,7 +1916,7 @@ "saved_settings": "已儲存設定", "say_something": "說說您的想法吧", "scaffold_body_error_occurred": "發生錯誤", - "scaffold_body_error_unrecoverable": "發生無法恢復的錯誤。請在 Discord 或 Github 上分享錯誤信息及堆疊追蹤,以便我們提供協助。在被建議的情況下你可以在下方嘗試清除程式數據。", + "scaffold_body_error_unrecoverable": "發生無法恢復的錯誤。請在 Discord 或 Github 上分享錯誤資訊及堆疊追蹤,以便我們提供協助。在被建議的情況下你可以在下方嘗試清除程式資料。", "scan": "掃描", "scan_all_libraries": "掃描所有相簿", "scan_library": "掃描", @@ -2337,6 +2341,7 @@ "usage": "用量", "use_biometric": "使用生物辨識", "use_browser_locale": "使用瀏覽器語言", + "use_browser_locale_description": "根據你瀏覽器的語言和地區設定來更改日期,時間和數字的格式", "use_current_connection": "使用目前的連線", "use_custom_date_range": "改用自訂日期範圍", "user": "使用者", @@ -2390,6 +2395,7 @@ "viewer_remove_from_stack": "從堆疊中移除", "viewer_stack_use_as_main_asset": "作為主項目使用", "viewer_unstack": "取消堆疊", + "visibility": "可視性", "visibility_changed": "已變更 {count, plural, other {# 位人物}}的可見性", "visual": "視覺的", "visual_builder": "視覺構建器", From a19b7148e5a8fd9e5cd0093a006a6274a08d5b4f Mon Sep 17 00:00:00 2001 From: Mees Frensel <33722705+meesfrensel@users.noreply.github.com> Date: Fri, 3 Apr 2026 16:36:22 +0200 Subject: [PATCH 092/156] feat(web): use ui meter component for storage (#27459) --- .../side-bar/storage-space.svelte | 55 +++++----------- .../routes/admin/users/[id]/+layout.svelte | 65 +++++++------------ 2 files changed, 40 insertions(+), 80 deletions(-) diff --git a/web/src/lib/components/shared-components/side-bar/storage-space.svelte b/web/src/lib/components/shared-components/side-bar/storage-space.svelte index 5453ad8f58..43718e9db2 100644 --- a/web/src/lib/components/shared-components/side-bar/storage-space.svelte +++ b/web/src/lib/components/shared-components/side-bar/storage-space.svelte @@ -4,38 +4,18 @@ import { userInteraction } from '$lib/stores/user.svelte'; import { requestServerInfo } from '$lib/utils/auth'; import { getByteUnitString } from '$lib/utils/byte-units'; - import { LoadingSpinner } from '@immich/ui'; + import { LoadingSpinner, Meter } from '@immich/ui'; import { onMount } from 'svelte'; import { t } from 'svelte-i18n'; - let usageClasses = $state(''); - let hasQuota = $derived($user?.quotaSizeInBytes !== null); let availableBytes = $derived((hasQuota ? $user?.quotaSizeInBytes : userInteraction.serverInfo?.diskSizeRaw) || 0); let usedBytes = $derived((hasQuota ? $user?.quotaUsageInBytes : userInteraction.serverInfo?.diskUseRaw) || 0); - let usedPercentage = $derived(Math.min(Math.round((usedBytes / availableBytes) * 100), 100)); - const onUpdate = () => { - usageClasses = getUsageClass(); - }; - - const getUsageClass = () => { - if (usedPercentage >= 95) { - return 'bg-red-500'; - } - - if (usedPercentage > 80) { - return 'bg-yellow-500'; - } - - return 'bg-primary'; - }; - - $effect(() => { - if ($user) { - onUpdate(); - } - }); + const thresholds = [ + { from: 0.8, className: 'bg-warning' }, + { from: 0.95, className: 'bg-danger' }, + ]; onMount(async () => { if (userInteraction.serverInfo && $user) { @@ -46,7 +26,7 @@
-

{$t('storage')}

- {#if userInteraction.serverInfo} -

- {$t('storage_usage', { + - -

-
-
+ value={usedBytes / availableBytes} + {thresholds} + /> {:else} -
- -
+

{$t('storage')}

+ {/if}
diff --git a/web/src/routes/admin/users/[id]/+layout.svelte b/web/src/routes/admin/users/[id]/+layout.svelte index db86d05e72..c4aa9e3914 100644 --- a/web/src/routes/admin/users/[id]/+layout.svelte +++ b/web/src/routes/admin/users/[id]/+layout.svelte @@ -23,6 +23,7 @@ Heading, Icon, MenuItemType, + Meter, Stack, Text, } from '@immich/ui'; @@ -49,30 +50,21 @@ const { children, data }: Props = $props(); const { user, userPreferences, userStatistics, userSessions } = $derived(data); - const TiB = 1024 ** 4; - const usage = $derived(user.quotaUsageInBytes ?? 0); - let [statsUsage, statsUsageUnit] = $derived(getBytesWithUnit(usage, usage > TiB ? 2 : 0)); const usedBytes = $derived(user.quotaUsageInBytes ?? 0); - const availableBytes = $derived(user.quotaSizeInBytes ?? 1); - let usedPercentage = $derived(Math.min(Math.round((usedBytes / availableBytes) * 100), 100)); + const availableBytes = $derived(user.quotaSizeInBytes ?? 0); + const TiB = 1024 ** 4; + const [statsUsage, statsUsageUnit] = $derived(getBytesWithUnit(usedBytes, usedBytes > TiB ? 2 : 0)); let editedLocale = $derived(findLocale($locale).code); - let createAtDate: Date = $derived(new Date(user.createdAt)); - let updatedAtDate: Date = $derived(new Date(user.updatedAt)); - let userCreatedAtDateAndTime: string = $derived(createDateFormatter(editedLocale).formatDateTime(createAtDate)); - let userUpdatedAtDateAndTime: string = $derived(createDateFormatter(editedLocale).formatDateTime(updatedAtDate)); + let createAtDate = $derived(new Date(user.createdAt)); + let updatedAtDate = $derived(new Date(user.updatedAt)); + let userCreatedAtDateAndTime = $derived(createDateFormatter(editedLocale).formatDateTime(createAtDate)); + let userUpdatedAtDateAndTime = $derived(createDateFormatter(editedLocale).formatDateTime(updatedAtDate)); - const getUsageClass = () => { - if (usedPercentage >= 95) { - return 'bg-red-500'; - } - - if (usedPercentage > 80) { - return 'bg-yellow-500'; - } - - return 'bg-primary'; - }; + const storageUsageThresholds = [ + { from: 0.8, className: 'bg-warning' }, + { from: 0.95, className: 'bg-danger' }, + ]; const { ResetPassword, ResetPinCode, Update, Delete, Restore } = $derived(getUserAdminActions($t, user)); @@ -170,37 +162,26 @@ {#if user.quotaSizeInBytes !== null && user.quotaSizeInBytes >= 0} - - {$t('storage_usage', { + + value={usedBytes / availableBytes} + thresholds={storageUsageThresholds} + /> {:else} {$t('unlimited')} {/if} - - {#if user.quotaSizeInBytes !== null && user.quotaSizeInBytes >= 0} -
-

{$t('storage')}

-
-
-
-
- {/if}
From 95ef60628cd9c220b8c2e2fa1156dbd976cbec6a Mon Sep 17 00:00:00 2001 From: Vogeluff <72712390+Vogeluff@users.noreply.github.com> Date: Fri, 3 Apr 2026 17:37:03 +0200 Subject: [PATCH 093/156] fix(web): always show search type button (#27043) * fix(web): always show search type button * fix(web): formatting fixes * fix(web): search-type-button inactive styling outline/secondary * chore: styling --------- Co-authored-by: Alex Tran --- .../search-bar/search-bar.svelte | 72 ++++++++++--------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/web/src/lib/components/shared-components/search-bar/search-bar.svelte b/web/src/lib/components/shared-components/search-bar/search-bar.svelte index a5fae6c3f3..891331eaed 100644 --- a/web/src/lib/components/shared-components/search-bar/search-bar.svelte +++ b/web/src/lib/components/shared-components/search-bar/search-bar.svelte @@ -184,6 +184,7 @@ localStorage.setItem('searchQueryType', type); currentSearchType = type; showSearchTypeDropdown = false; + input?.focus(); }; const onsubmit = (event: Event) => { @@ -306,43 +307,46 @@ />
- {#if searchStore.isSearchEnabled} -
0} - > -
- +
0} + > +
+ - {#if showSearchTypeDropdown} -
- {#each searchTypes as searchType (searchType.value)} - - {/each} -
- {/if} -
+ onclick={() => selectSearchType(searchType.value)} + > + {searchType.label()} + + {/each} +
+ {/if}
- {/if} +
{#if showClearIcon}
From 18e8d30b1cfc72ed6ae72b81d845aa6aa99308b3 Mon Sep 17 00:00:00 2001 From: Mert <101130780+mertalev@users.noreply.github.com> Date: Fri, 3 Apr 2026 12:14:46 -0400 Subject: [PATCH 094/156] fix(server): double exif join (#27485) --- server/src/queries/search.repository.sql | 1 - server/src/repositories/search.repository.ts | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/server/src/queries/search.repository.sql b/server/src/queries/search.repository.sql index 099b7f4ee2..701d30fa58 100644 --- a/server/src/queries/search.repository.sql +++ b/server/src/queries/search.repository.sql @@ -84,7 +84,6 @@ select from "asset" inner join "asset_exif" on "asset"."id" = "asset_exif"."assetId" - left join "asset_exif" on "asset"."id" = "asset_exif"."assetId" where "asset"."visibility" = $1 and "asset"."fileCreatedAt" >= $2 diff --git a/server/src/repositories/search.repository.ts b/server/src/repositories/search.repository.ts index ba72a70fdb..8f8a5be0bd 100644 --- a/server/src/repositories/search.repository.ts +++ b/server/src/repositories/search.repository.ts @@ -8,7 +8,7 @@ import { AssetStatus, AssetType, AssetVisibility, VectorIndex } from 'src/enum'; import { probes } from 'src/repositories/database.repository'; import { DB } from 'src/schema'; import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { anyUuid, searchAssetBuilder, withExif } from 'src/utils/database'; +import { anyUuid, searchAssetBuilder, withExifInner } from 'src/utils/database'; import { paginationHelper } from 'src/utils/pagination'; import { isValidInteger } from 'src/validation'; @@ -270,7 +270,7 @@ export class SearchRepository { const orderDirection = (options.orderDirection?.toLowerCase() || 'desc') as OrderByDirection; return searchAssetBuilder(this.db, options) .selectAll('asset') - .$call(withExif) + .$call(withExifInner) .where('asset_exif.fileSizeInByte', '>', options.minFileSize || 0) .orderBy('asset_exif.fileSizeInByte', orderDirection) .limit(size) From fb1bc7f9e276e2bceec772abfa4119c136d8e0ca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 18:15:31 +0200 Subject: [PATCH 095/156] chore(deps): update dependency lodash to v4.18.1 [security] (#27461) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 53 +++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2590f4971c..ab8ae8f08d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,7 +36,7 @@ importers: version: 1.20.1 lodash-es: specifier: ^4.17.21 - version: 4.17.23 + version: 4.18.1 micromatch: specifier: ^4.0.8 version: 4.0.8 @@ -495,7 +495,7 @@ importers: version: 3.0.0(kysely@0.28.14)(postgres@3.4.8) lodash: specifier: ^4.17.21 - version: 4.17.23 + version: 4.18.1 luxon: specifier: ^3.4.2 version: 3.7.2 @@ -808,7 +808,7 @@ importers: version: 4.1.0 lodash-es: specifier: ^4.17.21 - version: 4.17.23 + version: 4.18.1 luxon: specifier: ^3.4.4 version: 3.7.2 @@ -8670,8 +8670,8 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - lodash-es@4.17.23: - resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -8715,6 +8715,9 @@ packages: lodash@4.17.23: resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -13925,7 +13928,7 @@ snapshots: html-tags: 3.3.1 html-webpack-plugin: 5.6.5(webpack@5.104.1) leven: 3.1.0 - lodash: 4.17.23 + lodash: 4.18.1 open: 8.4.2 p-map: 4.0.0 prompts: 2.4.2 @@ -14042,7 +14045,7 @@ snapshots: cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.3.2 - lodash: 4.17.23 + lodash: 4.18.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) schema-dts: 1.1.5 @@ -14084,7 +14087,7 @@ snapshots: combine-promises: 1.2.0 fs-extra: 11.3.2 js-yaml: 4.1.1 - lodash: 4.17.23 + lodash: 4.18.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) schema-dts: 1.1.5 @@ -14397,7 +14400,7 @@ snapshots: '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@18.3.1) clsx: 2.1.1 infima: 0.2.0-alpha.45 - lodash: 4.17.23 + lodash: 4.18.1 nprogress: 0.2.0 postcss: 8.5.8 prism-react-renderer: 2.4.1(react@18.3.1) @@ -14495,7 +14498,7 @@ snapshots: clsx: 2.1.1 eta: 2.2.0 fs-extra: 11.3.2 - lodash: 4.17.23 + lodash: 4.18.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -14570,7 +14573,7 @@ snapshots: fs-extra: 11.3.2 joi: 17.13.3 js-yaml: 4.1.1 - lodash: 4.17.23 + lodash: 4.18.1 tslib: 2.8.1 transitivePeerDependencies: - '@swc/core' @@ -14595,7 +14598,7 @@ snapshots: gray-matter: 4.0.3 jiti: 1.21.7 js-yaml: 4.1.1 - lodash: 4.17.23 + lodash: 4.18.1 micromatch: 4.0.8 p-queue: 6.6.2 prompts: 2.4.2 @@ -14975,7 +14978,7 @@ snapshots: dependencies: '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) - lodash: 4.17.23 + lodash: 4.18.1 '@grpc/grpc-js@1.14.3': dependencies: @@ -17925,7 +17928,7 @@ snapshots: graceful-fs: 4.2.11 is-stream: 2.0.1 lazystream: 1.0.1 - lodash: 4.17.23 + lodash: 4.18.1 normalize-path: 3.0.0 readable-stream: 4.7.0 @@ -18425,7 +18428,7 @@ snapshots: chevrotain-allstar@0.3.1(chevrotain@11.0.3): dependencies: chevrotain: 11.0.3 - lodash-es: 4.17.23 + lodash-es: 4.18.1 chevrotain@11.0.3: dependencies: @@ -19109,7 +19112,7 @@ snapshots: dagre-d3-es@7.0.13: dependencies: d3: 7.9.0 - lodash-es: 4.17.23 + lodash-es: 4.18.1 data-urls@5.0.0: dependencies: @@ -20642,7 +20645,7 @@ snapshots: dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 - lodash: 4.17.23 + lodash: 4.18.1 pretty-error: 4.0.0 tapable: 2.3.0 optionalDependencies: @@ -20834,7 +20837,7 @@ snapshots: cli-cursor: 3.1.0 cli-width: 3.0.0 figures: 3.2.0 - lodash: 4.17.23 + lodash: 4.18.1 mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 @@ -21418,7 +21421,7 @@ snapshots: lodash-es@4.17.21: {} - lodash-es@4.17.23: {} + lodash-es@4.18.1: {} lodash.camelcase@4.3.0: {} @@ -21448,6 +21451,8 @@ snapshots: lodash@4.17.23: {} + lodash@4.18.1: {} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 @@ -21829,7 +21834,7 @@ snapshots: dompurify: 3.3.1 katex: 0.16.27 khroma: 2.1.0 - lodash-es: 4.17.23 + lodash-es: 4.18.1 marked: 16.4.2 roughjs: 4.6.6 stylis: 4.3.6 @@ -22399,7 +22404,7 @@ snapshots: node-emoji@1.11.0: dependencies: - lodash: 4.17.23 + lodash: 4.18.1 node-emoji@2.2.0: dependencies: @@ -23399,7 +23404,7 @@ snapshots: pretty-error@4.0.0: dependencies: - lodash: 4.17.23 + lodash: 4.18.1 renderkid: 3.0.0 pretty-format@27.5.1: @@ -23850,7 +23855,7 @@ snapshots: css-select: 4.3.0 dom-converter: 0.2.0 htmlparser2: 6.1.0 - lodash: 4.17.23 + lodash: 4.18.1 strip-ansi: 6.0.1 repeat-string@1.6.1: {} @@ -24726,7 +24731,7 @@ snapshots: json-source-map: 0.6.1 jsonpath-plus: 10.3.0 jsonrepair: 3.13.1 - lodash-es: 4.17.23 + lodash-es: 4.18.1 memoize-one: 6.0.0 natural-compare-lite: 1.4.0 sass: 1.97.1 From a2687d674e55fdff74a3cdf421dd9dc5369e555b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 18:16:05 +0200 Subject: [PATCH 096/156] chore(deps): update dependency lodash-es to v4.18.1 [security] (#27448) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 4fcd9c2e0dfb94be5d43f09d280a3e3f2809a224 Mon Sep 17 00:00:00 2001 From: John Maguire Date: Fri, 3 Apr 2026 12:21:43 -0400 Subject: [PATCH 097/156] feat: add preview button when selecting images (#27305) * Add preview button when selecting images * Fix test helper * prettier * styling --------- Co-authored-by: Alex Tran --- e2e/src/ui/specs/timeline/utils.ts | 2 +- .../assets/thumbnail/thumbnail.svelte | 21 +++++++++++++++++++ .../gallery-viewer/gallery-viewer.svelte | 1 + .../lib/components/timeline/Timeline.svelte | 3 +++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/e2e/src/ui/specs/timeline/utils.ts b/e2e/src/ui/specs/timeline/utils.ts index b7003295cf..e67229d3c9 100644 --- a/e2e/src/ui/specs/timeline/utils.ts +++ b/e2e/src/ui/specs/timeline/utils.ts @@ -62,7 +62,7 @@ export const thumbnailUtils = { return page.locator(`[data-thumbnail-focus-container][data-asset="${assetId}"]`); }, selectButton(page: Page, assetId: string) { - return page.locator(`[data-thumbnail-focus-container][data-asset="${assetId}"] button`); + return page.locator(`[data-thumbnail-focus-container][data-asset="${assetId}"] button[role="checkbox"]`); }, selectedAsset(page: Page) { return page.locator('[data-thumbnail-focus-container][data-selected]'); diff --git a/web/src/lib/components/assets/thumbnail/thumbnail.svelte b/web/src/lib/components/assets/thumbnail/thumbnail.svelte index f7b9020d98..3413e912b0 100644 --- a/web/src/lib/components/assets/thumbnail/thumbnail.svelte +++ b/web/src/lib/components/assets/thumbnail/thumbnail.svelte @@ -19,6 +19,7 @@ mdiCheckCircle, mdiFileGifBox, mdiHeart, + mdiMagnifyPlusOutline, mdiMotionPauseOutline, mdiMotionPlayOutline, mdiRotate360, @@ -46,6 +47,7 @@ dimmed?: boolean; albumUsers?: UserResponseDto[]; onClick?: (asset: TimelineAsset) => void; + onPreview?: (asset: TimelineAsset) => void; onSelect?: (asset: TimelineAsset) => void; onMouseEvent?: (event: { isMouseOver: boolean; selectedGroupIndex: number }) => void; } @@ -65,6 +67,7 @@ showStackedIcon = true, albumUsers = [], onClick = undefined, + onPreview = undefined, onSelect = undefined, onMouseEvent = undefined, imageClass = '', @@ -442,6 +445,24 @@ {/if} + + {#if mouseOver && onPreview} + + {/if} +
handleSelectAssets(currentAsset)} + onPreview={assetInteraction.selectionActive ? () => void navigateToAsset(asset) : undefined} onMouseEvent={() => assetMouseEventHandler(currentAsset)} {showArchiveIcon} asset={currentAsset} diff --git a/web/src/lib/components/timeline/Timeline.svelte b/web/src/lib/components/timeline/Timeline.svelte index a4d135b1bd..1f7e20e375 100644 --- a/web/src/lib/components/timeline/Timeline.svelte +++ b/web/src/lib/components/timeline/Timeline.svelte @@ -698,6 +698,9 @@ void onSelectAssets(asset); }} onMouseEvent={() => handleSelectAssetCandidates(asset)} + onPreview={isSelectionMode || assetInteraction.selectionActive + ? (asset) => void navigate({ targetRoute: 'current', assetId: asset.id }) + : undefined} selected={isAssetSelected} selectionCandidate={isAssetSelectionCandidate} disabled={isAssetDisabled} From 207672c481d6ece263eea90989d6c7a5a095aca6 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Fri, 3 Apr 2026 12:26:50 -0400 Subject: [PATCH 098/156] fix: user-agent format (#27488) * fix: user-agent format * ci: fix static analysis --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> --- .../alextran/immich/core/HttpClientManager.kt | 2 +- .../ios/Runner/Core/URLSessionManager.swift | 4 +-- mobile/lib/utils/user_agent.dart | 9 +++--- server/src/utils/request.spec.ts | 29 +++++++++++++++++++ server/src/utils/request.ts | 7 +++-- 5 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 server/src/utils/request.spec.ts diff --git a/mobile/android/app/src/main/kotlin/app/alextran/immich/core/HttpClientManager.kt b/mobile/android/app/src/main/kotlin/app/alextran/immich/core/HttpClientManager.kt index cefdf4fbd2..73f7a09183 100644 --- a/mobile/android/app/src/main/kotlin/app/alextran/immich/core/HttpClientManager.kt +++ b/mobile/android/app/src/main/kotlin/app/alextran/immich/core/HttpClientManager.kt @@ -53,7 +53,7 @@ import javax.net.ssl.TrustManagerFactory import javax.net.ssl.X509KeyManager import javax.net.ssl.X509TrustManager -const val USER_AGENT = "Immich_Android_${BuildConfig.VERSION_NAME}" +const val USER_AGENT = "immich-android/${BuildConfig.VERSION_NAME}" private const val CERT_ALIAS = "client_cert" private const val PREFS_NAME = "immich.ssl" private const val PREFS_CERT_ALIAS = "immich.client_cert" diff --git a/mobile/ios/Runner/Core/URLSessionManager.swift b/mobile/ios/Runner/Core/URLSessionManager.swift index 9eb93f9ff9..e9d65d3113 100644 --- a/mobile/ios/Runner/Core/URLSessionManager.swift +++ b/mobile/ios/Runner/Core/URLSessionManager.swift @@ -36,7 +36,7 @@ extension UserDefaults { /// Old sessions are kept alive by Dart's FFI retain until all isolates release them. class URLSessionManager: NSObject { static let shared = URLSessionManager() - + private(set) var session: URLSession let delegate: URLSessionManagerDelegate private static let cacheDir: URL = { @@ -53,7 +53,7 @@ class URLSessionManager: NSObject { ) static let userAgent: String = { let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "unknown" - return "Immich_iOS_\(version)" + return "immich-ios/\(version)" }() static let cookieStorage = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: APP_GROUP) private static var serverUrls: [String] = [] diff --git a/mobile/lib/utils/user_agent.dart b/mobile/lib/utils/user_agent.dart index 232bcaec38..f08793e3a1 100644 --- a/mobile/lib/utils/user_agent.dart +++ b/mobile/lib/utils/user_agent.dart @@ -1,15 +1,16 @@ import 'dart:io' show Platform; + import 'package:package_info_plus/package_info_plus.dart'; Future getUserAgentString() async { final packageInfo = await PackageInfo.fromPlatform(); String platform; if (Platform.isAndroid) { - platform = 'Android'; + platform = 'android'; } else if (Platform.isIOS) { - platform = 'iOS'; + platform = 'ios'; } else { - platform = 'Unknown'; + platform = 'unknown'; } - return 'Immich_${platform}_${packageInfo.version}'; + return 'immich-$platform/${packageInfo.version}'; } diff --git a/server/src/utils/request.spec.ts b/server/src/utils/request.spec.ts new file mode 100644 index 0000000000..f65d19f86f --- /dev/null +++ b/server/src/utils/request.spec.ts @@ -0,0 +1,29 @@ +import { getAppVersionFromUA } from 'src/utils/request'; + +describe(getAppVersionFromUA.name, () => { + it('should get the app version for android', () => { + expect(getAppVersionFromUA('immich-android/1.123.4')).toEqual('1.123.4'); + }); + + it('should get the app version for ios', () => { + expect(getAppVersionFromUA('immich-ios/1.123.4')).toEqual('1.123.4'); + }); + + it('should get the app version for unknown', () => { + expect(getAppVersionFromUA('immich-unknown/1.123.4')).toEqual('1.123.4'); + }); + + describe('legacy format', () => { + it('should get the app version from the old android format', () => { + expect(getAppVersionFromUA('Immich_Android_1.123.4')).toEqual('1.123.4'); + }); + + it('should get the app version from the old ios format', () => { + expect(getAppVersionFromUA('Immich_iOS_1.123.4')).toEqual('1.123.4'); + }); + + it('should get the app version from the old unknown format', () => { + expect(getAppVersionFromUA('Immich_Unknown_1.123.4')).toEqual('1.123.4'); + }); + }); +}); diff --git a/server/src/utils/request.ts b/server/src/utils/request.ts index c64c980520..4cd8decf45 100644 --- a/server/src/utils/request.ts +++ b/server/src/utils/request.ts @@ -7,8 +7,11 @@ export const fromChecksum = (checksum: string): Buffer => { export const fromMaybeArray = (param: T | T[]) => (Array.isArray(param) ? param[0] : param); -const getAppVersionFromUA = (ua: string) => - ua.match(/^Immich_(?:Android|iOS)_(?.+)$/)?.groups?.appVersion ?? null; +export const getAppVersionFromUA = (ua: string) => + ua.match(/^immich-(?:android|ios|unknown)\/(?.+)$/)?.groups?.appVersion ?? + // legacy format + ua.match(/^Immich_(?:Android|iOS|Unknown)_(?.+)$/)?.groups?.appVersion ?? + null; export const getUserAgentDetails = (headers: IncomingHttpHeaders) => { const userAgent = UAParser(headers['user-agent']); From 649d14822a654a823541a8b7e5f82c41030f547c Mon Sep 17 00:00:00 2001 From: Min Idzelis Date: Fri, 3 Apr 2026 13:27:12 -0400 Subject: [PATCH 099/156] refactor(web): rename MonthGroup to TimelineMonth (#27447) Rename MonthGroup class to TimelineMonth to better convey that it represents a single month within the timeline. Updates the file, class, and all references across 16 files. Change-Id: Id50fd6d4b7d0e431571b67c0f81c0e316a6a6964 --- web/src/lib/components/timeline/Month.svelte | 16 +-- .../lib/components/timeline/Scrubber.svelte | 14 +- .../lib/components/timeline/Timeline.svelte | 97 +++++++------- .../group-insertion-cache.svelte.ts | 14 +- .../internal/intersection-support.svelte.ts | 4 +- .../internal/layout-support.svelte.ts | 8 +- .../internal/load-support.svelte.ts | 12 +- .../internal/search-support.svelte.spec.ts | 60 +++++---- .../internal/search-support.svelte.ts | 73 ++++++----- .../timeline-manager/timeline-day.svelte.ts | 14 +- .../timeline-manager.svelte.spec.ts | 96 +++++++------- .../timeline-manager.svelte.ts | 123 +++++++++--------- ...oup.svelte.ts => timeline-month.svelte.ts} | 24 ++-- .../timeline-manager/viewer-asset.svelte.ts | 2 +- web/src/lib/utils/asset-utils.ts | 10 +- web/src/lib/utils/timeline-util.ts | 2 +- 16 files changed, 295 insertions(+), 274 deletions(-) rename web/src/lib/managers/timeline-manager/{month-group.svelte.ts => timeline-month.svelte.ts} (95%) diff --git a/web/src/lib/components/timeline/Month.svelte b/web/src/lib/components/timeline/Month.svelte index 7d3fb36f54..28996b204a 100644 --- a/web/src/lib/components/timeline/Month.svelte +++ b/web/src/lib/components/timeline/Month.svelte @@ -2,7 +2,7 @@ import AssetLayout from '$lib/components/timeline/AssetLayout.svelte'; import type { AssetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte'; import { TimelineDay } from '$lib/managers/timeline-manager/timeline-day.svelte'; - import type { MonthGroup } from '$lib/managers/timeline-manager/month-group.svelte'; + import type { TimelineMonth } from '$lib/managers/timeline-manager/timeline-month.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; import { assetsSnapshot, filterIsInOrNearViewport } from '$lib/managers/timeline-manager/utils.svelte'; import type { VirtualScrollManager } from '$lib/managers/VirtualScrollManager/VirtualScrollManager.svelte'; @@ -27,7 +27,7 @@ customThumbnailLayout?: Snippet<[TimelineAsset]>; singleSelect: boolean; assetInteraction: AssetMultiSelectManager; - monthGroup: MonthGroup; + timelineMonth: TimelineMonth; manager: VirtualScrollManager; onTimelineDaySelect: (timelineDay: TimelineDay, assets: TimelineAsset[]) => void; }; @@ -36,7 +36,7 @@ customThumbnailLayout, singleSelect, assetInteraction, - monthGroup, + timelineMonth, manager, onTimelineDaySelect, }: Props = $props(); @@ -44,10 +44,10 @@ let { isUploading } = uploadAssetsStore; let hoveredTimelineDay = $state(null); - const transitionDuration = $derived(monthGroup.timelineManager.suspendTransitions && !$isUploading ? 0 : 150); + const transitionDuration = $derived(timelineMonth.timelineManager.suspendTransitions && !$isUploading ? 0 : 150); const getTimelineDayFullDate = (timelineDay: TimelineDay): string => { - const { month, year } = timelineDay.monthGroup.yearMonth; + const { month, year } = timelineDay.timelineMonth.yearMonth; const date = fromTimelinePlainDate({ year, month, @@ -57,13 +57,13 @@ }; -{#each filterIsInOrNearViewport(monthGroup.timelineDays) as timelineDay, groupIndex (timelineDay.day)} +{#each filterIsInOrNearViewport(timelineMonth.timelineDays) as timelineDay, groupIndex (timelineDay.day)} {@const isTimelineDaySelected = assetInteraction.selectedGroup.has(timelineDay.groupTitle)}
monthGroup.findAssetAbsolutePosition(assetId); + const getAssetPosition = (assetId: string, timelineMonth: TimelineMonth) => + timelineMonth.findAssetAbsolutePosition(assetId); - const scrollToAssetPosition = (assetId: string, monthGroup: MonthGroup) => { - const position = getAssetPosition(assetId, monthGroup); + const scrollToAssetPosition = (assetId: string, timelineMonth: TimelineMonth) => { + const position = getAssetPosition(assetId, timelineMonth); if (!position) { return; @@ -176,11 +177,11 @@ // the performance benefits of deferred layouts while still supporting deep linking // to assets at the end of the timeline. timelineManager.isScrollingOnLoad = true; - const monthGroup = await timelineManager.findMonthGroupForAsset({ id: assetId }); - if (!monthGroup) { + const timelineMonth = await timelineManager.findTimelineMonthForAsset({ id: assetId }); + if (!timelineMonth) { return false; } - scrollToAssetPosition(assetId, monthGroup); + scrollToAssetPosition(assetId, timelineMonth); return true; } finally { timelineManager.isScrollingOnLoad = false; @@ -188,11 +189,11 @@ }; const scrollToAsset = (asset: TimelineAsset) => { - const monthGroup = timelineManager.getMonthGroupByAssetId(asset.id); - if (!monthGroup) { + const timelineMonth = timelineManager.getTimelineMonthByAssetId(asset.id); + if (!timelineMonth) { return false; } - scrollToAssetPosition(asset.id, monthGroup); + scrollToAssetPosition(asset.id, timelineMonth); return true; }; @@ -262,10 +263,10 @@ } }); - const scrollToSegmentPercentage = (segmentTop: number, segmentHeight: number, monthGroupScrollPercent: number) => { + const scrollToSegmentPercentage = (segmentTop: number, segmentHeight: number, timelineMonthScrollPercent: number) => { const topOffset = segmentTop; const maxScrollPercent = timelineManager.maxScrollPercent; - const delta = segmentHeight * monthGroupScrollPercent; + const delta = segmentHeight * timelineMonthScrollPercent; const scrollToTop = (topOffset + delta) * maxScrollPercent; timelineManager.scrollTo(scrollToTop); @@ -294,13 +295,13 @@ scrubberMonthScrollPercent, ); } else { - const monthGroup = timelineManager.months.find( + const timelineMonth = timelineManager.months.find( ({ yearMonth: { year, month } }) => year === scrubberMonth.year && month === scrubberMonth.month, ); - if (!monthGroup) { + if (!timelineMonth) { return; } - scrollToSegmentPercentage(monthGroup.top, monthGroup.height, scrubberMonthScrollPercent); + scrollToSegmentPercentage(timelineMonth.top, timelineMonth.height, scrubberMonthScrollPercent); } }; @@ -325,28 +326,28 @@ const monthsLength = timelineManager.months.length; for (let i = -1; i < monthsLength + 1; i++) { - let monthGroup: ViewportTopMonth; - let monthGroupHeight: number; + let timelineMonth: ViewportTopMonth; + let timelineMonthHeight: number; if (i === -1) { // lead-in - monthGroup = 'lead-in'; - monthGroupHeight = timelineManager.topSectionHeight; + timelineMonth = 'lead-in'; + timelineMonthHeight = timelineManager.topSectionHeight; } else if (i === monthsLength) { // lead-out - monthGroup = 'lead-out'; - monthGroupHeight = timelineManager.bottomSectionHeight; + timelineMonth = 'lead-out'; + timelineMonthHeight = timelineManager.bottomSectionHeight; } else { - monthGroup = timelineManager.months[i].yearMonth; - monthGroupHeight = timelineManager.months[i].height; + timelineMonth = timelineManager.months[i].yearMonth; + timelineMonthHeight = timelineManager.months[i].height; } - let next = top - monthGroupHeight * maxScrollPercent; + let next = top - timelineMonthHeight * maxScrollPercent; // instead of checking for < 0, add a little wiggle room for subpixel resolution - if (next < -1 && monthGroup) { - viewportTopMonth = monthGroup; + if (next < -1 && timelineMonth) { + viewportTopMonth = timelineMonth; // allowing next to be at least 1 may cause percent to go negative, so ensure positive percentage - viewportTopMonthScrollPercent = Math.max(0, top / (monthGroupHeight * maxScrollPercent)); + viewportTopMonthScrollPercent = Math.max(0, top / (timelineMonthHeight * maxScrollPercent)); // compensate for lost precision/rounding errors advance to the next bucket, if present if (viewportTopMonthScrollPercent > 0.9999 && i + 1 < monthsLength - 1) { @@ -432,16 +433,16 @@ assetInteraction.clearCandidates(); if (assetInteraction.startAsset && rangeSelection) { - const startBucket = timelineManager.getMonthGroupByAssetId(assetInteraction.startAsset.id); - const endBucket = timelineManager.getMonthGroupByAssetId(asset.id); + const startBucket = timelineManager.getTimelineMonthByAssetId(assetInteraction.startAsset.id); + const endBucket = timelineManager.getTimelineMonthByAssetId(asset.id); if (!startBucket || !endBucket) { return; } - const monthGroups = timelineManager.months; - const startBucketIndex = monthGroups.indexOf(startBucket); - const endBucketIndex = monthGroups.indexOf(endBucket); + const timelineMonths = timelineManager.months; + const startBucketIndex = timelineMonths.indexOf(startBucket); + const endBucketIndex = timelineMonths.indexOf(endBucket); if (startBucketIndex === -1 || endBucketIndex === -1) { return; @@ -452,9 +453,9 @@ // Select/deselect assets in range (start,end) for (let index = rangeStartIndex + 1; index < rangeEndIndex; index++) { - const monthGroup = monthGroups[index]; - await timelineManager.loadMonthGroup(monthGroup.yearMonth); - for (const monthAsset of monthGroup.assetsIterator()) { + const timelineMonth = timelineMonths[index]; + await timelineManager.loadTimelineMonth(timelineMonth.yearMonth); + for (const monthAsset of timelineMonth.assetsIterator()) { if (deselect) { assetInteraction.removeAssetFromMultiselectGroup(monthAsset.id); } else { @@ -465,10 +466,10 @@ // Update date group selection in range [start,end] for (let index = rangeStartIndex; index <= rangeEndIndex; index++) { - const monthGroup = monthGroups[index]; + const timelineMonth = timelineMonths[index]; // Split month group into day groups and check each group - for (const timelineDay of monthGroup.timelineDays) { + for (const timelineDay of timelineMonth.timelineDays) { const timelineDayTitle = timelineDay.groupTitle; if (timelineDay.getAssets().every((a) => assetInteraction.hasSelectedAsset(a.id))) { assetInteraction.addGroupToMultiselectGroup(timelineDayTitle); @@ -517,7 +518,7 @@ $effect(() => { if (assetViewerManager.asset && assetViewerManager.isViewing) { const { localDateTime } = getTimes(assetViewerManager.asset.fileCreatedAt, DateTime.local().offset / 60); - void timelineManager.loadMonthGroup({ year: localDateTime.year, month: localDateTime.month }); + void timelineManager.loadTimelineMonth({ year: localDateTime.year, month: localDateTime.month }); } }); @@ -643,23 +644,23 @@ {/if}
- {#each timelineManager.months as monthGroup (monthGroup.viewId)} - {@const isInOrNearViewport = monthGroup.isInOrNearViewport} - {@const absoluteHeight = monthGroup.top} + {#each timelineManager.months as timelineMonth (timelineMonth.viewId)} + {@const isInOrNearViewport = timelineMonth.isInOrNearViewport} + {@const absoluteHeight = timelineMonth.top} - {#if !monthGroup.isLoaded} + {#if !timelineMonth.isLoaded}
- +
{:else if isInOrNearViewport}
@@ -735,7 +736,7 @@ scrollbar-width: none; } - .month-group { + .timeline-month { contain: layout size paint; transform-style: flat; backface-visibility: hidden; diff --git a/web/src/lib/managers/timeline-manager/group-insertion-cache.svelte.ts b/web/src/lib/managers/timeline-manager/group-insertion-cache.svelte.ts index 0e534c10d6..050b034d54 100644 --- a/web/src/lib/managers/timeline-manager/group-insertion-cache.svelte.ts +++ b/web/src/lib/managers/timeline-manager/group-insertion-cache.svelte.ts @@ -1,7 +1,7 @@ import { setDifference, type TimelineDate } from '$lib/utils/timeline-util'; import { AssetOrder } from '@immich/sdk'; -import type { MonthGroup } from './month-group.svelte'; import type { TimelineDay } from './timeline-day.svelte'; +import type { TimelineMonth } from './timeline-month.svelte'; import type { TimelineAsset } from './types'; export class GroupInsertionCache { @@ -34,23 +34,23 @@ export class GroupInsertionCache { get updatedBuckets() { // eslint-disable-next-line svelte/prefer-svelte-reactivity - const updated = new Set(); + const updated = new Set(); for (const group of this.changedTimelineDays) { - updated.add(group.monthGroup); + updated.add(group.timelineMonth); } return updated; } get bucketsWithNewTimelineDays() { // eslint-disable-next-line svelte/prefer-svelte-reactivity - const updated = new Set(); + const updated = new Set(); for (const group of this.newTimelineDays) { - updated.add(group.monthGroup); + updated.add(group.timelineMonth); } return updated; } - sort(monthGroup: MonthGroup, sortOrder: AssetOrder = AssetOrder.Desc) { + sort(timelineMonth: TimelineMonth, sortOrder: AssetOrder = AssetOrder.Desc) { for (const group of this.changedTimelineDays) { group.sortAssets(sortOrder); } @@ -58,7 +58,7 @@ export class GroupInsertionCache { group.sortAssets(sortOrder); } if (this.newTimelineDays.size > 0) { - monthGroup.sortTimelineDays(); + timelineMonth.sortTimelineDays(); } } } diff --git a/web/src/lib/managers/timeline-manager/internal/intersection-support.svelte.ts b/web/src/lib/managers/timeline-manager/internal/intersection-support.svelte.ts index 6fa8ab88c0..bb3ae72c81 100644 --- a/web/src/lib/managers/timeline-manager/internal/intersection-support.svelte.ts +++ b/web/src/lib/managers/timeline-manager/internal/intersection-support.svelte.ts @@ -1,6 +1,6 @@ import { TUNABLES } from '$lib/utils/tunables'; -import type { MonthGroup } from '../month-group.svelte'; import { TimelineManager } from '../timeline-manager.svelte'; +import type { TimelineMonth } from '../timeline-month.svelte'; const { TIMELINE: { INTERSECTION_EXPAND_TOP, INTERSECTION_EXPAND_BOTTOM }, @@ -40,7 +40,7 @@ function calculateViewportProximity(regionTop: number, regionBottom: number, win return ViewportProximity.InViewport; } -export function updateMonthGroupViewportProximity(timelineManager: TimelineManager, month: MonthGroup) { +export function updateTimelineMonthViewportProximity(timelineManager: TimelineManager, month: TimelineMonth) { const proximity = calculateViewportProximity( month.top, month.top + month.height, diff --git a/web/src/lib/managers/timeline-manager/internal/layout-support.svelte.ts b/web/src/lib/managers/timeline-manager/internal/layout-support.svelte.ts index a6d8d5d65f..fc2902bb63 100644 --- a/web/src/lib/managers/timeline-manager/internal/layout-support.svelte.ts +++ b/web/src/lib/managers/timeline-manager/internal/layout-support.svelte.ts @@ -1,8 +1,8 @@ -import type { MonthGroup } from '../month-group.svelte'; import { TimelineManager } from '../timeline-manager.svelte'; +import type { TimelineMonth } from '../timeline-month.svelte'; import type { UpdateGeometryOptions } from '../types'; -export function updateGeometry(timelineManager: TimelineManager, month: MonthGroup, options: UpdateGeometryOptions) { +export function updateGeometry(timelineManager: TimelineManager, month: TimelineMonth, options: UpdateGeometryOptions) { const { invalidateHeight, noDefer = false } = options; if (invalidateHeight) { month.isHeightActual = false; @@ -17,10 +17,10 @@ export function updateGeometry(timelineManager: TimelineManager, month: MonthGro } return; } - layoutMonthGroup(timelineManager, month, noDefer); + layoutTimelineMonth(timelineManager, month, noDefer); } -export function layoutMonthGroup(timelineManager: TimelineManager, month: MonthGroup, noDefer: boolean = false) { +export function layoutTimelineMonth(timelineManager: TimelineManager, month: TimelineMonth, noDefer: boolean = false) { let cumulativeHeight = 0; let cumulativeWidth = 0; let currentRowHeight = 0; diff --git a/web/src/lib/managers/timeline-manager/internal/load-support.svelte.ts b/web/src/lib/managers/timeline-manager/internal/load-support.svelte.ts index 859e818583..2d57192db2 100644 --- a/web/src/lib/managers/timeline-manager/internal/load-support.svelte.ts +++ b/web/src/lib/managers/timeline-manager/internal/load-support.svelte.ts @@ -1,21 +1,21 @@ import { authManager } from '$lib/managers/auth-manager.svelte'; import { toISOYearMonthUTC } from '$lib/utils/timeline-util'; import { getTimeBucket } from '@immich/sdk'; -import type { MonthGroup } from '../month-group.svelte'; import { TimelineManager } from '../timeline-manager.svelte'; +import type { TimelineMonth } from '../timeline-month.svelte'; import type { TimelineManagerOptions } from '../types'; export async function loadFromTimeBuckets( timelineManager: TimelineManager, - monthGroup: MonthGroup, + timelineMonth: TimelineMonth, options: TimelineManagerOptions, signal: AbortSignal, ): Promise { - if (monthGroup.getFirstAsset()) { + if (timelineMonth.getFirstAsset()) { return; } - const timeBucket = toISOYearMonthUTC(monthGroup.yearMonth); + const timeBucket = toISOYearMonthUTC(timelineMonth.yearMonth); const bucketResponse = await getTimeBucket( { ...authManager.params, @@ -46,10 +46,10 @@ export async function loadFromTimeBuckets( } } - const unprocessedAssets = monthGroup.addAssets(bucketResponse, true); + const unprocessedAssets = timelineMonth.addAssets(bucketResponse, true); if (unprocessedAssets.length > 0) { console.error( - `Warning: getTimeBucket API returning assets not in requested month: ${monthGroup.yearMonth.month}, ${JSON.stringify( + `Warning: getTimeBucket API returning assets not in requested month: ${timelineMonth.yearMonth.month}, ${JSON.stringify( unprocessedAssets.map((unprocessed) => ({ id: unprocessed.id, localDateTime: unprocessed.localDateTime, diff --git a/web/src/lib/managers/timeline-manager/internal/search-support.svelte.spec.ts b/web/src/lib/managers/timeline-manager/internal/search-support.svelte.spec.ts index 2b8ca930eb..de0cad2213 100644 --- a/web/src/lib/managers/timeline-manager/internal/search-support.svelte.spec.ts +++ b/web/src/lib/managers/timeline-manager/internal/search-support.svelte.spec.ts @@ -1,74 +1,86 @@ import { describe, expect, it } from 'vitest'; -import type { MonthGroup } from '../month-group.svelte'; -import { findClosestGroupForDate } from './search-support.svelte'; +import type { TimelineMonth } from '../timeline-month.svelte'; +import { findClosestTimelineMonthForDate } from './search-support.svelte'; -function createMockMonthGroup(year: number, month: number): MonthGroup { +function createMockTimelineMonth(year: number, month: number): TimelineMonth { return { yearMonth: { year, month }, - } as MonthGroup; + } as TimelineMonth; } -describe('findClosestGroupForDate', () => { +describe('findClosestTimelineMonthForDate', () => { it('should return undefined for empty months array', () => { - const result = findClosestGroupForDate([], { year: 2024, month: 1 }); + const result = findClosestTimelineMonthForDate([], { year: 2024, month: 1 }); expect(result).toBeUndefined(); }); it('should return the only month when there is only one month', () => { - const months = [createMockMonthGroup(2024, 6)]; - const result = findClosestGroupForDate(months, { year: 2025, month: 1 }); + const months = [createMockTimelineMonth(2024, 6)]; + const result = findClosestTimelineMonthForDate(months, { year: 2025, month: 1 }); expect(result?.yearMonth).toEqual({ year: 2024, month: 6 }); }); it('should return exact match when available', () => { - const months = [createMockMonthGroup(2024, 1), createMockMonthGroup(2024, 6), createMockMonthGroup(2024, 12)]; - const result = findClosestGroupForDate(months, { year: 2024, month: 6 }); + const months = [ + createMockTimelineMonth(2024, 1), + createMockTimelineMonth(2024, 6), + createMockTimelineMonth(2024, 12), + ]; + const result = findClosestTimelineMonthForDate(months, { year: 2024, month: 6 }); expect(result?.yearMonth).toEqual({ year: 2024, month: 6 }); }); it('should find closest month when target is between two months', () => { - const months = [createMockMonthGroup(2024, 1), createMockMonthGroup(2024, 6), createMockMonthGroup(2024, 12)]; - const result = findClosestGroupForDate(months, { year: 2024, month: 4 }); + const months = [ + createMockTimelineMonth(2024, 1), + createMockTimelineMonth(2024, 6), + createMockTimelineMonth(2024, 12), + ]; + const result = findClosestTimelineMonthForDate(months, { year: 2024, month: 4 }); expect(result?.yearMonth).toEqual({ year: 2024, month: 6 }); }); it('should handle year boundaries correctly (2023-12 vs 2024-01)', () => { - const months = [createMockMonthGroup(2023, 12), createMockMonthGroup(2024, 2)]; - const result = findClosestGroupForDate(months, { year: 2024, month: 1 }); + const months = [createMockTimelineMonth(2023, 12), createMockTimelineMonth(2024, 2)]; + const result = findClosestTimelineMonthForDate(months, { year: 2024, month: 1 }); // 2024-01 is 1 month from 2023-12 and 1 month from 2024-02 // Should return first encountered with min distance (2023-12) expect(result?.yearMonth).toEqual({ year: 2023, month: 12 }); }); it('should correctly calculate distance across years', () => { - const months = [createMockMonthGroup(2022, 6), createMockMonthGroup(2024, 6)]; - const result = findClosestGroupForDate(months, { year: 2023, month: 6 }); + const months = [createMockTimelineMonth(2022, 6), createMockTimelineMonth(2024, 6)]; + const result = findClosestTimelineMonthForDate(months, { year: 2023, month: 6 }); // Both are exactly 12 months away, should return first encountered expect(result?.yearMonth).toEqual({ year: 2022, month: 6 }); }); it('should handle target before all months', () => { - const months = [createMockMonthGroup(2024, 6), createMockMonthGroup(2024, 12)]; - const result = findClosestGroupForDate(months, { year: 2024, month: 1 }); + const months = [createMockTimelineMonth(2024, 6), createMockTimelineMonth(2024, 12)]; + const result = findClosestTimelineMonthForDate(months, { year: 2024, month: 1 }); expect(result?.yearMonth).toEqual({ year: 2024, month: 6 }); }); it('should handle target after all months', () => { - const months = [createMockMonthGroup(2024, 1), createMockMonthGroup(2024, 6)]; - const result = findClosestGroupForDate(months, { year: 2025, month: 1 }); + const months = [createMockTimelineMonth(2024, 1), createMockTimelineMonth(2024, 6)]; + const result = findClosestTimelineMonthForDate(months, { year: 2025, month: 1 }); expect(result?.yearMonth).toEqual({ year: 2024, month: 6 }); }); it('should handle multiple years correctly', () => { - const months = [createMockMonthGroup(2020, 1), createMockMonthGroup(2022, 1), createMockMonthGroup(2024, 1)]; - const result = findClosestGroupForDate(months, { year: 2023, month: 1 }); + const months = [ + createMockTimelineMonth(2020, 1), + createMockTimelineMonth(2022, 1), + createMockTimelineMonth(2024, 1), + ]; + const result = findClosestTimelineMonthForDate(months, { year: 2023, month: 1 }); // 2023-01 is 12 months from 2022-01 and 12 months from 2024-01 expect(result?.yearMonth).toEqual({ year: 2022, month: 1 }); }); it('should prefer closer month when one is clearly closer', () => { - const months = [createMockMonthGroup(2024, 1), createMockMonthGroup(2024, 10)]; - const result = findClosestGroupForDate(months, { year: 2024, month: 11 }); + const months = [createMockTimelineMonth(2024, 1), createMockTimelineMonth(2024, 10)]; + const result = findClosestTimelineMonthForDate(months, { year: 2024, month: 11 }); // 2024-11 is 1 month from 2024-10 and 10 months from 2024-01 expect(result?.yearMonth).toEqual({ year: 2024, month: 10 }); }); diff --git a/web/src/lib/managers/timeline-manager/internal/search-support.svelte.ts b/web/src/lib/managers/timeline-manager/internal/search-support.svelte.ts index 028968d18a..68e2d355a9 100644 --- a/web/src/lib/managers/timeline-manager/internal/search-support.svelte.ts +++ b/web/src/lib/managers/timeline-manager/internal/search-support.svelte.ts @@ -1,8 +1,8 @@ import { plainDateTimeCompare, type TimelineYearMonth } from '$lib/utils/timeline-util'; import { AssetOrder, type AssetResponseDto } from '@immich/sdk'; import { DateTime } from 'luxon'; -import type { MonthGroup } from '../month-group.svelte'; import { TimelineManager } from '../timeline-manager.svelte'; +import type { TimelineMonth } from '../timeline-month.svelte'; import type { AssetDescriptor, Direction, TimelineAsset } from '../types'; export async function getAssetWithOffset( @@ -11,44 +11,44 @@ export async function getAssetWithOffset( interval: 'asset' | 'day' | 'month' | 'year' = 'asset', direction: Direction, ): Promise { - const monthGroup = await timelineManager.findMonthGroupForAsset(assetDescriptor); - if (!monthGroup) { + const timelineMonth = await timelineManager.findTimelineMonthForAsset(assetDescriptor); + if (!timelineMonth) { return; } - const asset = monthGroup.findAssetById(assetDescriptor); + const asset = timelineMonth.findAssetById(assetDescriptor); if (!asset) { return; } switch (interval) { case 'asset': { - return getAssetByAssetOffset(timelineManager, asset, monthGroup, direction); + return getAssetByAssetOffset(timelineManager, asset, timelineMonth, direction); } case 'day': { - return getAssetByDayOffset(timelineManager, asset, monthGroup, direction); + return getAssetByDayOffset(timelineManager, asset, timelineMonth, direction); } case 'month': { - return getAssetByMonthOffset(timelineManager, monthGroup, direction); + return getAssetByMonthOffset(timelineManager, timelineMonth, direction); } case 'year': { - return getAssetByYearOffset(timelineManager, monthGroup, direction); + return getAssetByYearOffset(timelineManager, timelineMonth, direction); } } } -export function findMonthGroupForAsset(timelineManager: TimelineManager, id: string) { +export function findTimelineMonthForAsset(timelineManager: TimelineManager, id: string) { for (const month of timelineManager.months) { const asset = month.findAssetById({ id }); if (asset) { - return { monthGroup: month, asset }; + return { timelineMonth: month, asset }; } } } -export function getMonthGroupByDate( +export function getTimelineMonthByDate( timelineManager: TimelineManager, targetYearMonth: TimelineYearMonth, -): MonthGroup | undefined { +): TimelineMonth | undefined { return timelineManager.months.find( (month) => month.yearMonth.year === targetYearMonth.year && month.yearMonth.month === targetYearMonth.month, ); @@ -57,12 +57,12 @@ export function getMonthGroupByDate( async function getAssetByAssetOffset( timelineManager: TimelineManager, asset: TimelineAsset, - monthGroup: MonthGroup, + timelineMonth: TimelineMonth, direction: Direction, ) { - const timelineDay = monthGroup.findTimelineDayForAsset(asset); + const timelineDay = timelineMonth.findTimelineDayForAsset(asset); for await (const targetAsset of timelineManager.assetsIterator({ - startMonthGroup: monthGroup, + startTimelineMonth: timelineMonth, startTimelineDay: timelineDay, startAsset: asset, direction, @@ -76,12 +76,12 @@ async function getAssetByAssetOffset( async function getAssetByDayOffset( timelineManager: TimelineManager, asset: TimelineAsset, - monthGroup: MonthGroup, + timelineMonth: TimelineMonth, direction: Direction, ) { - const timelineDay = monthGroup.findTimelineDayForAsset(asset); + const timelineDay = timelineMonth.findTimelineDayForAsset(asset); for await (const targetAsset of timelineManager.assetsIterator({ - startMonthGroup: monthGroup, + startTimelineMonth: timelineMonth, startTimelineDay: timelineDay, startAsset: asset, direction, @@ -92,44 +92,49 @@ async function getAssetByDayOffset( } } -async function getAssetByMonthOffset(timelineManager: TimelineManager, month: MonthGroup, direction: Direction) { - for (const targetMonth of timelineManager.monthGroupIterator({ startMonthGroup: month, direction })) { +async function getAssetByMonthOffset(timelineManager: TimelineManager, month: TimelineMonth, direction: Direction) { + for (const targetMonth of timelineManager.timelineMonthIterator({ startTimelineMonth: month, direction })) { if (targetMonth.yearMonth.month !== month.yearMonth.month) { - const { value, done } = await timelineManager.assetsIterator({ startMonthGroup: targetMonth, direction }).next(); + const { value, done } = await timelineManager + .assetsIterator({ startTimelineMonth: targetMonth, direction }) + .next(); return done ? undefined : value; } } } -async function getAssetByYearOffset(timelineManager: TimelineManager, month: MonthGroup, direction: Direction) { - for (const targetMonth of timelineManager.monthGroupIterator({ startMonthGroup: month, direction })) { +async function getAssetByYearOffset(timelineManager: TimelineManager, month: TimelineMonth, direction: Direction) { + for (const targetMonth of timelineManager.timelineMonthIterator({ startTimelineMonth: month, direction })) { if (targetMonth.yearMonth.year !== month.yearMonth.year) { - const { value, done } = await timelineManager.assetsIterator({ startMonthGroup: targetMonth, direction }).next(); + const { value, done } = await timelineManager + .assetsIterator({ startTimelineMonth: targetMonth, direction }) + .next(); return done ? undefined : value; } } } export async function retrieveRange(timelineManager: TimelineManager, start: AssetDescriptor, end: AssetDescriptor) { - let { asset: startAsset, monthGroup: startMonthGroup } = findMonthGroupForAsset(timelineManager, start.id) ?? {}; - if (!startMonthGroup || !startAsset) { + let { asset: startAsset, timelineMonth: startTimelineMonth } = + findTimelineMonthForAsset(timelineManager, start.id) ?? {}; + if (!startTimelineMonth || !startAsset) { return []; } - let { asset: endAsset, monthGroup: endMonthGroup } = findMonthGroupForAsset(timelineManager, end.id) ?? {}; - if (!endMonthGroup || !endAsset) { + let { asset: endAsset, timelineMonth: endTimelineMonth } = findTimelineMonthForAsset(timelineManager, end.id) ?? {}; + if (!endTimelineMonth || !endAsset) { return []; } const assetOrder: AssetOrder = timelineManager.getAssetOrder(); if (plainDateTimeCompare(assetOrder === AssetOrder.Desc, startAsset.localDateTime, endAsset.localDateTime) < 0) { [startAsset, endAsset] = [endAsset, startAsset]; // eslint-disable-next-line no-useless-assignment - [startMonthGroup, endMonthGroup] = [endMonthGroup, startMonthGroup]; + [startTimelineMonth, endTimelineMonth] = [endTimelineMonth, startTimelineMonth]; } const range: TimelineAsset[] = []; - const startTimelineDay = startMonthGroup.findTimelineDayForAsset(startAsset); + const startTimelineDay = startTimelineMonth.findTimelineDayForAsset(startAsset); for await (const targetAsset of timelineManager.assetsIterator({ - startMonthGroup, + startTimelineMonth, startTimelineDay, startAsset, })) { @@ -141,7 +146,7 @@ export async function retrieveRange(timelineManager: TimelineManager, start: Ass return range; } -export function findMonthGroupForDate(timelineManager: TimelineManager, targetYearMonth: TimelineYearMonth) { +export function findTimelineMonthForDate(timelineManager: TimelineManager, targetYearMonth: TimelineYearMonth) { for (const month of timelineManager.months) { const { year, month: monthNum } = month.yearMonth; if (monthNum === targetYearMonth.month && year === targetYearMonth.year) { @@ -150,10 +155,10 @@ export function findMonthGroupForDate(timelineManager: TimelineManager, targetYe } } -export function findClosestGroupForDate(months: MonthGroup[], targetYearMonth: TimelineYearMonth) { +export function findClosestTimelineMonthForDate(months: TimelineMonth[], targetYearMonth: TimelineYearMonth) { const targetDate = DateTime.fromObject({ year: targetYearMonth.year, month: targetYearMonth.month }); - let closestMonth: MonthGroup | undefined; + let closestMonth: TimelineMonth | undefined; let minDifference = Number.MAX_SAFE_INTEGER; for (const month of months) { diff --git a/web/src/lib/managers/timeline-manager/timeline-day.svelte.ts b/web/src/lib/managers/timeline-manager/timeline-day.svelte.ts index d78be71c70..ec4d0188ab 100644 --- a/web/src/lib/managers/timeline-manager/timeline-day.svelte.ts +++ b/web/src/lib/managers/timeline-manager/timeline-day.svelte.ts @@ -5,12 +5,12 @@ import { getJustifiedLayoutFromAssets } from '$lib/utils/layout-utils'; import { plainDateTimeCompare } from '$lib/utils/timeline-util'; import { SvelteSet } from 'svelte/reactivity'; -import type { MonthGroup } from './month-group.svelte'; +import type { TimelineMonth } from './timeline-month.svelte'; import type { Direction, MoveAsset, TimelineAsset } from './types'; import { ViewerAsset } from './viewer-asset.svelte'; export class TimelineDay { - readonly monthGroup: MonthGroup; + readonly timelineMonth: TimelineMonth; readonly index: number; readonly groupTitle: string; readonly day: number; @@ -26,9 +26,9 @@ export class TimelineDay { #col = $state(0); #deferredLayout = false; - constructor(monthGroup: MonthGroup, index: number, day: number, groupTitle: string) { + constructor(timelineMonth: TimelineMonth, index: number, day: number, groupTitle: string) { this.index = index; - this.monthGroup = monthGroup; + this.timelineMonth = timelineMonth; this.day = day; this.groupTitle = groupTitle; } @@ -128,7 +128,7 @@ export class TimelineDay { } unprocessedIds.delete(assetId); processedIds.add(assetId); - if (remove || this.monthGroup.timelineManager.isExcluded(asset)) { + if (remove || this.timelineMonth.timelineManager.isExcluded(asset)) { this.viewerAssets.splice(index, 1); changedGeometry = true; } @@ -137,7 +137,7 @@ export class TimelineDay { } layout(options: CommonLayoutOptions, noDefer: boolean) { - if (!noDefer && !this.monthGroup.isInOrNearViewport && !this.monthGroup.timelineManager.isScrollingOnLoad) { + if (!noDefer && !this.timelineMonth.isInOrNearViewport && !this.timelineMonth.timelineManager.isScrollingOnLoad) { this.#deferredLayout = true; return; } @@ -152,6 +152,6 @@ export class TimelineDay { } get absoluteTimelineDayTop() { - return this.monthGroup.top + this.#top; + return this.timelineMonth.top + this.#top; } } diff --git a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.spec.ts b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.spec.ts index 849011bea4..6abb170cf7 100644 --- a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.spec.ts +++ b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.spec.ts @@ -1,6 +1,6 @@ import { sdkMock } from '$lib/__mocks__/sdk.mock'; import { eventManager } from '$lib/managers/event-manager.svelte'; -import { getMonthGroupByDate } from '$lib/managers/timeline-manager/internal/search-support.svelte'; +import { getTimelineMonthByDate } from '$lib/managers/timeline-manager/internal/search-support.svelte'; import { AbortError } from '$lib/utils'; import { fromISODateTimeUTCToObject } from '$lib/utils/timeline-util'; import { AssetVisibility, type AssetResponseDto, type TimeBucketAssetResponseDto } from '@immich/sdk'; @@ -95,7 +95,7 @@ describe('TimelineManager', () => { }); }); - describe('loadMonthGroup', () => { + describe('loadTimelineMonth', () => { let timelineManager: TimelineManager; const bucketAssets: Record = { '2024-01-03T00:00:00.000Z': timelineAssetFactory.buildList(1).map((asset) => @@ -131,47 +131,47 @@ describe('TimelineManager', () => { }); it('loads a month', async () => { - expect(getMonthGroupByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(0); - await timelineManager.loadMonthGroup({ year: 2024, month: 1 }); + expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(0); + await timelineManager.loadTimelineMonth({ year: 2024, month: 1 }); expect(sdkMock.getTimeBucket).toBeCalledTimes(1); - expect(getMonthGroupByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(3); + expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(3); }); it('ignores invalid months', async () => { - await timelineManager.loadMonthGroup({ year: 2023, month: 1 }); + await timelineManager.loadTimelineMonth({ year: 2023, month: 1 }); expect(sdkMock.getTimeBucket).toBeCalledTimes(0); }); it('cancels month loading', async () => { - const month = getMonthGroupByDate(timelineManager, { year: 2024, month: 1 })!; - void timelineManager.loadMonthGroup({ year: 2024, month: 1 }); + const month = getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })!; + void timelineManager.loadTimelineMonth({ year: 2024, month: 1 }); const abortSpy = vi.spyOn(month!.loader!.cancelToken!, 'abort'); month?.cancel(); expect(abortSpy).toBeCalledTimes(1); - await timelineManager.loadMonthGroup({ year: 2024, month: 1 }); - expect(getMonthGroupByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(3); + await timelineManager.loadTimelineMonth({ year: 2024, month: 1 }); + expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(3); }); it('prevents loading months multiple times', async () => { await Promise.all([ - timelineManager.loadMonthGroup({ year: 2024, month: 1 }), - timelineManager.loadMonthGroup({ year: 2024, month: 1 }), + timelineManager.loadTimelineMonth({ year: 2024, month: 1 }), + timelineManager.loadTimelineMonth({ year: 2024, month: 1 }), ]); expect(sdkMock.getTimeBucket).toBeCalledTimes(1); - await timelineManager.loadMonthGroup({ year: 2024, month: 1 }); + await timelineManager.loadTimelineMonth({ year: 2024, month: 1 }); expect(sdkMock.getTimeBucket).toBeCalledTimes(1); }); it('allows loading a canceled month', async () => { - const month = getMonthGroupByDate(timelineManager, { year: 2024, month: 1 })!; - const loadPromise = timelineManager.loadMonthGroup({ year: 2024, month: 1 }); + const month = getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })!; + const loadPromise = timelineManager.loadTimelineMonth({ year: 2024, month: 1 }); month.cancel(); await loadPromise; expect(month?.getAssets().length).toEqual(0); - await timelineManager.loadMonthGroup({ year: 2024, month: 1 }); + await timelineManager.loadTimelineMonth({ year: 2024, month: 1 }); expect(month!.getAssets().length).toEqual(3); }); }); @@ -241,7 +241,7 @@ describe('TimelineManager', () => { ); timelineManager.upsertAssets([assetOne, assetTwo, assetThree]); - const month = getMonthGroupByDate(timelineManager, { year: 2024, month: 1 }); + const month = getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 }); expect(month).not.toBeNull(); expect(month?.getAssets().length).toEqual(3); expect(month?.getAssets()[0].id).toEqual(assetOne.id); @@ -346,15 +346,15 @@ describe('TimelineManager', () => { timelineManager.upsertAssets([asset]); expect(timelineManager.months.length).toEqual(1); - expect(getMonthGroupByDate(timelineManager, { year: 2024, month: 1 })).not.toBeUndefined(); - expect(getMonthGroupByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(1); + expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })).not.toBeUndefined(); + expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(1); timelineManager.upsertAssets([updatedAsset]); expect(timelineManager.months.length).toEqual(2); - expect(getMonthGroupByDate(timelineManager, { year: 2024, month: 1 })).not.toBeUndefined(); - expect(getMonthGroupByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(0); - expect(getMonthGroupByDate(timelineManager, { year: 2024, month: 3 })).not.toBeUndefined(); - expect(getMonthGroupByDate(timelineManager, { year: 2024, month: 3 })?.getAssets().length).toEqual(1); + expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })).not.toBeUndefined(); + expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })?.getAssets().length).toEqual(0); + expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 3 })).not.toBeUndefined(); + expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 3 })?.getAssets().length).toEqual(1); }); it('yearMonth is not a shared reference with asset.localDateTime (reference bug)', () => { @@ -365,7 +365,7 @@ describe('TimelineManager', () => { ); timelineManager.upsertAssets([asset]); - const januaryMonth = getMonthGroupByDate(timelineManager, { year: 2024, month: 1 })!; + const januaryMonth = getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 })!; const monthYearMonth = januaryMonth.yearMonth; const originalMonth = monthYearMonth.month; @@ -611,8 +611,8 @@ describe('TimelineManager', () => { }); it('returns previous assetId', async () => { - await timelineManager.loadMonthGroup({ year: 2024, month: 1 }); - const month = getMonthGroupByDate(timelineManager, { year: 2024, month: 1 }); + await timelineManager.loadTimelineMonth({ year: 2024, month: 1 }); + const month = getTimelineMonthByDate(timelineManager, { year: 2024, month: 1 }); const a = month!.getAssets()[0]; const b = month!.getAssets()[1]; @@ -621,11 +621,11 @@ describe('TimelineManager', () => { }); it('returns previous assetId spanning multiple months', async () => { - await timelineManager.loadMonthGroup({ year: 2024, month: 2 }); - await timelineManager.loadMonthGroup({ year: 2024, month: 3 }); + await timelineManager.loadTimelineMonth({ year: 2024, month: 2 }); + await timelineManager.loadTimelineMonth({ year: 2024, month: 3 }); - const month = getMonthGroupByDate(timelineManager, { year: 2024, month: 2 }); - const previousMonth = getMonthGroupByDate(timelineManager, { year: 2024, month: 3 }); + const month = getTimelineMonthByDate(timelineManager, { year: 2024, month: 2 }); + const previousMonth = getTimelineMonthByDate(timelineManager, { year: 2024, month: 3 }); const a = month!.getAssets()[0]; const b = previousMonth!.getAssets()[0]; const previous = await timelineManager.getLaterAsset(a); @@ -633,23 +633,23 @@ describe('TimelineManager', () => { }); it('loads previous month', async () => { - await timelineManager.loadMonthGroup({ year: 2024, month: 2 }); - const month = getMonthGroupByDate(timelineManager, { year: 2024, month: 2 }); - const previousMonth = getMonthGroupByDate(timelineManager, { year: 2024, month: 3 }); + await timelineManager.loadTimelineMonth({ year: 2024, month: 2 }); + const month = getTimelineMonthByDate(timelineManager, { year: 2024, month: 2 }); + const previousMonth = getTimelineMonthByDate(timelineManager, { year: 2024, month: 3 }); const a = month!.getFirstAsset(); const b = previousMonth!.getFirstAsset(); - const loadMonthGroupSpy = vi.spyOn(month!.loader!, 'execute'); + const loadTimelineMonthSpy = vi.spyOn(month!.loader!, 'execute'); const previousMonthSpy = vi.spyOn(previousMonth!.loader!, 'execute'); const previous = await timelineManager.getLaterAsset(a); expect(previous).toEqual(b); - expect(loadMonthGroupSpy).toBeCalledTimes(0); + expect(loadTimelineMonthSpy).toBeCalledTimes(0); expect(previousMonthSpy).toBeCalledTimes(0); }); it('skips removed assets', async () => { - await timelineManager.loadMonthGroup({ year: 2024, month: 1 }); - await timelineManager.loadMonthGroup({ year: 2024, month: 2 }); - await timelineManager.loadMonthGroup({ year: 2024, month: 3 }); + await timelineManager.loadTimelineMonth({ year: 2024, month: 1 }); + await timelineManager.loadTimelineMonth({ year: 2024, month: 2 }); + await timelineManager.loadTimelineMonth({ year: 2024, month: 3 }); const [assetOne, assetTwo, assetThree] = await getAssets(timelineManager); timelineManager.removeAssets([assetTwo.id]); @@ -657,12 +657,12 @@ describe('TimelineManager', () => { }); it('returns null when no more assets', async () => { - await timelineManager.loadMonthGroup({ year: 2024, month: 3 }); + await timelineManager.loadTimelineMonth({ year: 2024, month: 3 }); expect(await timelineManager.getLaterAsset(timelineManager.months[0].getFirstAsset())).toBeUndefined(); }); }); - describe('getMonthGroupIndexByAssetId', () => { + describe('getTimelineMonthIndexByAssetId', () => { let timelineManager: TimelineManager; beforeEach(async () => { @@ -673,8 +673,8 @@ describe('TimelineManager', () => { }); it('returns null for invalid months', () => { - expect(getMonthGroupByDate(timelineManager, { year: -1, month: -1 })).toBeUndefined(); - expect(getMonthGroupByDate(timelineManager, { year: 2024, month: 3 })).toBeUndefined(); + expect(getTimelineMonthByDate(timelineManager, { year: -1, month: -1 })).toBeUndefined(); + expect(getTimelineMonthByDate(timelineManager, { year: 2024, month: 3 })).toBeUndefined(); }); it('returns the month index', () => { @@ -690,10 +690,10 @@ describe('TimelineManager', () => { ); timelineManager.upsertAssets([assetOne, assetTwo]); - expect(timelineManager.getMonthGroupByAssetId(assetTwo.id)?.yearMonth.year).toEqual(2024); - expect(timelineManager.getMonthGroupByAssetId(assetTwo.id)?.yearMonth.month).toEqual(2); - expect(timelineManager.getMonthGroupByAssetId(assetOne.id)?.yearMonth.year).toEqual(2024); - expect(timelineManager.getMonthGroupByAssetId(assetOne.id)?.yearMonth.month).toEqual(1); + expect(timelineManager.getTimelineMonthByAssetId(assetTwo.id)?.yearMonth.year).toEqual(2024); + expect(timelineManager.getTimelineMonthByAssetId(assetTwo.id)?.yearMonth.month).toEqual(2); + expect(timelineManager.getTimelineMonthByAssetId(assetOne.id)?.yearMonth.year).toEqual(2024); + expect(timelineManager.getTimelineMonthByAssetId(assetOne.id)?.yearMonth.month).toEqual(1); }); it('ignores removed months', () => { @@ -710,8 +710,8 @@ describe('TimelineManager', () => { timelineManager.upsertAssets([assetOne, assetTwo]); timelineManager.removeAssets([assetTwo.id]); - expect(timelineManager.getMonthGroupByAssetId(assetOne.id)?.yearMonth.year).toEqual(2024); - expect(timelineManager.getMonthGroupByAssetId(assetOne.id)?.yearMonth.month).toEqual(1); + expect(timelineManager.getTimelineMonthByAssetId(assetOne.id)?.yearMonth.year).toEqual(2024); + expect(timelineManager.getTimelineMonthByAssetId(assetOne.id)?.yearMonth.month).toEqual(1); }); }); diff --git a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts index f02667ab47..215360b8f9 100644 --- a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts +++ b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts @@ -2,15 +2,15 @@ import { VirtualScrollManager } from '$lib/managers/VirtualScrollManager/Virtual import { authManager } from '$lib/managers/auth-manager.svelte'; import { eventManager } from '$lib/managers/event-manager.svelte'; import { GroupInsertionCache } from '$lib/managers/timeline-manager/group-insertion-cache.svelte'; -import { updateMonthGroupViewportProximity } from '$lib/managers/timeline-manager/internal/intersection-support.svelte'; +import { updateTimelineMonthViewportProximity } from '$lib/managers/timeline-manager/internal/intersection-support.svelte'; import { updateGeometry } from '$lib/managers/timeline-manager/internal/layout-support.svelte'; import { loadFromTimeBuckets } from '$lib/managers/timeline-manager/internal/load-support.svelte'; import { - findClosestGroupForDate, - findMonthGroupForAsset as findMonthGroupForAssetUtil, - findMonthGroupForDate, + findClosestTimelineMonthForDate, + findTimelineMonthForAsset as findTimelineMonthForAssetUtil, + findTimelineMonthForDate, getAssetWithOffset, - getMonthGroupByDate, + getTimelineMonthByDate, retrieveRange as retrieveRangeUtil, } from '$lib/managers/timeline-manager/internal/search-support.svelte'; import { WebsocketSupport } from '$lib/managers/timeline-manager/internal/websocket-support.svelte'; @@ -27,8 +27,8 @@ import { AssetOrder, getAssetInfo, getTimeBuckets, type AssetResponseDto } from import { clamp, isEqual } from 'lodash-es'; import { SvelteDate, SvelteSet } from 'svelte/reactivity'; import { isMismatched, updateObject } from './internal/utils.svelte'; -import { MonthGroup } from './month-group.svelte'; import { TimelineDay } from './timeline-day.svelte'; +import { TimelineMonth } from './timeline-month.svelte'; import type { AssetDescriptor, Direction, @@ -40,7 +40,7 @@ import type { } from './types'; type ViewportTopMonthIntersection = { - month: MonthGroup | undefined; + month: TimelineMonth | undefined; // Where viewport top intersects month (0 = month top, 1 = month bottom) viewportTopRatioInMonth: number; // Where month bottom is in viewport (0 = viewport top, 1 = viewport bottom) @@ -67,7 +67,7 @@ export class TimelineManager extends VirtualScrollManager { isInitialized = $state(false); isScrollingOnLoad = false; - months: MonthGroup[] = $state([]); + months: TimelineMonth[] = $state([]); albumAssets: Set = new SvelteSet(); scrubberMonths: ScrubberMonth[] = $state([]); scrubberTimelineHeight: number = $state(0); @@ -137,24 +137,27 @@ export class TimelineManager extends VirtualScrollManager { } async *assetsIterator(options?: { - startMonthGroup?: MonthGroup; + startTimelineMonth?: TimelineMonth; startTimelineDay?: TimelineDay; startAsset?: TimelineAsset; direction?: Direction; }) { const direction = options?.direction ?? 'earlier'; let { startTimelineDay, startAsset } = options ?? {}; - for (const monthGroup of this.monthGroupIterator({ direction, startMonthGroup: options?.startMonthGroup })) { - await this.loadMonthGroup(monthGroup.yearMonth, { cancelable: false }); - yield* monthGroup.assetsIterator({ startTimelineDay, startAsset, direction }); + for (const timelineMonth of this.timelineMonthIterator({ + direction, + startTimelineMonth: options?.startTimelineMonth, + })) { + await this.loadTimelineMonth(timelineMonth.yearMonth, { cancelable: false }); + yield* timelineMonth.assetsIterator({ startTimelineDay, startAsset, direction }); startTimelineDay = startAsset = undefined; } } - *monthGroupIterator(options?: { direction?: Direction; startMonthGroup?: MonthGroup }) { + *timelineMonthIterator(options?: { direction?: Direction; startTimelineMonth?: TimelineMonth }) { const isEarlier = options?.direction === 'earlier'; - let startIndex = options?.startMonthGroup - ? this.months.indexOf(options.startMonthGroup) + let startIndex = options?.startTimelineMonth + ? this.months.indexOf(options.startTimelineMonth) : isEarlier ? 0 : this.months.length - 1; @@ -181,7 +184,7 @@ export class TimelineManager extends VirtualScrollManager { this.#websocketSupport = undefined; } - #calculateMonthBottomViewportRatio(month: MonthGroup | undefined) { + #calculateMonthBottomViewportRatio(month: TimelineMonth | undefined) { if (!month) { return 0; } @@ -191,7 +194,7 @@ export class TimelineManager extends VirtualScrollManager { return clamp(bottomOfMonthInViewport / windowHeight, 0, 1); } - #calculateVewportTopRatioInMonth(month: MonthGroup | undefined) { + #calculateVewportTopRatioInMonth(month: TimelineMonth | undefined) { if (!month) { return 0; } @@ -209,7 +212,7 @@ export class TimelineManager extends VirtualScrollManager { this.#updatingViewportProximities = true; for (const month of this.months) { - updateMonthGroupViewportProximity(this, month); + updateTimelineMonthViewportProximity(this, month); } const month = this.months.find((month) => month.isInViewport); @@ -225,7 +228,7 @@ export class TimelineManager extends VirtualScrollManager { this.#updatingViewportProximities = false; } - clearDeferredLayout(month: MonthGroup) { + clearDeferredLayout(month: TimelineMonth) { const hasDeferred = month.timelineDays.some((group) => group.deferredLayout); if (hasDeferred) { updateGeometry(this, month, { invalidateHeight: true, noDefer: true }); @@ -235,7 +238,7 @@ export class TimelineManager extends VirtualScrollManager { } } - async #initializeMonthGroups() { + async #initializeTimelineMonths() { const timebuckets = await getTimeBuckets({ ...authManager.params, ...this.#options, @@ -243,7 +246,7 @@ export class TimelineManager extends VirtualScrollManager { this.months = timebuckets.map((timeBucket) => { const date = new SvelteDate(timeBucket.timeBucket); - return new MonthGroup( + return new TimelineMonth( this, { year: date.getUTCFullYear(), month: date.getUTCMonth() + 1 }, timeBucket.count, @@ -280,7 +283,7 @@ export class TimelineManager extends VirtualScrollManager { this.albumAssets.clear(); await this.initTask.execute(async () => { this.#options = options; - await this.#initializeMonthGroups(); + await this.#initializeTimelineMonths(); }, true); } @@ -332,31 +335,31 @@ export class TimelineManager extends VirtualScrollManager { assetCount: month.assetsCount, year: month.yearMonth.year, month: month.yearMonth.month, - title: month.monthGroupTitle, + title: month.title, height: month.height, })); this.scrubberTimelineHeight = this.totalViewerHeight; } - async loadMonthGroup(yearMonth: TimelineYearMonth, options?: { cancelable: boolean }): Promise { + async loadTimelineMonth(yearMonth: TimelineYearMonth, options?: { cancelable: boolean }): Promise { let cancelable = true; if (options) { cancelable = options.cancelable; } - const monthGroup = getMonthGroupByDate(this, yearMonth); - if (!monthGroup) { + const timelineMonth = getTimelineMonthByDate(this, yearMonth); + if (!timelineMonth) { return; } - if (monthGroup.loader?.executed) { + if (timelineMonth.loader?.executed) { return; } - const executionStatus = await monthGroup.loader?.execute(async (signal: AbortSignal) => { - await loadFromTimeBuckets(this, monthGroup, this.#options, signal); + const executionStatus = await timelineMonth.loader?.execute(async (signal: AbortSignal) => { + await loadFromTimeBuckets(this, timelineMonth, this.#options, signal); }, cancelable); if (executionStatus === 'LOADED') { - updateGeometry(this, monthGroup, { invalidateHeight: false }); + updateGeometry(this, timelineMonth, { invalidateHeight: false }); this.updateViewportProximities(); } } @@ -367,15 +370,15 @@ export class TimelineManager extends VirtualScrollManager { this.addAssetsUpsertSegments([...notExcluded]); } - async findMonthGroupForAsset(asset: AssetDescriptor | AssetResponseDto) { + async findTimelineMonthForAsset(asset: AssetDescriptor | AssetResponseDto) { if (!this.isInitialized) { await this.initTask.waitUntilExecution(); } const { id } = asset; - let { monthGroup } = findMonthGroupForAssetUtil(this, id) ?? {}; - if (monthGroup) { - return monthGroup; + let { timelineMonth } = findTimelineMonthForAssetUtil(this, id) ?? {}; + if (timelineMonth) { + return timelineMonth; } const response = isAssetResponseDto(asset) @@ -390,20 +393,20 @@ export class TimelineManager extends VirtualScrollManager { return; } - monthGroup = await this.#loadMonthGroupAtTime(timelineAsset.localDateTime, { cancelable: false }); - if (monthGroup?.findAssetById({ id })) { - return monthGroup; + timelineMonth = await this.#loadTimelineMonthAtTime(timelineAsset.localDateTime, { cancelable: false }); + if (timelineMonth?.findAssetById({ id })) { + return timelineMonth; } } - async #loadMonthGroupAtTime(yearMonth: TimelineYearMonth, options?: { cancelable: boolean }) { - await this.loadMonthGroup(yearMonth, options); - return getMonthGroupByDate(this, yearMonth); + async #loadTimelineMonthAtTime(yearMonth: TimelineYearMonth, options?: { cancelable: boolean }) { + await this.loadTimelineMonth(yearMonth, options); + return getTimelineMonthByDate(this, yearMonth); } - getMonthGroupByAssetId(assetId: string) { - const monthGroupInfo = findMonthGroupForAssetUtil(this, assetId); - return monthGroupInfo?.monthGroup; + getTimelineMonthByAssetId(assetId: string) { + const timelineMonthInfo = findTimelineMonthForAssetUtil(this, assetId); + return timelineMonthInfo?.timelineMonth; } // note: the `index` input is expected to be in the range [0, assetCount). This @@ -414,7 +417,7 @@ export class TimelineManager extends VirtualScrollManager { let accumulatedCount = 0; - let randomMonth: MonthGroup | undefined = undefined; + let randomMonth: TimelineMonth | undefined = undefined; for (const month of this.months) { if (randomAssetIndex < accumulatedCount + month.assetsCount) { randomMonth = month; @@ -426,7 +429,7 @@ export class TimelineManager extends VirtualScrollManager { if (!randomMonth) { return; } - await this.loadMonthGroup(randomMonth.yearMonth, { cancelable: false }); + await this.loadTimelineMonth(randomMonth.yearMonth, { cancelable: false }); let randomDay: TimelineDay | undefined = undefined; for (const day of randomMonth.timelineDays) { @@ -459,10 +462,10 @@ export class TimelineManager extends VirtualScrollManager { } protected upsertSegmentForAsset(asset: TimelineAsset) { - let month = getMonthGroupByDate(this, asset.localDateTime); + let month = getTimelineMonthByDate(this, asset.localDateTime); if (!month) { - month = new MonthGroup(this, asset.localDateTime, 1, true, this.#options.order); + month = new TimelineMonth(this, asset.localDateTime, 1, true, this.#options.order); this.months.push(month); } return month; @@ -508,7 +511,7 @@ export class TimelineManager extends VirtualScrollManager { return { updated: new Set(), notUpdated: ids, changedGeometry: false }; } // eslint-disable-next-line svelte/prefer-svelte-reactivity - const changedMonthGroups = new Set(); + const changedTimelineMonths = new Set(); // eslint-disable-next-line svelte/prefer-svelte-reactivity let notUpdated = new Set(ids); // eslint-disable-next-line svelte/prefer-svelte-reactivity @@ -523,7 +526,7 @@ export class TimelineManager extends VirtualScrollManager { assetsToMoveSegments.push(result.moveAssets); } if (result.changedGeometry) { - changedMonthGroups.add(month); + changedTimelineMonths.add(month); } notUpdated = setDifference(notUpdated, result.processedIds); for (const id of result.processedIds) { @@ -537,8 +540,8 @@ export class TimelineManager extends VirtualScrollManager { } } this.addAssetsUpsertSegments(assetsToAdd); - const changedGeometry = changedMonthGroups.size > 0; - for (const month of changedMonthGroups) { + const changedGeometry = changedTimelineMonths.size > 0; + for (const month of changedTimelineMonths) { updateGeometry(this, month, { invalidateHeight: true }); } if (changedGeometry) { @@ -573,20 +576,20 @@ export class TimelineManager extends VirtualScrollManager { } async getClosestAssetToDate(dateTime: TimelineDateTime) { - let monthGroup = findMonthGroupForDate(this, dateTime); - if (!monthGroup) { + let timelineMonth = findTimelineMonthForDate(this, dateTime); + if (!timelineMonth) { // if exact match not found, find closest - monthGroup = findClosestGroupForDate(this.months, dateTime); - if (!monthGroup) { + timelineMonth = findClosestTimelineMonthForDate(this.months, dateTime); + if (!timelineMonth) { return; } } - await this.loadMonthGroup(dateTime, { cancelable: false }); - const asset = monthGroup.findClosest(dateTime); + await this.loadTimelineMonth(dateTime, { cancelable: false }); + const asset = timelineMonth.findClosest(dateTime); if (asset) { return asset; } - for await (const asset of this.assetsIterator({ startMonthGroup: monthGroup })) { + for await (const asset of this.assetsIterator({ startTimelineMonth: timelineMonth })) { return asset; } } @@ -622,8 +625,8 @@ export class TimelineManager extends VirtualScrollManager { group.sortAssets(this.#options.order); } - for (const monthGroup of context.bucketsWithNewTimelineDays) { - monthGroup.sortTimelineDays(); + for (const timelineMonth of context.bucketsWithNewTimelineDays) { + timelineMonth.sortTimelineDays(); } for (const month of context.updatedBuckets) { diff --git a/web/src/lib/managers/timeline-manager/month-group.svelte.ts b/web/src/lib/managers/timeline-manager/timeline-month.svelte.ts similarity index 95% rename from web/src/lib/managers/timeline-manager/month-group.svelte.ts rename to web/src/lib/managers/timeline-manager/timeline-month.svelte.ts index 172e91f7b0..8d97a18131 100644 --- a/web/src/lib/managers/timeline-manager/month-group.svelte.ts +++ b/web/src/lib/managers/timeline-manager/timeline-month.svelte.ts @@ -4,7 +4,7 @@ import { CancellableTask } from '$lib/utils/cancellable-task'; import { handleError } from '$lib/utils/handle-error'; import { formatGroupTitle, - formatMonthGroupTitle, + formatTimelineMonthTitle, fromTimelinePlainDate, fromTimelinePlainDateTime, fromTimelinePlainYearMonth, @@ -29,7 +29,7 @@ import type { TimelineManager } from './timeline-manager.svelte'; import type { AssetDescriptor, Direction, MoveAsset, TimelineAsset } from './types'; import { ViewerAsset } from './viewer-asset.svelte'; -export class MonthGroup { +export class TimelineMonth { #viewportProximity: ViewportProximity = $state(ViewportProximity.FarFromViewport); isLoaded: boolean = $state(false); timelineDays: TimelineDay[] = $state([]); @@ -50,7 +50,7 @@ export class MonthGroup { loader: CancellableTask | undefined; isHeightActual: boolean = $state(false); - readonly monthGroupTitle: string; + readonly title: string; readonly yearMonth: TimelineYearMonth; constructor( @@ -65,7 +65,7 @@ export class MonthGroup { this.#sortOrder = order; this.yearMonth = { year: yearMonth.year, month: yearMonth.month }; - this.monthGroupTitle = formatMonthGroupTitle(fromTimelinePlainYearMonth(yearMonth)); + this.title = formatTimelineMonthTitle(fromTimelinePlainYearMonth(yearMonth)); this.loader = new CancellableTask( () => { @@ -89,7 +89,7 @@ export class MonthGroup { } this.#viewportProximity = newValue; if (isInOrNearViewportUtil(newValue)) { - void this.timelineManager.loadMonthGroup(this.yearMonth); + void this.timelineManager.loadTimelineMonth(this.yearMonth); } else { this.cancel(); } @@ -269,9 +269,9 @@ export class MonthGroup { const index = timelineManager.months.indexOf(this); const heightDelta = height - this.#height; this.#height = height; - const prevMonthGroup = timelineManager.months[index - 1]; - if (prevMonthGroup) { - const newTop = prevMonthGroup.#top + prevMonthGroup.#height; + const previousTimelineMonth = timelineManager.months[index - 1]; + if (previousTimelineMonth) { + const newTop = previousTimelineMonth.#top + previousTimelineMonth.#height; if (this.#top !== newTop) { this.#top = newTop; } @@ -280,10 +280,10 @@ export class MonthGroup { return; } for (let cursor = index + 1; cursor < timelineManager.months.length; cursor++) { - const monthGroup = this.timelineManager.months[cursor]; - const newTop = monthGroup.#top + heightDelta; - if (monthGroup.#top !== newTop) { - monthGroup.#top = newTop; + const timelineMonth = this.timelineManager.months[cursor]; + const newTop = timelineMonth.#top + heightDelta; + if (timelineMonth.#top !== newTop) { + timelineMonth.#top = newTop; } } if (!timelineManager.viewportTopMonthIntersection) { diff --git a/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts b/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts index d7691b7025..3eba6c9a04 100644 --- a/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts +++ b/web/src/lib/managers/timeline-manager/viewer-asset.svelte.ts @@ -16,7 +16,7 @@ export class ViewerAsset { return ViewportProximity.FarFromViewport; } - const store = this.#group.monthGroup.timelineManager; + const store = this.#group.timelineMonth.timelineManager; const positionTop = this.#group.absoluteTimelineDayTop + this.position.top; return calculateViewerAssetViewportProximity(store, positionTop, this.position.height); diff --git a/web/src/lib/utils/asset-utils.ts b/web/src/lib/utils/asset-utils.ts index 33a5424157..86c014f74a 100644 --- a/web/src/lib/utils/asset-utils.ts +++ b/web/src/lib/utils/asset-utils.ts @@ -396,18 +396,18 @@ export const selectAllAssets = async (timelineManager: TimelineManager, assetInt assetInteraction.selectAll = true; try { - for (const monthGroup of timelineManager.months) { - if (!monthGroup.isLoaded) { - await timelineManager.loadMonthGroup(monthGroup.yearMonth); + for (const timelineMonth of timelineManager.months) { + if (!timelineMonth.isLoaded) { + await timelineManager.loadTimelineMonth(timelineMonth.yearMonth); } if (!assetInteraction.selectAll) { assetInteraction.clear(); break; // Cancelled } - assetInteraction.selectAssets([...monthGroup.assetsIterator()]); + assetInteraction.selectAssets([...timelineMonth.assetsIterator()]); - for (const dateGroup of monthGroup.timelineDays) { + for (const dateGroup of timelineMonth.timelineDays) { assetInteraction.addGroupToMultiselectGroup(dateGroup.groupTitle); } } diff --git a/web/src/lib/utils/timeline-util.ts b/web/src/lib/utils/timeline-util.ts index d7dc5d6aa4..f40158b44a 100644 --- a/web/src/lib/utils/timeline-util.ts +++ b/web/src/lib/utils/timeline-util.ts @@ -100,7 +100,7 @@ export const toISOYearMonthUTC = ({ year, month }: TimelineYearMonth): string => return `${yearFull}-${monthFull}-01T00:00:00.000Z`; }; -export function formatMonthGroupTitle(_date: DateTime): string { +export function formatTimelineMonthTitle(_date: DateTime): string { if (!_date.isValid) { return _date.toString(); } From 767caf9bfec2ec74ebdef6f58643ee9505da8550 Mon Sep 17 00:00:00 2001 From: Thomas <9749173+uhthomas@users.noreply.github.com> Date: Sat, 4 Apr 2026 16:39:13 +0100 Subject: [PATCH 100/156] fix(mobile): ignore pointer events on toasts (#26990) These toasts can sometimes cover UI elements and make them impossible to interact with until they are dismissed. Specifically, deleting an asset will show a toast over the video controls and prevent seeking. --- mobile/lib/widgets/common/immich_toast.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/widgets/common/immich_toast.dart b/mobile/lib/widgets/common/immich_toast.dart index dad8b33283..3e7ab273d8 100644 --- a/mobile/lib/widgets/common/immich_toast.dart +++ b/mobile/lib/widgets/common/immich_toast.dart @@ -55,7 +55,7 @@ class ImmichToast { bottom: gravity == ToastGravity.BOTTOM ? 150 : null, left: MediaQuery.of(context).size.width / 2 - 150, right: MediaQuery.of(context).size.width / 2 - 150, - child: child, + child: IgnorePointer(child: child), ); }, gravity: gravity, From bcc29903dee29f3ebd959e1ed72180ae990df970 Mon Sep 17 00:00:00 2001 From: Thomas <9749173+uhthomas@users.noreply.github.com> Date: Sat, 4 Apr 2026 22:11:59 +0100 Subject: [PATCH 101/156] chore(mobile): persist video controls visibility when swiping (#26986) At current, the controls for videos are always hidden when opening an asset from the timeline, and when swiping between assets. The latter is actually quite annoying, so it would be better UX if video controls were hidden when opening from the timeline like before, but visibility of the controls was retained when swiping between assets. --- .../widgets/asset_viewer/asset_viewer.page.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart b/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart index 4d8954d4ef..3308ae8295 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart @@ -65,13 +65,15 @@ class AssetViewer extends ConsumerStatefulWidget { static void setAsset(WidgetRef ref, BaseAsset asset) { ref.read(assetViewerProvider.notifier).reset(); + + // Hide controls by default for videos + if (asset.isVideo) ref.read(assetViewerProvider.notifier).setControls(false); + _setAsset(ref, asset); } static void _setAsset(WidgetRef ref, BaseAsset asset) { ref.read(assetViewerProvider.notifier).setAsset(asset); - // Hide controls by default for videos - if (asset.isVideo) ref.read(assetViewerProvider.notifier).setControls(false); } } From 1772f720bfd55df69ebed153ed7011109c1f79f7 Mon Sep 17 00:00:00 2001 From: Thomas <9749173+uhthomas@users.noreply.github.com> Date: Sat, 4 Apr 2026 22:12:56 +0100 Subject: [PATCH 102/156] =?UTF-8?q?fix(mobile):=20reset=20video=20controls?= =?UTF-8?q?=20hide=20timer=20when=20showing=20controls=20ch=E2=80=A6=20(#2?= =?UTF-8?q?6985)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(mobile): reset video controls hide timer when showing controls changes The hide timer currently only resets when the status of the video changes, but does not account for when the controls change. This means that two things happen: 1. The hide timer does not reset when the controls become visible again, the controls will stay visible forever or until the playback status changes. 2. The hide timer will fire too quickly, and will hide the controls much sooner than 5 seconds if the controls are hidden and then shown again before the hide timer fires. --- mobile/lib/widgets/asset_viewer/video_controls.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mobile/lib/widgets/asset_viewer/video_controls.dart b/mobile/lib/widgets/asset_viewer/video_controls.dart index ff782113c7..946e64fcbb 100644 --- a/mobile/lib/widgets/asset_viewer/video_controls.dart +++ b/mobile/lib/widgets/asset_viewer/video_controls.dart @@ -60,6 +60,9 @@ class VideoControls extends HookConsumerWidget { } }); + ref.listen(assetViewerProvider.select((v) => v.showingControls), (prev, showing) { + if (showing && prev != showing) hideTimer.reset(); + }); ref.listen(provider.select((v) => v.status), (_, __) => hideTimer.reset()); final notifier = ref.read(provider.notifier); From 123119ca0d6ed3e56ac2f005004d4c4614397d52 Mon Sep 17 00:00:00 2001 From: Thomas <9749173+uhthomas@users.noreply.github.com> Date: Sat, 4 Apr 2026 22:25:40 +0100 Subject: [PATCH 103/156] chore(mobile): reduce buffering timer duration (#27111) 3 seconds is too long for some people, and it can be confusing to see the video not playing and no indication that it's buffering. Reducing the duration of the timer should show the spinner faster and prevent confusion. Co-authored-by: Alex --- mobile/lib/providers/asset_viewer/video_player_provider.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/providers/asset_viewer/video_player_provider.dart b/mobile/lib/providers/asset_viewer/video_player_provider.dart index a4a8bd1762..8093926873 100644 --- a/mobile/lib/providers/asset_viewer/video_player_provider.dart +++ b/mobile/lib/providers/asset_viewer/video_player_provider.dart @@ -226,7 +226,7 @@ class VideoPlayerNotifier extends StateNotifier { void _startBufferingTimer() { _bufferingTimer?.cancel(); - _bufferingTimer = Timer(const Duration(seconds: 3), () { + _bufferingTimer = Timer(const Duration(seconds: 1), () { if (mounted && state.status != VideoPlaybackStatus.completed) { state = state.copyWith(status: VideoPlaybackStatus.buffering); } From 960be0c27a3a6d63a888239227bbf6dc16f4a0ae Mon Sep 17 00:00:00 2001 From: Thomas <9749173+uhthomas@users.noreply.github.com> Date: Sat, 4 Apr 2026 23:53:03 +0100 Subject: [PATCH 104/156] fix(mobile): don't update search filters in-place (#26965) * fix(mobile): don't update search filters in-place Search filters are currently modified in-place, which can feel quite janky. The chips behind the bottom sheet update instantly, and the search page gets confused because filters have been applied but no search has been initiated. Filters should keep their own copy of the filter when they're opened, and the commit + search on apply. The previous filter and pre-filter concepts were also cleaned up. They added complexity, and `search()` now owns the full life cycle of the filter. This now also reverts the changes from #27155, as this solution should be cleaner. * refactor & color tweak --------- Co-authored-by: Alex --- .../pages/search/drift_search.page.dart | 347 ++++++++---------- .../search_filter/search_filter_chip.dart | 10 +- mobile/pubspec.lock | 8 +- 3 files changed, 165 insertions(+), 200 deletions(-) diff --git a/mobile/lib/presentation/pages/search/drift_search.page.dart b/mobile/lib/presentation/pages/search/drift_search.page.dart index 452f6cc1d5..7e47a742ae 100644 --- a/mobile/lib/presentation/pages/search/drift_search.page.dart +++ b/mobile/lib/presentation/pages/search/drift_search.page.dart @@ -52,24 +52,20 @@ class DriftSearchPage extends HookConsumerWidget { : 'file_name_or_extension'.t(context: context), ); final textSearchController = useTextEditingController(); - final preFilter = ref.watch(searchPreFilterProvider); final filter = useState( SearchFilter( - people: preFilter?.people ?? {}, - location: preFilter?.location ?? SearchLocationFilter(), - camera: preFilter?.camera ?? SearchCameraFilter(), - date: preFilter?.date ?? SearchDateFilter(), - display: preFilter?.display ?? SearchDisplayFilters(isNotInAlbum: false, isArchive: false, isFavorite: false), - rating: preFilter?.rating ?? SearchRatingFilter(), - mediaType: preFilter?.mediaType ?? AssetType.other, + people: {}, + location: SearchLocationFilter(), + camera: SearchCameraFilter(), + date: SearchDateFilter(), + display: SearchDisplayFilters(isNotInAlbum: false, isArchive: false, isFavorite: false), + rating: SearchRatingFilter(), + mediaType: AssetType.other, language: "${context.locale.languageCode}-${context.locale.countryCode}", - assetId: preFilter?.assetId, - tagIds: preFilter?.tagIds ?? [], + tagIds: [], ), ); - final previousFilter = useState(null); - final hasRequestedSearch = useState(false); final dateInputFilter = useState(null); final peopleCurrentFilterWidget = useState(null); @@ -83,68 +79,58 @@ class DriftSearchPage extends HookConsumerWidget { final userPreferences = ref.watch(userMetadataPreferencesProvider); - searchFilter(SearchFilter filter) { - if (preFilter == null && filter == previousFilter.value) { + search(SearchFilter f) { + if (f == filter.value) { return; } + filter.value = f; + ref.read(paginatedSearchProvider.notifier).clear(); - if (filter.isEmpty) { - previousFilter.value = null; - hasRequestedSearch.value = false; - return; + if (!f.isEmpty) { + unawaited(ref.read(paginatedSearchProvider.notifier).search(f)); } - - hasRequestedSearch.value = true; - unawaited(ref.read(paginatedSearchProvider.notifier).search(filter)); - previousFilter.value = filter; } - search() => searchFilter(filter.value); - loadMoreSearchResults() { unawaited(ref.read(paginatedSearchProvider.notifier).search(filter.value)); } - searchPreFilter() { - if (preFilter != null) { - Future.delayed(Duration.zero, () { - filter.value = preFilter; - textSearchController.clear(); - searchFilter(preFilter); - - if (preFilter.location.city != null) { - locationCurrentFilterWidget.value = Text(preFilter.location.city!, style: context.textTheme.labelLarge); - } - }); - } - } - + // TODO: Use ref.listen with `fireImmediately` in the new riverpod version. + final preFilter = ref.watch(searchPreFilterProvider); useEffect(() { - Future.microtask(() => ref.invalidate(paginatedSearchProvider)); - searchPreFilter(); + if (preFilter == null) { + return null; + } + + Future.microtask(() { + textSearchController.clear(); + search(preFilter); + if (preFilter.location.city != null) { + locationCurrentFilterWidget.value = Text(preFilter.location.city!, style: context.textTheme.labelLarge); + } + }); return null; }, [preFilter]); showPeoplePicker() { - handleOnSelect(Set value) { - filter.value = filter.value.copyWith(people: value); + var people = filter.value.people; - final label = value.map((e) => e.name != '' ? e.name : 'no_name'.t(context: context)).join(', '); - if (label.isNotEmpty) { - peopleCurrentFilterWidget.value = Text(label, style: context.textTheme.labelLarge); - } else { - peopleCurrentFilterWidget.value = null; - } + handleOnSelect(Set value) { + people = value; } handleClear() { - filter.value = filter.value.copyWith(people: {}); - peopleCurrentFilterWidget.value = null; - search(); + search(filter.value.copyWith(people: {})); + } + + handleApply() { + final label = people.map((e) => e.name != '' ? e.name : 'no_name'.t(context: context)).join(', '); + peopleCurrentFilterWidget.value = label.isNotEmpty ? Text(label, style: context.textTheme.labelLarge) : null; + search(filter.value.copyWith(people: people)); } showFilterBottomSheet( @@ -155,7 +141,7 @@ class DriftSearchPage extends HookConsumerWidget { child: FilterBottomSheetScaffold( title: 'search_filter_people_title'.t(context: context), expanded: true, - onSearch: search, + onSearch: handleApply, onClear: handleClear, child: PeoplePicker(onSelect: handleOnSelect, filter: filter.value.people), ), @@ -164,23 +150,22 @@ class DriftSearchPage extends HookConsumerWidget { } showTagPicker() { + var tagIds = filter.value.tagIds ?? []; + String tagLabel = ''; + handleOnSelect(Iterable tags) { - filter.value = filter.value.copyWith(tagIds: tags.map((t) => t.id).toList()); - final label = tags.map((t) => t.value).join(', '); - if (label.isEmpty) { - tagCurrentFilterWidget.value = null; - } else { - tagCurrentFilterWidget.value = Text( - label.isEmpty ? 'tags'.t(context: context) : label, - style: context.textTheme.labelLarge, - ); - } + tagIds = tags.map((t) => t.id).toList(); + tagLabel = tags.map((t) => t.value).join(', '); } handleClear() { - filter.value = filter.value.copyWith(tagIds: []); tagCurrentFilterWidget.value = null; - search(); + search(filter.value.copyWith(tagIds: [])); + } + + handleApply() { + tagCurrentFilterWidget.value = tagLabel.isNotEmpty ? Text(tagLabel, style: context.textTheme.labelLarge) : null; + search(filter.value.copyWith(tagIds: tagIds)); } showFilterBottomSheet( @@ -191,7 +176,7 @@ class DriftSearchPage extends HookConsumerWidget { child: FilterBottomSheetScaffold( title: 'search_filter_tags_title'.t(context: context), expanded: true, - onSearch: search, + onSearch: handleApply, onClear: handleClear, child: TagPicker(onSelect: handleOnSelect, filter: (filter.value.tagIds ?? []).toSet()), ), @@ -200,32 +185,27 @@ class DriftSearchPage extends HookConsumerWidget { } showLocationPicker() { + var location = filter.value.location; + handleOnSelect(Map value) { - filter.value = filter.value.copyWith( - location: SearchLocationFilter(country: value['country'], city: value['city'], state: value['state']), - ); - - final locationText = []; - if (value['country'] != null) { - locationText.add(value['country']!); - } - - if (value['state'] != null) { - locationText.add(value['state']!); - } - - if (value['city'] != null) { - locationText.add(value['city']!); - } - - locationCurrentFilterWidget.value = Text(locationText.join(', '), style: context.textTheme.labelLarge); + location = SearchLocationFilter(country: value['country'], city: value['city'], state: value['state']); } handleClear() { - filter.value = filter.value.copyWith(location: SearchLocationFilter()); - locationCurrentFilterWidget.value = null; - search(); + search(filter.value.copyWith(location: SearchLocationFilter())); + } + + handleApply() { + final locationText = [ + if (location.country != null) location.country!, + if (location.state != null) location.state!, + if (location.city != null) location.city!, + ]; + locationCurrentFilterWidget.value = locationText.isNotEmpty + ? Text(locationText.join(', '), style: context.textTheme.labelLarge) + : null; + search(filter.value.copyWith(location: location)); } showFilterBottomSheet( @@ -234,7 +214,7 @@ class DriftSearchPage extends HookConsumerWidget { isDismissible: true, child: FilterBottomSheetScaffold( title: 'search_filter_location_title'.t(context: context), - onSearch: search, + onSearch: handleApply, onClear: handleClear, child: Padding( padding: const EdgeInsets.symmetric(vertical: 16.0), @@ -251,22 +231,24 @@ class DriftSearchPage extends HookConsumerWidget { } showCameraPicker() { - handleOnSelect(Map value) { - filter.value = filter.value.copyWith( - camera: SearchCameraFilter(make: value['make'], model: value['model']), - ); + var camera = filter.value.camera; - cameraCurrentFilterWidget.value = Text( - '${value['make'] ?? ''} ${value['model'] ?? ''}', - style: context.textTheme.labelLarge, - ); + handleOnSelect(Map value) { + camera = SearchCameraFilter(make: value['make'], model: value['model']); } handleClear() { - filter.value = filter.value.copyWith(camera: SearchCameraFilter()); - cameraCurrentFilterWidget.value = null; - search(); + search(filter.value.copyWith(camera: SearchCameraFilter())); + } + + handleApply() { + final make = camera.make ?? ''; + final model = camera.model ?? ''; + cameraCurrentFilterWidget.value = (make.isNotEmpty || model.isNotEmpty) + ? Text('$make $model', style: context.textTheme.labelLarge) + : null; + search(filter.value.copyWith(camera: camera)); } showFilterBottomSheet( @@ -275,7 +257,7 @@ class DriftSearchPage extends HookConsumerWidget { isDismissible: true, child: FilterBottomSheetScaffold( title: 'search_filter_camera_title'.t(context: context), - onSearch: search, + onSearch: handleApply, onClear: handleClear, child: Padding( padding: const EdgeInsets.all(16.0), @@ -288,28 +270,24 @@ class DriftSearchPage extends HookConsumerWidget { datePicked(DateFilterInputModel? selectedDate) { dateInputFilter.value = selectedDate; if (selectedDate == null) { - filter.value = filter.value.copyWith(date: SearchDateFilter()); - dateRangeCurrentFilterWidget.value = null; - unawaited(search()); + search(filter.value.copyWith(date: SearchDateFilter())); return; } final date = selectedDate.asDateTimeRange(); - - filter.value = filter.value.copyWith( - date: SearchDateFilter( - takenAfter: date.start, - takenBefore: date.end.add(const Duration(hours: 23, minutes: 59, seconds: 59)), - ), - ); - dateRangeCurrentFilterWidget.value = Text( selectedDate.asHumanReadable(context), style: context.textTheme.labelLarge, ); - - unawaited(search()); + search( + filter.value.copyWith( + date: SearchDateFilter( + takenAfter: date.start, + takenBefore: date.end.add(const Duration(hours: 23, minutes: 59, seconds: 59)), + ), + ), + ); } showDatePicker() async { @@ -376,31 +354,32 @@ class DriftSearchPage extends HookConsumerWidget { // MEDIA PICKER showMediaTypePicker() { - handleOnSelected(AssetType assetType) { - filter.value = filter.value.copyWith(mediaType: assetType); + var mediaType = filter.value.mediaType; - mediaTypeCurrentFilterWidget.value = Text( - assetType == AssetType.image - ? 'image'.t(context: context) - : assetType == AssetType.video - ? 'video'.t(context: context) - : 'all'.t(context: context), - style: context.textTheme.labelLarge, - ); + handleOnSelected(AssetType assetType) { + mediaType = assetType; } handleClear() { - filter.value = filter.value.copyWith(mediaType: AssetType.other); - mediaTypeCurrentFilterWidget.value = null; - search(); + search(filter.value.copyWith(mediaType: AssetType.other)); + } + + handleApply() { + mediaTypeCurrentFilterWidget.value = mediaType != AssetType.other + ? Text( + mediaType == AssetType.image ? 'image'.t(context: context) : 'video'.t(context: context), + style: context.textTheme.labelLarge, + ) + : null; + search(filter.value.copyWith(mediaType: mediaType)); } showFilterBottomSheet( context: context, child: FilterBottomSheetScaffold( title: 'search_filter_media_type_title'.t(context: context), - onSearch: search, + onSearch: handleApply, onClear: handleClear, child: MediaTypePicker(onSelect: handleOnSelected, filter: filter.value.mediaType), ), @@ -409,19 +388,22 @@ class DriftSearchPage extends HookConsumerWidget { // STAR RATING PICKER showStarRatingPicker() { - handleOnSelected(SearchRatingFilter rating) { - filter.value = filter.value.copyWith(rating: rating); + var rating = filter.value.rating; - ratingCurrentFilterWidget.value = Text( - 'rating_count'.t(args: {'count': rating.rating!}), - style: context.textTheme.labelLarge, - ); + handleOnSelected(SearchRatingFilter value) { + rating = value; } handleClear() { - filter.value = filter.value.copyWith(rating: SearchRatingFilter(rating: null)); ratingCurrentFilterWidget.value = null; - search(); + search(filter.value.copyWith(rating: SearchRatingFilter(rating: null))); + } + + handleApply() { + ratingCurrentFilterWidget.value = rating.rating != null + ? Text('rating_count'.t(args: {'count': rating.rating!}), style: context.textTheme.labelLarge) + : null; + search(filter.value.copyWith(rating: rating)); } showFilterBottomSheet( @@ -429,7 +411,7 @@ class DriftSearchPage extends HookConsumerWidget { isScrollControlled: true, child: FilterBottomSheetScaffold( title: 'rating'.t(context: context), - onSearch: search, + onSearch: handleApply, onClear: handleClear, child: StarRatingPicker(onSelect: handleOnSelected, filter: filter.value.rating), ), @@ -438,79 +420,54 @@ class DriftSearchPage extends HookConsumerWidget { // DISPLAY OPTION showDisplayOptionPicker() { + var display = filter.value.display; + handleOnSelect(Map value) { - final filterText = []; - value.forEach((key, value) { - switch (key) { - case DisplayOption.notInAlbum: - filter.value = filter.value.copyWith(display: filter.value.display.copyWith(isNotInAlbum: value)); - if (value) { - filterText.add('search_filter_display_option_not_in_album'.t(context: context)); - } - break; - case DisplayOption.archive: - filter.value = filter.value.copyWith(display: filter.value.display.copyWith(isArchive: value)); - if (value) { - filterText.add('archive'.t(context: context)); - } - break; - case DisplayOption.favorite: - filter.value = filter.value.copyWith(display: filter.value.display.copyWith(isFavorite: value)); - if (value) { - filterText.add('favorite'.t(context: context)); - } - break; - } - }); - - if (filterText.isEmpty) { - displayOptionCurrentFilterWidget.value = null; - return; - } - - displayOptionCurrentFilterWidget.value = Text(filterText.join(', '), style: context.textTheme.labelLarge); + display = display.copyWith( + isNotInAlbum: value[DisplayOption.notInAlbum], + isArchive: value[DisplayOption.archive], + isFavorite: value[DisplayOption.favorite], + ); } handleClear() { - filter.value = filter.value.copyWith( - display: SearchDisplayFilters(isNotInAlbum: false, isArchive: false, isFavorite: false), - ); - displayOptionCurrentFilterWidget.value = null; - search(); + search( + filter.value.copyWith( + display: SearchDisplayFilters(isNotInAlbum: false, isArchive: false, isFavorite: false), + ), + ); + } + + handleApply() { + final filterText = [ + if (display.isNotInAlbum) 'search_filter_display_option_not_in_album'.t(context: context), + if (display.isArchive) 'archive'.t(context: context), + if (display.isFavorite) 'favorite'.t(context: context), + ]; + displayOptionCurrentFilterWidget.value = filterText.isNotEmpty + ? Text(filterText.join(', '), style: context.textTheme.labelLarge) + : null; + search(filter.value.copyWith(display: display)); } showFilterBottomSheet( context: context, child: FilterBottomSheetScaffold( title: 'display_options'.t(context: context), - onSearch: search, + onSearch: handleApply, onClear: handleClear, child: DisplayOptionPicker(onSelect: handleOnSelect, filter: filter.value.display), ), ); } - handleTextSubmitted(String value) { - switch (textSearchType.value) { - case TextSearchType.context: - filter.value = filter.value.copyWith(filename: '', context: value, description: '', ocr: ''); - - break; - case TextSearchType.filename: - filter.value = filter.value.copyWith(filename: value, context: '', description: '', ocr: ''); - - break; - case TextSearchType.description: - filter.value = filter.value.copyWith(filename: '', context: '', description: value, ocr: ''); - break; - case TextSearchType.ocr: - filter.value = filter.value.copyWith(filename: '', context: '', description: '', ocr: value); - break; - } - - search(); - } + handleTextSubmitted(String value) => search(switch (textSearchType.value) { + TextSearchType.context => filter.value.copyWith(filename: '', context: value, description: '', ocr: ''), + TextSearchType.filename => filter.value.copyWith(filename: value, context: '', description: '', ocr: ''), + TextSearchType.description => filter.value.copyWith(filename: '', context: '', description: value, ocr: ''), + TextSearchType.ocr => filter.value.copyWith(filename: '', context: '', description: '', ocr: value), + }); IconData getSearchPrefixIcon() => switch (textSearchType.value) { TextSearchType.context => Icons.image_search_rounded, @@ -648,8 +605,10 @@ class DriftSearchPage extends HookConsumerWidget { hintText: searchHintText.value, key: const Key('search_text_field'), controller: textSearchController, - contentPadding: preFilter != null ? const EdgeInsets.only(left: 24) : const EdgeInsets.all(8), - prefixIcon: preFilter != null ? null : Icon(getSearchPrefixIcon(), color: context.colorScheme.primary), + contentPadding: filter.value.assetId != null ? const EdgeInsets.only(left: 24) : const EdgeInsets.all(8), + prefixIcon: filter.value.assetId != null + ? null + : Icon(getSearchPrefixIcon(), color: context.colorScheme.primary), onSubmitted: handleTextSubmitted, focusNode: ref.watch(searchInputFocusProvider), ), @@ -724,7 +683,7 @@ class DriftSearchPage extends HookConsumerWidget { ), ), ), - if (!hasRequestedSearch.value) + if (filter.value.isEmpty) const _SearchSuggestions() else _SearchResultGrid(onScrollEnd: loadMoreSearchResults), diff --git a/mobile/lib/widgets/search/search_filter/search_filter_chip.dart b/mobile/lib/widgets/search/search_filter/search_filter_chip.dart index a72b4668dd..d539ee38f3 100644 --- a/mobile/lib/widgets/search/search_filter/search_filter_chip.dart +++ b/mobile/lib/widgets/search/search_filter/search_filter_chip.dart @@ -16,7 +16,7 @@ class SearchFilterChip extends StatelessWidget { onTap: onTap, child: Card( elevation: 0, - color: context.primaryColor.withValues(alpha: .5), + color: context.colorScheme.secondaryContainer, shape: StadiumBorder(side: BorderSide(color: context.colorScheme.secondaryContainer)), child: Padding( padding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 14.0), @@ -32,7 +32,13 @@ class SearchFilterChip extends StatelessWidget { shape: StadiumBorder(side: BorderSide(color: context.colorScheme.outline.withAlpha(15))), child: Padding( padding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 14.0), - child: Row(children: [Icon(icon, size: 18), const SizedBox(width: 4.0), Text(label)]), + child: Row( + children: [ + Icon(icon, size: 18), + const SizedBox(width: 4.0), + Text(label, style: TextStyle(color: context.colorScheme.onSecondaryContainer)), + ], + ), ), ), ); diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index 89a43f328b..9d5f431792 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -1194,10 +1194,10 @@ packages: dependency: transitive description: name: meta - sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.16.0" mime: dependency: transitive description: @@ -1897,10 +1897,10 @@ packages: dependency: transitive description: name: test_api - sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 + sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" url: "https://pub.dev" source: hosted - version: "0.7.7" + version: "0.7.6" thumbhash: dependency: "direct main" description: From 776b9cbad5115760f04fc82edca19bde65d6be9d Mon Sep 17 00:00:00 2001 From: Thomas <9749173+uhthomas@users.noreply.github.com> Date: Sun, 5 Apr 2026 03:54:34 +0100 Subject: [PATCH 105/156] fix(mobile): use key on video controls (#27512) The widget is not recreated correctly when videoPlayName changes, which can cause weird behaviour with hooks and timers (like timers not firing when they should do). Using a key forces flutter to recreate the widget properly and allow the assumptions in build to work correctly. --- .../presentation/widgets/asset_viewer/bottom_bar.widget.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart index b51960bb05..1f327bf79f 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart @@ -74,7 +74,7 @@ class ViewerBottomBar extends ConsumerWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - if (asset.isVideo) VideoControls(videoPlayerName: asset.heroTag), + if (asset.isVideo) VideoControls(key: ValueKey(asset.heroTag), videoPlayerName: asset.heroTag), if (!isReadonlyModeEnabled) Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: actions), ], From 196307bca5c9a6d0dbe53351c1826e9932e26f37 Mon Sep 17 00:00:00 2001 From: Zack Pollard Date: Sun, 5 Apr 2026 10:52:59 +0100 Subject: [PATCH 106/156] chore(server): use dev version check endpoint for non-production environments (#27508) --- server/src/repositories/config.repository.ts | 8 ++++++++ server/src/repositories/server-info.repository.ts | 3 ++- server/src/services/version.service.spec.ts | 12 +----------- server/src/services/version.service.ts | 7 +------ server/test/repositories/config.repository.mock.ts | 4 ++++ 5 files changed, 16 insertions(+), 18 deletions(-) diff --git a/server/src/repositories/config.repository.ts b/server/src/repositories/config.repository.ts index 1864733f87..fa4823362e 100644 --- a/server/src/repositories/config.repository.ts +++ b/server/src/repositories/config.repository.ts @@ -75,6 +75,10 @@ export interface EnvData { server: string; }; + versionCheck: { + url: string; + }; + network: { trustedProxies: string[]; }; @@ -320,6 +324,10 @@ const getEnv = (): EnvData => { licensePublicKey: isProd ? productionKeys : stagingKeys, + versionCheck: { + url: isProd ? 'https://version.immich.cloud/version' : 'https://version.dev.immich.cloud/version', + }, + network: { trustedProxies: dto.IMMICH_TRUSTED_PROXIES ?? ['linklocal', 'uniquelocal'], }, diff --git a/server/src/repositories/server-info.repository.ts b/server/src/repositories/server-info.repository.ts index b072ccf406..85d26d6cfa 100644 --- a/server/src/repositories/server-info.repository.ts +++ b/server/src/repositories/server-info.repository.ts @@ -66,7 +66,8 @@ export class ServerInfoRepository { async getLatestRelease(): Promise { try { - const response = await fetch('https://version.immich.cloud/version'); + const { versionCheck } = this.configRepository.getEnv(); + const response = await fetch(versionCheck.url); if (!response.ok) { throw new Error(`Version check request failed with status ${response.status}: ${await response.text()}`); diff --git a/server/src/services/version.service.spec.ts b/server/src/services/version.service.spec.ts index 75b6552d09..c43d64104c 100644 --- a/server/src/services/version.service.spec.ts +++ b/server/src/services/version.service.spec.ts @@ -2,9 +2,8 @@ import { DateTime } from 'luxon'; import { SemVer } from 'semver'; import { defaults } from 'src/config'; import { serverVersion } from 'src/constants'; -import { ImmichEnvironment, JobName, JobStatus, SystemMetadataKey } from 'src/enum'; +import { JobName, JobStatus, SystemMetadataKey } from 'src/enum'; import { VersionService } from 'src/services/version.service'; -import { mockEnvData } from 'test/repositories/config.repository.mock'; import { factory } from 'test/small.factory'; import { newTestService, ServiceMocks } from 'test/utils'; @@ -73,15 +72,6 @@ describe(VersionService.name, () => { }); describe('handVersionCheck', () => { - beforeEach(() => { - mocks.config.getEnv.mockReturnValue(mockEnvData({ environment: ImmichEnvironment.Production })); - }); - - it('should not run in dev mode', async () => { - mocks.config.getEnv.mockReturnValue(mockEnvData({ environment: ImmichEnvironment.Development })); - await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Skipped); - }); - it('should not run if the last check was < 60 minutes ago', async () => { mocks.systemMetadata.get.mockResolvedValue({ checkedAt: DateTime.utc().minus({ minutes: 5 }).toISO(), diff --git a/server/src/services/version.service.ts b/server/src/services/version.service.ts index 8f0ceb1d87..5e2f268796 100644 --- a/server/src/services/version.service.ts +++ b/server/src/services/version.service.ts @@ -4,7 +4,7 @@ import semver, { SemVer } from 'semver'; import { serverVersion } from 'src/constants'; import { OnEvent, OnJob } from 'src/decorators'; import { ReleaseNotification, ServerVersionResponseDto } from 'src/dtos/server.dto'; -import { DatabaseLock, ImmichEnvironment, JobName, JobStatus, QueueName, SystemMetadataKey } from 'src/enum'; +import { DatabaseLock, JobName, JobStatus, QueueName, SystemMetadataKey } from 'src/enum'; import { ArgOf } from 'src/repositories/event.repository'; import { BaseService } from 'src/services/base.service'; import { VersionCheckMetadata } from 'src/types'; @@ -71,11 +71,6 @@ export class VersionService extends BaseService { try { this.logger.debug('Running version check'); - const { environment } = this.configRepository.getEnv(); - if (environment === ImmichEnvironment.Development) { - return JobStatus.Skipped; - } - const { newVersionCheck } = await this.getConfig({ withCache: true }); if (!newVersionCheck.enabled) { return JobStatus.Skipped; diff --git a/server/test/repositories/config.repository.mock.ts b/server/test/repositories/config.repository.mock.ts index b5ab6e2054..797c08c4db 100644 --- a/server/test/repositories/config.repository.mock.ts +++ b/server/test/repositories/config.repository.mock.ts @@ -44,6 +44,10 @@ const envData: EnvData = { server: 'server-public-key', }, + versionCheck: { + url: 'https://version.immich.cloud/version', + }, + network: { trustedProxies: [], }, From 6fcf651d7604b1d7b211b2640dab38e2d94b7372 Mon Sep 17 00:00:00 2001 From: Luis Nachtigall <31982496+LeLunZ@users.noreply.github.com> Date: Sun, 5 Apr 2026 22:11:02 +0200 Subject: [PATCH 107/156] refactor(mobile): IOS replace DispatchQueue + DispatchSemaphore with OperationQueue for image processing (#27471) refactor: replace DispatchQueue + DispatchSemaphore with OperationQueue for image processing --- .../ios/Runner/Images/ImageProcessing.swift | 9 ++++++-- .../ios/Runner/Images/LocalImagesImpl.swift | 23 ++++++------------- .../ios/Runner/Images/RemoteImagesImpl.swift | 5 +--- 3 files changed, 15 insertions(+), 22 deletions(-) diff --git a/mobile/ios/Runner/Images/ImageProcessing.swift b/mobile/ios/Runner/Images/ImageProcessing.swift index 2270bbffac..686a3464a7 100644 --- a/mobile/ios/Runner/Images/ImageProcessing.swift +++ b/mobile/ios/Runner/Images/ImageProcessing.swift @@ -1,7 +1,12 @@ import Foundation enum ImageProcessing { - static let queue = DispatchQueue(label: "thumbnail.processing", qos: .userInitiated, attributes: .concurrent) - static let semaphore = DispatchSemaphore(value: ProcessInfo.processInfo.activeProcessorCount * 2) + static let queue = { + let q = OperationQueue() + q.name = "thumbnail.processing" + q.qualityOfService = .userInitiated + q.maxConcurrentOperationCount = ProcessInfo.processInfo.activeProcessorCount * 2 + return q + }() static let cancelledResult = Result<[String: Int64]?, any Error>.success(nil) } diff --git a/mobile/ios/Runner/Images/LocalImagesImpl.swift b/mobile/ios/Runner/Images/LocalImagesImpl.swift index 303ff5bc33..f0710bf75f 100644 --- a/mobile/ios/Runner/Images/LocalImagesImpl.swift +++ b/mobile/ios/Runner/Images/LocalImagesImpl.swift @@ -4,7 +4,7 @@ import MobileCoreServices import Photos class LocalImageRequest { - weak var workItem: DispatchWorkItem? + weak var operation: Operation? var isCancelled = false let callback: (Result<[String: Int64]?, any Error>) -> Void @@ -50,7 +50,7 @@ class LocalImageApiImpl: LocalImageApi { }() func getThumbhash(thumbhash: String, completion: @escaping (Result<[String : Int64], any Error>) -> Void) { - ImageProcessing.queue.async { + ImageProcessing.queue.addOperation { guard let data = Data(base64Encoded: thumbhash) else { return completion(.failure(PigeonError(code: "", message: "Invalid base64 string: \(thumbhash)", details: nil)))} @@ -66,16 +66,7 @@ class LocalImageApiImpl: LocalImageApi { func requestImage(assetId: String, requestId: Int64, width: Int64, height: Int64, isVideo: Bool, preferEncoded: Bool, completion: @escaping (Result<[String: Int64]?, any Error>) -> Void) { let request = LocalImageRequest(callback: completion) - let item = DispatchWorkItem { - if request.isCancelled { - return completion(ImageProcessing.cancelledResult) - } - - ImageProcessing.semaphore.wait() - defer { - ImageProcessing.semaphore.signal() - } - + let operation = BlockOperation { if request.isCancelled { return completion(ImageProcessing.cancelledResult) } @@ -180,9 +171,9 @@ class LocalImageApiImpl: LocalImageApi { } } - request.workItem = item + request.operation = operation Self.add(requestId: requestId, request: request) - ImageProcessing.queue.async(execute: item) + ImageProcessing.queue.addOperation(operation) } func cancelRequest(requestId: Int64) { @@ -201,8 +192,8 @@ class LocalImageApiImpl: LocalImageApi { requestQueue.async { guard let request = requests.removeValue(forKey: requestId) else { return } request.isCancelled = true - guard let item = request.workItem else { return } - if item.isCancelled { + guard let operation = request.operation else { return } + if operation.isCancelled { cancelQueue.async { request.callback(ImageProcessing.cancelledResult) } } } diff --git a/mobile/ios/Runner/Images/RemoteImagesImpl.swift b/mobile/ios/Runner/Images/RemoteImagesImpl.swift index f2a0c37254..7c69acba76 100644 --- a/mobile/ios/Runner/Images/RemoteImagesImpl.swift +++ b/mobile/ios/Runner/Images/RemoteImagesImpl.swift @@ -73,10 +73,7 @@ class RemoteImageApiImpl: NSObject, RemoteImageApi { return request.completion(.failure(PigeonError(code: "", message: "No data received", details: nil))) } - ImageProcessing.queue.async { - ImageProcessing.semaphore.wait() - defer { ImageProcessing.semaphore.signal() } - + ImageProcessing.queue.addOperation { if request.isCancelled { return request.completion(ImageProcessing.cancelledResult) } From f29c06799f89fefeb54bb188119b891d571adab9 Mon Sep 17 00:00:00 2001 From: Min Idzelis Date: Sun, 5 Apr 2026 17:19:58 -0400 Subject: [PATCH 108/156] fix(web): isFullScreen initial value check is incorrect (#27520) --- web/src/lib/components/asset-viewer/asset-viewer.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte index 9d5530df0f..932d10925e 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte @@ -338,7 +338,7 @@ onAction?.(action); }; - let isFullScreen = $derived(fullscreenElement !== null); + let isFullScreen = $derived(!!fullscreenElement); $effect(() => { if (album && !album.isActivityEnabled && activityManager.commentCount === 0) { From cd86a83c33b8091d3e3c059785e38ddbc649172b Mon Sep 17 00:00:00 2001 From: Luis Nachtigall <31982496+LeLunZ@users.noreply.github.com> Date: Mon, 6 Apr 2026 00:55:43 +0200 Subject: [PATCH 109/156] refactor(mobile): introduce image request registry on iOS (#27486) * refactor: replace DispatchQueue + DispatchSemaphore with OperationQueue for image processing * implement RequestRegistry and UnfairLock for managing cancellable requests * implement requests registry for local and remote image processing * remove Cancellable protocol and cancel method from request registry * use mutex --------- Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com> --- mobile/ios/Runner.xcodeproj/project.pbxproj | 34 +++++++++-- mobile/ios/Runner/Images/ImageRequest.swift | 14 +++++ .../ios/Runner/Images/LocalImagesImpl.swift | 57 +++++++------------ .../ios/Runner/Images/RemoteImagesImpl.swift | 27 ++++----- mobile/ios/Runner/Utility/Mutex.swift | 54 ++++++++++++++++++ 5 files changed, 125 insertions(+), 61 deletions(-) create mode 100644 mobile/ios/Runner/Images/ImageRequest.swift create mode 100644 mobile/ios/Runner/Utility/Mutex.swift diff --git a/mobile/ios/Runner.xcodeproj/project.pbxproj b/mobile/ios/Runner.xcodeproj/project.pbxproj index 22a7abcbac..178454f381 100644 --- a/mobile/ios/Runner.xcodeproj/project.pbxproj +++ b/mobile/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 77; objects = { /* Begin PBXBuildFile section */ @@ -16,6 +16,7 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A01DD69B2F7F43B40049AB63 /* ImageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A01DD6982F7F43B40049AB63 /* ImageRequest.swift */; }; B21E34AA2E5AFD2B0031FDB9 /* BackgroundWorkerApiImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = B21E34A92E5AFD210031FDB9 /* BackgroundWorkerApiImpl.swift */; }; B21E34AC2E5B09190031FDB9 /* BackgroundWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = B21E34AB2E5B09100031FDB9 /* BackgroundWorker.swift */; }; B25D377A2E72CA15008B6CA7 /* Connectivity.g.swift in Sources */ = {isa = PBXBuildFile; fileRef = B25D37782E72CA15008B6CA7 /* Connectivity.g.swift */; }; @@ -102,6 +103,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A01DD6982F7F43B40049AB63 /* ImageRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRequest.swift; sourceTree = ""; }; B1FBA9EE014DE20271B0FE77 /* Pods-ShareExtension.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShareExtension.profile.xcconfig"; path = "Target Support Files/Pods-ShareExtension/Pods-ShareExtension.profile.xcconfig"; sourceTree = ""; }; B21E34A92E5AFD210031FDB9 /* BackgroundWorkerApiImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundWorkerApiImpl.swift; sourceTree = ""; }; B21E34AB2E5B09100031FDB9 /* BackgroundWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundWorker.swift; sourceTree = ""; }; @@ -137,20 +139,23 @@ ); target = F0B57D372DF764BD00DC5BCC /* WidgetExtension */; }; + FE1BB4572F83196E0087DBF9 /* Exceptions for "Utility" folder in "Runner" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Mutex.swift, + ); + target = 97C146ED1CF9000F007C117D /* Runner */; + }; /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ B231F52D2E93A44A00BC45D1 /* Core */ = { isa = PBXFileSystemSynchronizedRootGroup; - exceptions = ( - ); path = Core; sourceTree = ""; }; B2CF7F8C2DDE4EBB00744BF6 /* Sync */ = { isa = PBXFileSystemSynchronizedRootGroup; - exceptions = ( - ); path = Sync; sourceTree = ""; }; @@ -162,10 +167,16 @@ path = WidgetExtension; sourceTree = ""; }; - FEE084F22EC172080045228E /* Schemas */ = { + FE1BB4562F8319560087DBF9 /* Utility */ = { isa = PBXFileSystemSynchronizedRootGroup; exceptions = ( + FE1BB4572F83196E0087DBF9 /* Exceptions for "Utility" folder in "Runner" target */, ); + path = Utility; + sourceTree = ""; + }; + FEE084F22EC172080045228E /* Schemas */ = { + isa = PBXFileSystemSynchronizedRootGroup; path = Schemas; sourceTree = ""; }; @@ -273,6 +284,7 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( + FE1BB4562F8319560087DBF9 /* Utility */, FEE084F22EC172080045228E /* Schemas */, B231F52D2E93A44A00BC45D1 /* Core */, B25D37792E72CA15008B6CA7 /* Connectivity */, @@ -327,6 +339,7 @@ FED3B1952E253E9B0030FD97 /* Images */ = { isa = PBXGroup; children = ( + A01DD6982F7F43B40049AB63 /* ImageRequest.swift */, FE5FE4AD2F30FBC000A71243 /* ImageProcessing.swift */, FE5499F72F1198DE006016CB /* RemoteImagesImpl.swift */, FE5499F52F11980E006016CB /* LocalImagesImpl.swift */, @@ -558,10 +571,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; @@ -590,10 +607,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; @@ -608,6 +629,7 @@ files = ( 65F32F31299BD2F800CE9261 /* BackgroundServicePlugin.swift in Sources */, 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + A01DD69B2F7F43B40049AB63 /* ImageRequest.swift in Sources */, B21E34AC2E5B09190031FDB9 /* BackgroundWorker.swift in Sources */, FE5499F32F1197D8006016CB /* LocalImages.g.swift in Sources */, FE5499F62F11980E006016CB /* LocalImagesImpl.swift in Sources */, diff --git a/mobile/ios/Runner/Images/ImageRequest.swift b/mobile/ios/Runner/Images/ImageRequest.swift new file mode 100644 index 0000000000..5c05bafb83 --- /dev/null +++ b/mobile/ios/Runner/Images/ImageRequest.swift @@ -0,0 +1,14 @@ +import Foundation + +struct RequestRegistry: ~Copyable, Sendable { + private let requests = Mutex<[Int64: T]>([:]) + + func add(requestId: Int64, request: T) { + requests.withLock { $0[requestId] = request } + } + + @discardableResult + func remove(requestId: Int64) -> T? { + requests.withLock { $0.removeValue(forKey: requestId) } + } +} diff --git a/mobile/ios/Runner/Images/LocalImagesImpl.swift b/mobile/ios/Runner/Images/LocalImagesImpl.swift index f0710bf75f..713a24a2dd 100644 --- a/mobile/ios/Runner/Images/LocalImagesImpl.swift +++ b/mobile/ios/Runner/Images/LocalImagesImpl.swift @@ -11,6 +11,11 @@ class LocalImageRequest { init(callback: @escaping (Result<[String: Int64]?, any Error>) -> Void) { self.callback = callback } + + func cancel() { + isCancelled = true + operation?.cancel() + } } class LocalImageApiImpl: LocalImageApi { @@ -31,9 +36,7 @@ class LocalImageApiImpl: LocalImageApi { return requestOptions }() - private static let assetQueue = DispatchQueue(label: "thumbnail.assets", qos: .userInitiated) - private static let requestQueue = DispatchQueue(label: "thumbnail.requests", qos: .userInitiated) - private static let cancelQueue = DispatchQueue(label: "thumbnail.cancellation", qos: .default) + private static let registry = RequestRegistry() private static var rgbaFormat = vImage_CGImageFormat( bitsPerComponent: 8, @@ -42,7 +45,6 @@ class LocalImageApiImpl: LocalImageApi { bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue), renderingIntent: .defaultIntent )! - private static var requests = [Int64: LocalImageRequest]() private static let assetCache = { let assetCache = NSCache() assetCache.countLimit = 10000 @@ -73,7 +75,7 @@ class LocalImageApiImpl: LocalImageApi { guard let asset = Self.requestAsset(assetId: assetId) else { - Self.remove(requestId: requestId) + Self.registry.remove(requestId: requestId) completion(.failure(PigeonError(code: "", message: "Could not get asset data for \(assetId)", details: nil))) return } @@ -98,12 +100,11 @@ class LocalImageApiImpl: LocalImageApi { ) if request.isCancelled { - Self.remove(requestId: requestId) return completion(ImageProcessing.cancelledResult) } guard let data = imageData else { - Self.remove(requestId: requestId) + Self.registry.remove(requestId: requestId) return completion(.failure(PigeonError(code: "", message: "Could not get image data for \(assetId)", details: nil))) } @@ -113,7 +114,6 @@ class LocalImageApiImpl: LocalImageApi { if request.isCancelled { free(pointer) - Self.remove(requestId: requestId) return completion(ImageProcessing.cancelledResult) } @@ -121,7 +121,7 @@ class LocalImageApiImpl: LocalImageApi { "pointer": Int64(Int(bitPattern: pointer)), "length": Int64(length), ])) - Self.remove(requestId: requestId) + Self.registry.remove(requestId: requestId) return } @@ -142,7 +142,7 @@ class LocalImageApiImpl: LocalImageApi { guard let image = image, let cgImage = image.cgImage else { - Self.remove(requestId: requestId) + Self.registry.remove(requestId: requestId) return completion(.failure(PigeonError(code: "", message: "Could not get pixel data for \(assetId)", details: nil))) } @@ -162,51 +162,32 @@ class LocalImageApiImpl: LocalImageApi { "pointer": Int64(Int(bitPattern: buffer.data)), "width": Int64(buffer.width), "height": Int64(buffer.height), - "rowBytes": Int64(buffer.rowBytes) + "rowBytes": Int64(buffer.rowBytes), ])) - Self.remove(requestId: requestId) + Self.registry.remove(requestId: requestId) } catch { - Self.remove(requestId: requestId) + Self.registry.remove(requestId: requestId) return completion(.failure(PigeonError(code: "", message: "Failed to convert image for \(assetId): \(error)", details: nil))) } } request.operation = operation - Self.add(requestId: requestId, request: request) + Self.registry.add(requestId: requestId, request: request) ImageProcessing.queue.addOperation(operation) } func cancelRequest(requestId: Int64) { - Self.cancel(requestId: requestId) - } - - private static func add(requestId: Int64, request: LocalImageRequest) -> Void { - requestQueue.sync { requests[requestId] = request } - } - - private static func remove(requestId: Int64) -> Void { - requestQueue.sync { requests[requestId] = nil } - } - - private static func cancel(requestId: Int64) -> Void { - requestQueue.async { - guard let request = requests.removeValue(forKey: requestId) else { return } - request.isCancelled = true - guard let operation = request.operation else { return } - if operation.isCancelled { - cancelQueue.async { request.callback(ImageProcessing.cancelledResult) } - } - } + Self.registry.remove(requestId: requestId)?.cancel() } private static func requestAsset(assetId: String) -> PHAsset? { - var asset: PHAsset? - assetQueue.sync { asset = assetCache.object(forKey: assetId as NSString) } - if asset != nil { return asset } + if let cached = assetCache.object(forKey: assetId as NSString) { + return cached + } guard let asset = PHAsset.fetchAssets(withLocalIdentifiers: [assetId], options: Self.fetchOptions).firstObject else { return nil } - assetQueue.async { assetCache.setObject(asset, forKey: assetId as NSString) } + assetCache.setObject(asset, forKey: assetId as NSString) return asset } } diff --git a/mobile/ios/Runner/Images/RemoteImagesImpl.swift b/mobile/ios/Runner/Images/RemoteImagesImpl.swift index 7c69acba76..37d37f597b 100644 --- a/mobile/ios/Runner/Images/RemoteImagesImpl.swift +++ b/mobile/ios/Runner/Images/RemoteImagesImpl.swift @@ -14,11 +14,15 @@ class RemoteImageRequest { self.task = task self.completion = completion } + + func cancel() { + isCancelled = true + task?.cancel() + } } class RemoteImageApiImpl: NSObject, RemoteImageApi { - private static var lock = os_unfair_lock() - private static var requests = [Int64: RemoteImageRequest]() + private static let registry = RequestRegistry() private static var rgbaFormat = vImage_CGImageFormat( bitsPerComponent: 8, bitsPerPixel: 32, @@ -43,20 +47,15 @@ class RemoteImageApiImpl: NSObject, RemoteImageApi { let request = RemoteImageRequest(id: requestId, task: task, completion: completion) - os_unfair_lock_lock(&Self.lock) - Self.requests[requestId] = request - os_unfair_lock_unlock(&Self.lock) + Self.registry.add(requestId: requestId, request: request) task.resume() } private static func handleCompletion(requestId: Int64, encoded: Bool, data: Data?, response: URLResponse?, error: Error?) { - os_unfair_lock_lock(&Self.lock) - guard let request = requests[requestId] else { - return os_unfair_lock_unlock(&Self.lock) + guard let request = registry.remove(requestId: requestId) else { + return } - requests[requestId] = nil - os_unfair_lock_unlock(&Self.lock) if let error = error { if request.isCancelled || (error as NSError).code == NSURLErrorCancelled { @@ -127,13 +126,7 @@ class RemoteImageApiImpl: NSObject, RemoteImageApi { } func cancelRequest(requestId: Int64) { - os_unfair_lock_lock(&Self.lock) - let request = Self.requests[requestId] - os_unfair_lock_unlock(&Self.lock) - - guard let request = request else { return } - request.isCancelled = true - request.task?.cancel() + Self.registry.remove(requestId: requestId)?.cancel() } func clearCache(completion: @escaping (Result) -> Void) { diff --git a/mobile/ios/Runner/Utility/Mutex.swift b/mobile/ios/Runner/Utility/Mutex.swift new file mode 100644 index 0000000000..fbfe168ff4 --- /dev/null +++ b/mobile/ios/Runner/Utility/Mutex.swift @@ -0,0 +1,54 @@ +import Darwin + +// Can be replaced with std Mutex when the deployment target is iOS 18+ +struct Mutex: ~Copyable, @unchecked Sendable { + struct _Buffer: ~Copyable { + var lock: os_unfair_lock = .init() + var value: Value + + init(value: consuming Value) { + self.value = value + } + + deinit {} + } + + let _buffer: UnsafeMutablePointer<_Buffer> + + init(_ initialValue: consuming sending Value) { + _buffer = .allocate(capacity: 1) + _buffer.initialize(to: _Buffer(value: initialValue)) + } + + deinit { + _buffer.deinitialize(count: 1) + _buffer.deallocate() + } + + @discardableResult + borrowing func withLock( + _ body: (inout sending Value) throws(E) -> sending Result + ) throws(E) -> sending Result { + os_unfair_lock_lock(&_buffer.pointee.lock) + defer { os_unfair_lock_unlock(&_buffer.pointee.lock) } + return try body(&_buffer.pointee.value) + } +} + +// Can be replaced with OSAllocatedUnfairLock when the deployment target is iOS 16+ +typealias UnfairLock = Mutex + +extension Mutex where Value == Void { + init() { + self.init(()) + } + + @discardableResult + borrowing func withLock( + _ body: () throws(E) -> sending Result + ) throws(E) -> sending Result { + os_unfair_lock_lock(&_buffer.pointee.lock) + defer { os_unfair_lock_unlock(&_buffer.pointee.lock) } + return try body() + } +} From 9bcce59719e168cf4805175d6469109adcf47aa0 Mon Sep 17 00:00:00 2001 From: Min Idzelis Date: Mon, 6 Apr 2026 08:00:50 -0400 Subject: [PATCH 110/156] fix(e2e): fix search gallery delete tests (#27536) --- e2e/src/ui/specs/search/search-gallery.e2e-spec.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/e2e/src/ui/specs/search/search-gallery.e2e-spec.ts b/e2e/src/ui/specs/search/search-gallery.e2e-spec.ts index c3721b1c54..87f809de75 100644 --- a/e2e/src/ui/specs/search/search-gallery.e2e-spec.ts +++ b/e2e/src/ui/specs/search/search-gallery.e2e-spec.ts @@ -6,6 +6,7 @@ import { generateTimelineData, TimelineAssetConfig, TimelineData, + toAssetResponseDto, } from 'src/ui/generators/timeline'; import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network'; import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network'; @@ -30,6 +31,10 @@ test.describe('search gallery-viewer', () => { }; test.beforeAll(async () => { + test.fail( + process.env.PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS !== '1', + 'This test requires env var: PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1', + ); adminUserId = faker.string.uuid(); testContext.adminId = adminUserId; timelineRestData = generateTimelineData({ ...createDefaultTimelineConfig(), ownerId: adminUserId }); @@ -44,7 +49,10 @@ test.describe('search gallery-viewer', () => { await context.route('**/api/search/metadata', async (route, request) => { if (request.method() === 'POST') { - const searchAssets = assets.slice(0, 5).filter((asset) => !changes.assetDeletions.includes(asset.id)); + const searchAssets = assets + .slice(0, 5) + .filter((asset) => !changes.assetDeletions.includes(asset.id)) + .map((asset) => toAssetResponseDto(asset)); return route.fulfill({ status: 200, contentType: 'application/json', From 564065a3ed19d80ba0a9bfba37f66ae617bb19f8 Mon Sep 17 00:00:00 2001 From: Min Idzelis Date: Mon, 6 Apr 2026 08:07:49 -0400 Subject: [PATCH 111/156] fix(web): reset cursor style when slideshow bar unmounts (#27521) --- web/src/lib/components/asset-viewer/asset-viewer.svelte | 1 - web/src/lib/components/asset-viewer/slideshow-bar.svelte | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte index 932d10925e..db1fd2b511 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte @@ -276,7 +276,6 @@ const handleStopSlideshow = async () => { try { if (document.fullscreenElement) { - document.body.style.cursor = ''; await document.exitFullscreen(); } } catch (error) { diff --git a/web/src/lib/components/asset-viewer/slideshow-bar.svelte b/web/src/lib/components/asset-viewer/slideshow-bar.svelte index 21f99952c3..8cdcbcda56 100644 --- a/web/src/lib/components/asset-viewer/slideshow-bar.svelte +++ b/web/src/lib/components/asset-viewer/slideshow-bar.svelte @@ -85,6 +85,7 @@ }); onDestroy(() => { + setCursorStyle(''); if (unsubscribeRestart) { unsubscribeRestart(); } From 136bd1e2eb1c85fc595246f811422f2f0eb0975e Mon Sep 17 00:00:00 2001 From: Ray <1041137+ray@users.noreply.github.com> Date: Mon, 6 Apr 2026 09:50:05 -0400 Subject: [PATCH 112/156] feat(server): Add support for .ts files (#27529) --- docs/docs/features/supported-formats.md | 28 +++++++++---------- e2e/src/ui/mock-network/base-network.ts | 1 + .../src/services/asset-media.service.spec.ts | 1 + server/src/utils/mime-types.spec.ts | 1 + server/src/utils/mime-types.ts | 1 + 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/docs/docs/features/supported-formats.md b/docs/docs/features/supported-formats.md index 4c4ac6039a..86ac264cc3 100644 --- a/docs/docs/features/supported-formats.md +++ b/docs/docs/features/supported-formats.md @@ -28,17 +28,17 @@ For the full list, refer to the [Immich source code](https://github.com/immich-a ## Video formats -| Format | Extension(s) | Supported? | Notes | -| :---------- | :-------------------- | :----------------: | :---- | -| `3GPP` | `.3gp` `.3gpp` | :white_check_mark: | | -| `AVI` | `.avi` | :white_check_mark: | | -| `FLV` | `.flv` | :white_check_mark: | | -| `M4V` | `.m4v` | :white_check_mark: | | -| `MATROSKA` | `.mkv` | :white_check_mark: | | -| `MP2T` | `.mts` `.m2ts` `.m2t` | :white_check_mark: | | -| `MP4` | `.mp4` `.insv` | :white_check_mark: | | -| `MPEG` | `.mpg` `.mpe` `.mpeg` | :white_check_mark: | | -| `MXF` | `.mxf` | :white_check_mark: | | -| `QUICKTIME` | `.mov` | :white_check_mark: | | -| `WEBM` | `.webm` | :white_check_mark: | | -| `WMV` | `.wmv` | :white_check_mark: | | +| Format | Extension(s) | Supported? | Notes | +| :---------- | :-------------------------- | :----------------: | :---- | +| `3GPP` | `.3gp` `.3gpp` | :white_check_mark: | | +| `AVI` | `.avi` | :white_check_mark: | | +| `FLV` | `.flv` | :white_check_mark: | | +| `M4V` | `.m4v` | :white_check_mark: | | +| `MATROSKA` | `.mkv` | :white_check_mark: | | +| `MP2T` | `.mts` `.m2ts` `.m2t` `.ts` | :white_check_mark: | | +| `MP4` | `.mp4` `.insv` | :white_check_mark: | | +| `MPEG` | `.mpg` `.mpe` `.mpeg` | :white_check_mark: | | +| `MXF` | `.mxf` | :white_check_mark: | | +| `QUICKTIME` | `.mov` | :white_check_mark: | | +| `WEBM` | `.webm` | :white_check_mark: | | +| `WMV` | `.wmv` | :white_check_mark: | | diff --git a/e2e/src/ui/mock-network/base-network.ts b/e2e/src/ui/mock-network/base-network.ts index f23202ca77..c7246ea3cb 100644 --- a/e2e/src/ui/mock-network/base-network.ts +++ b/e2e/src/ui/mock-network/base-network.ts @@ -173,6 +173,7 @@ export const setupBaseMockApiRoutes = async (context: BrowserContext, adminUserI '.mpeg', '.mpg', '.mts', + '.ts', '.vob', '.webm', '.wmv', diff --git a/server/src/services/asset-media.service.spec.ts b/server/src/services/asset-media.service.spec.ts index 1bf8bafdf7..39a1d2f822 100644 --- a/server/src/services/asset-media.service.spec.ts +++ b/server/src/services/asset-media.service.spec.ts @@ -111,6 +111,7 @@ const validVideos = [ '.mpg', '.mts', '.mxf', + '.ts', '.vob', '.webm', '.wmv', diff --git a/server/src/utils/mime-types.spec.ts b/server/src/utils/mime-types.spec.ts index 862ed310bc..8c20bad0aa 100644 --- a/server/src/utils/mime-types.spec.ts +++ b/server/src/utils/mime-types.spec.ts @@ -83,6 +83,7 @@ describe('mimeTypes', () => { { mimetype: 'video/mp2t', extension: '.m2t' }, { mimetype: 'video/mp2t', extension: '.m2ts' }, { mimetype: 'video/mp2t', extension: '.mts' }, + { mimetype: 'video/mp2t', extension: '.ts' }, { mimetype: 'video/mp4', extension: '.mp4' }, { mimetype: 'video/mpeg', extension: '.mpe' }, { mimetype: 'video/mpeg', extension: '.mpeg' }, diff --git a/server/src/utils/mime-types.ts b/server/src/utils/mime-types.ts index 43421e7937..5089fc36d6 100644 --- a/server/src/utils/mime-types.ts +++ b/server/src/utils/mime-types.ts @@ -114,6 +114,7 @@ const video: Record = { '.mpg': ['video/mpeg'], '.mts': ['video/mp2t'], '.mxf': ['application/mxf'], + '.ts': ['video/mp2t'], '.vob': ['video/mpeg'], '.webm': ['video/webm'], '.wmv': ['video/x-ms-wmv'], From 2143a0c9357bf9c0da04a6937887bad89ced9fe8 Mon Sep 17 00:00:00 2001 From: Putu Prema Date: Mon, 6 Apr 2026 22:28:07 +0800 Subject: [PATCH 113/156] fix(mobile): transparent system navbar when trash bottom bar is visible (#27093) * disable bottom safe area on trash bottom bar so that it extends below the system nav bar * remove manual padding calculations * re-add static vertical padding to maintain previous bottom bar height --- .../trash_bottom_sheet.widget.dart | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/mobile/lib/presentation/widgets/bottom_sheet/trash_bottom_sheet.widget.dart b/mobile/lib/presentation/widgets/bottom_sheet/trash_bottom_sheet.widget.dart index 9f8216c4ed..c96e680966 100644 --- a/mobile/lib/presentation/widgets/bottom_sheet/trash_bottom_sheet.widget.dart +++ b/mobile/lib/presentation/widgets/bottom_sheet/trash_bottom_sheet.widget.dart @@ -10,20 +10,19 @@ class TrashBottomBar extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - return SafeArea( - child: Align( - alignment: Alignment.bottomCenter, - child: SizedBox( - height: 64, - child: Container( - color: context.themeData.canvasColor, - child: const Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - DeleteTrashActionButton(source: ActionSource.timeline), - RestoreTrashActionButton(source: ActionSource.timeline), - ], - ), + return Align( + alignment: Alignment.bottomCenter, + child: Container( + color: context.themeData.canvasColor, + padding: const EdgeInsets.symmetric(vertical: 8), + child: const SafeArea( + top: false, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + DeleteTrashActionButton(source: ActionSource.timeline), + RestoreTrashActionButton(source: ActionSource.timeline), + ], ), ), ), From fbe631fe91a180cc52b7b3979a44e31677bbadf2 Mon Sep 17 00:00:00 2001 From: Thomas <9749173+uhthomas@users.noreply.github.com> Date: Mon, 6 Apr 2026 16:13:45 +0100 Subject: [PATCH 114/156] fix(mobile): convert video controls from hook to stateful widget (#27514) We are generally looking to move away from hooks as they are hard to reason about and have weird bugs. In particular, the timer did not properly capture the ref of the callback, and so it would execute on old state. A standard stateful widget does not have this problem, and is easier to organise. Co-authored-by: Alex --- .../asset_viewer/bottom_bar.widget.dart | 2 +- .../widgets/asset_viewer/video_controls.dart | 90 +++++++++++++------ 2 files changed, 63 insertions(+), 29 deletions(-) diff --git a/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart index 1f327bf79f..b51960bb05 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/bottom_bar.widget.dart @@ -74,7 +74,7 @@ class ViewerBottomBar extends ConsumerWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - if (asset.isVideo) VideoControls(key: ValueKey(asset.heroTag), videoPlayerName: asset.heroTag), + if (asset.isVideo) VideoControls(videoPlayerName: asset.heroTag), if (!isReadonlyModeEnabled) Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: actions), ], diff --git a/mobile/lib/widgets/asset_viewer/video_controls.dart b/mobile/lib/widgets/asset_viewer/video_controls.dart index 946e64fcbb..89b0f0ec30 100644 --- a/mobile/lib/widgets/asset_viewer/video_controls.dart +++ b/mobile/lib/widgets/asset_viewer/video_controls.dart @@ -1,5 +1,6 @@ import 'dart:math'; +import 'package:async/async.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/colors.dart'; @@ -7,26 +8,63 @@ import 'package:immich_mobile/models/cast/cast_manager_state.dart'; import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart'; import 'package:immich_mobile/providers/asset_viewer/video_player_provider.dart'; import 'package:immich_mobile/providers/cast.provider.dart'; -import 'package:immich_mobile/utils/hooks/timer_hook.dart'; import 'package:immich_mobile/extensions/duration_extensions.dart'; import 'package:immich_mobile/widgets/asset_viewer/animated_play_pause.dart'; -class VideoControls extends HookConsumerWidget { +class VideoControls extends ConsumerStatefulWidget { final String videoPlayerName; static const List _controlShadows = [Shadow(color: Colors.black87, blurRadius: 6, offset: Offset(0, 1))]; const VideoControls({super.key, required this.videoPlayerName}); - void _toggle(WidgetRef ref, bool isCasting) { - if (isCasting) { - ref.read(castProvider.notifier).toggle(); - } else { - ref.read(videoPlayerProvider(videoPlayerName).notifier).toggle(); + @override + ConsumerState createState() => _VideoControlsState(); +} + +class _VideoControlsState extends ConsumerState { + late final RestartableTimer _hideTimer; + + AutoDisposeStateNotifierProvider get _provider => + videoPlayerProvider(widget.videoPlayerName); + + @override + void initState() { + super.initState(); + _hideTimer = RestartableTimer(const Duration(seconds: 5), _onHideTimer); + } + + @override + void didUpdateWidget(covariant VideoControls oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.videoPlayerName != widget.videoPlayerName) { + _hideTimer.reset(); } } - void _onSeek(WidgetRef ref, bool isCasting, double value) { + @override + void dispose() { + _hideTimer.cancel(); + super.dispose(); + } + + void _onHideTimer() { + if (!mounted) return; + if (ref.read(_provider).status == VideoPlaybackStatus.playing) { + ref.read(assetViewerProvider.notifier).setControls(false); + } + } + + void _toggle(bool isCasting) { + if (isCasting) { + ref.read(castProvider.notifier).toggle(); + return; + } + + ref.read(_provider.notifier).toggle(); + } + + void _onSeek(bool isCasting, double value) { final seekTo = Duration(microseconds: value.toInt()); if (isCasting) { @@ -34,38 +72,30 @@ class VideoControls extends HookConsumerWidget { return; } - ref.read(videoPlayerProvider(videoPlayerName).notifier).seekTo(seekTo); + ref.read(_provider.notifier).seekTo(seekTo); } @override - Widget build(BuildContext context, WidgetRef ref) { - final provider = videoPlayerProvider(videoPlayerName); + Widget build(BuildContext context) { final cast = ref.watch(castProvider); final isCasting = cast.isCasting; final (position, duration) = isCasting ? ref.watch(castProvider.select((c) => (c.currentTime, c.duration))) - : ref.watch(provider.select((v) => (v.position, v.duration))); + : ref.watch(_provider.select((v) => (v.position, v.duration))); - final videoStatus = ref.watch(provider.select((v) => v.status)); + final videoStatus = ref.watch(_provider.select((v) => v.status)); final isPlaying = isCasting ? cast.castState == CastState.playing : videoStatus == VideoPlaybackStatus.playing || videoStatus == VideoPlaybackStatus.buffering; final isFinished = !isCasting && videoStatus == VideoPlaybackStatus.completed; - final hideTimer = useTimer(const Duration(seconds: 5), () { - if (!context.mounted) return; - if (ref.read(provider).status == VideoPlaybackStatus.playing) { - ref.read(assetViewerProvider.notifier).setControls(false); - } - }); - ref.listen(assetViewerProvider.select((v) => v.showingControls), (prev, showing) { - if (showing && prev != showing) hideTimer.reset(); + if (showing && prev != showing) _hideTimer.reset(); }); - ref.listen(provider.select((v) => v.status), (_, __) => hideTimer.reset()); + ref.listen(_provider.select((v) => v.status), (_, __) => _hideTimer.reset()); - final notifier = ref.read(provider.notifier); + final notifier = ref.read(_provider.notifier); final isLoaded = duration != Duration.zero; return Padding( @@ -80,9 +110,13 @@ class VideoControls extends HookConsumerWidget { padding: const EdgeInsets.all(12), constraints: const BoxConstraints(), icon: isFinished - ? const Icon(Icons.replay, color: Colors.white, shadows: _controlShadows) - : AnimatedPlayPause(color: Colors.white, playing: isPlaying, shadows: _controlShadows), - onPressed: () => _toggle(ref, isCasting), + ? const Icon(Icons.replay, color: Colors.white, shadows: VideoControls._controlShadows) + : AnimatedPlayPause( + color: Colors.white, + playing: isPlaying, + shadows: VideoControls._controlShadows, + ), + onPressed: () => _toggle(isCasting), ), const Spacer(), Text( @@ -91,7 +125,7 @@ class VideoControls extends HookConsumerWidget { color: Colors.white, fontWeight: FontWeight.w500, fontFeatures: [FontFeature.tabularFigures()], - shadows: _controlShadows, + shadows: VideoControls._controlShadows, ), ), const SizedBox(width: 12), @@ -107,7 +141,7 @@ class VideoControls extends HookConsumerWidget { padding: EdgeInsets.zero, onChangeStart: (_) => notifier.hold(), onChangeEnd: (_) => notifier.release(), - onChanged: isLoaded ? (value) => _onSeek(ref, isCasting, value) : null, + onChanged: isLoaded ? (value) => _onSeek(isCasting, value) : null, ), ], ), From 95c1f0efeb190422d35711ddbe12c0dc20e108c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Afonso=20Mendon=C3=A7a=20Ribeiro?= Date: Mon, 6 Apr 2026 16:27:48 +0100 Subject: [PATCH 115/156] fix: timestamp handling for database backup in Web UI (#27359) * Fix #26502: Fix timestamp handling for database backup in Web UI Frontend parsed backup timestamps as UTC, but they were in the server's local timezone, causing wrong relative times. Add `timezone` field to DatabaseBackupDto to expose server timezone. Update frontend to parse timestamps using this timezone. Convert timestamps to user's local timezone before rendering. Fallback to browser timezone if server timezone is missing. Ensures correct relative time display in Web UI. * fix: regenerate open-api types and remove custom backup type - Ran `make open-api` to update types based on backend changes - Removed custom BackupWithTimezone type in MaintenanceBackupsList - Updated timezone props to use the newly generated native type * fix: simplify timezone handling for database backups - Updated DatabaseBackupDto to make timezone a required property - Removed manual DateTime.local().zoneName fallbacks - Cleaned up type casts after regenerating OpenAPI types * fix: Add missing newline at end of spec file --- .../lib/model/database_backup_dto.dart | 14 +++-- open-api/immich-openapi-specs.json | 6 ++- open-api/typescript-sdk/src/fetch-client.ts | 1 + server/src/dtos/database-backup.dto.ts | 1 + .../src/services/database-backup.service.ts | 3 +- .../MaintenanceBackupEntry.spec.ts | 54 +++++++++++++++++++ .../maintenance/MaintenanceBackupEntry.svelte | 5 +- .../maintenance/MaintenanceBackupsList.svelte | 4 +- 8 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 web/src/lib/components/maintenance/MaintenanceBackupEntry.spec.ts diff --git a/mobile/openapi/lib/model/database_backup_dto.dart b/mobile/openapi/lib/model/database_backup_dto.dart index 4bf231587b..34912a55e0 100644 --- a/mobile/openapi/lib/model/database_backup_dto.dart +++ b/mobile/openapi/lib/model/database_backup_dto.dart @@ -15,30 +15,36 @@ class DatabaseBackupDto { DatabaseBackupDto({ required this.filename, required this.filesize, + required this.timezone, }); String filename; num filesize; + String timezone; + @override bool operator ==(Object other) => identical(this, other) || other is DatabaseBackupDto && other.filename == filename && - other.filesize == filesize; + other.filesize == filesize && + other.timezone == timezone; @override int get hashCode => // ignore: unnecessary_parenthesis (filename.hashCode) + - (filesize.hashCode); + (filesize.hashCode) + + (timezone.hashCode); @override - String toString() => 'DatabaseBackupDto[filename=$filename, filesize=$filesize]'; + String toString() => 'DatabaseBackupDto[filename=$filename, filesize=$filesize, timezone=$timezone]'; Map toJson() { final json = {}; json[r'filename'] = this.filename; json[r'filesize'] = this.filesize; + json[r'timezone'] = this.timezone; return json; } @@ -53,6 +59,7 @@ class DatabaseBackupDto { return DatabaseBackupDto( filename: mapValueOfType(json, r'filename')!, filesize: num.parse('${json[r'filesize']}'), + timezone: mapValueOfType(json, r'timezone')!, ); } return null; @@ -102,6 +109,7 @@ class DatabaseBackupDto { static const requiredKeys = { 'filename', 'filesize', + 'timezone', }; } diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 19427413b0..d975189609 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -17721,11 +17721,15 @@ }, "filesize": { "type": "number" + }, + "timezone": { + "type": "string" } }, "required": [ "filename", - "filesize" + "filesize", + "timezone" ], "type": "object" }, diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index fc465ce529..1541ec828e 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -63,6 +63,7 @@ export type DatabaseBackupDeleteDto = { export type DatabaseBackupDto = { filename: string; filesize: number; + timezone: string; }; export type DatabaseBackupListResponseDto = { backups: DatabaseBackupDto[]; diff --git a/server/src/dtos/database-backup.dto.ts b/server/src/dtos/database-backup.dto.ts index dc06cdc6ec..c0554f83b7 100644 --- a/server/src/dtos/database-backup.dto.ts +++ b/server/src/dtos/database-backup.dto.ts @@ -4,6 +4,7 @@ import { IsString } from 'class-validator'; export class DatabaseBackupDto { filename!: string; filesize!: number; + timezone!: string; } export class DatabaseBackupListResponseDto { diff --git a/server/src/services/database-backup.service.ts b/server/src/services/database-backup.service.ts index 666ddcff0a..6afc46c7da 100644 --- a/server/src/services/database-backup.service.ts +++ b/server/src/services/database-backup.service.ts @@ -283,6 +283,7 @@ export class DatabaseBackupService { async listBackups(): Promise { const backupsFolder = StorageCore.getBaseFolder(StorageFolder.Backups); const files = await this.storageRepository.readdir(backupsFolder); + const timezone = DateTime.local().zoneName; const validFiles = files .filter((fn) => isValidDatabaseBackupName(fn)) @@ -292,7 +293,7 @@ export class DatabaseBackupService { const backups = await Promise.all( validFiles.map(async (filename) => { const stats = await this.storageRepository.stat(path.join(backupsFolder, filename)); - return { filename, filesize: stats.size }; + return { filename, filesize: stats.size, timezone }; }), ); diff --git a/web/src/lib/components/maintenance/MaintenanceBackupEntry.spec.ts b/web/src/lib/components/maintenance/MaintenanceBackupEntry.spec.ts new file mode 100644 index 0000000000..73e9e00546 --- /dev/null +++ b/web/src/lib/components/maintenance/MaintenanceBackupEntry.spec.ts @@ -0,0 +1,54 @@ +import { locale } from '$lib/stores/preferences.store'; +import { renderWithTooltips } from '$tests/helpers'; +import { screen } from '@testing-library/svelte'; +import { DateTime } from 'luxon'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import MaintenanceBackupEntry from './MaintenanceBackupEntry.svelte'; + +vi.mock('$lib/services/database-backups.service', () => ({ + getDatabaseBackupActions: () => ({ + Download: { type: 'command', title: 'Download', onAction: vi.fn() }, + Delete: { type: 'command', title: 'Delete', onAction: vi.fn() }, + }), + handleRestoreDatabaseBackup: vi.fn(), +})); + +describe('MaintenanceBackupEntry', () => { + beforeEach(() => { + vi.useFakeTimers(); + vi.setSystemTime(new Date('2026-03-24T12:00:00Z')); + locale.set('en'); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it('renders relative backup time using the user timezone instead of UTC', () => { + const backupTimestamp = '20260324T110000'; + + const expectedRelativeTime = DateTime.fromFormat(backupTimestamp, "yyyyMMdd'T'HHmmss", { + zone: 'Asia/Tokyo', + }) + .toLocal() + .toRelative({ locale: 'en' }); + + const utcRelativeTime = DateTime.fromFormat(backupTimestamp, "yyyyMMdd'T'HHmmss", { + zone: 'UTC', + }) + .toLocal() + .toRelative({ locale: 'en' }); + + expect(expectedRelativeTime).toBeTruthy(); + expect(expectedRelativeTime).not.toEqual(utcRelativeTime); + + renderWithTooltips(MaintenanceBackupEntry, { + expectedVersion: '1.2.3', + filename: 'immich-db-backup-20260324T110000-v1.2.3-snapshot.sql.gz', + filesize: 1024, + timezone: 'Asia/Tokyo', + }); + + expect(screen.getByText(expectedRelativeTime!)).toBeInTheDocument(); + }); +}); diff --git a/web/src/lib/components/maintenance/MaintenanceBackupEntry.svelte b/web/src/lib/components/maintenance/MaintenanceBackupEntry.svelte index fd3420d199..5aa00d210e 100644 --- a/web/src/lib/components/maintenance/MaintenanceBackupEntry.svelte +++ b/web/src/lib/components/maintenance/MaintenanceBackupEntry.svelte @@ -13,16 +13,17 @@ filename: string; filesize: number; expectedVersion: string; + timezone?: string; }; - const { filename, filesize, expectedVersion }: Props = $props(); + const { filename, filesize, expectedVersion, timezone }: Props = $props(); const filesizeText = $derived(getBytesWithUnit(filesize, 1)); const backupDateTime = $derived.by(() => { const dateMatch = filename.match(/\d+T\d+/); if (dateMatch) { - return DateTime.fromFormat(dateMatch[0], "yyyyMMdd'T'HHmmss", { zone: 'utc' }).toLocal(); + return DateTime.fromFormat(dateMatch[0], "yyyyMMdd'T'HHmmss", { zone: timezone }).toLocal(); } return null; }); diff --git a/web/src/lib/components/maintenance/MaintenanceBackupsList.svelte b/web/src/lib/components/maintenance/MaintenanceBackupsList.svelte index 45b475c22a..fbadcef31c 100644 --- a/web/src/lib/components/maintenance/MaintenanceBackupsList.svelte +++ b/web/src/lib/components/maintenance/MaintenanceBackupsList.svelte @@ -51,12 +51,13 @@ const unknownDateKey = $t('unknown_date'); for (const backup of backups) { + const timezone = backup.timezone; const dateMatch = backup.filename.match(/\d+T\d+/); let dateKey: string; let dt: DateTime; if (dateMatch) { - dt = DateTime.fromFormat(dateMatch[0], "yyyyMMdd'T'HHmmss", { zone: 'utc' }); + dt = DateTime.fromFormat(dateMatch[0], "yyyyMMdd'T'HHmmss", { zone: timezone }); dateKey = dt.toFormat('LLLL d, yyyy'); } else { dt = DateTime.fromMillis(0); @@ -128,6 +129,7 @@ filename={backup.filename} filesize={backup.filesize} expectedVersion={props.expectedVersion} + timezone={backup.timezone} /> {/each} From 572bad8ede2fe25152eb2901bd980cbb5800507b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 18:20:10 +0000 Subject: [PATCH 116/156] chore(deps): update dependency vite to v8.0.5 [security] (#27543) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 627 +++++++++++++++++++++++++------------------------ 1 file changed, 321 insertions(+), 306 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ab8ae8f08d..1588157ac1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,10 +64,10 @@ importers: version: 4.13.4 '@types/node': specifier: ^24.12.0 - version: 24.12.0 + version: 24.12.2 '@vitest/coverage-v8': specifier: ^4.0.0 - version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) byte-size: specifier: ^9.0.0 version: 9.0.1 @@ -109,13 +109,13 @@ importers: version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^8.0.0 - version: 8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: ^4.0.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest-fetch-mock: specifier: ^0.4.0 - version: 0.4.5(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 0.4.5(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) yaml: specifier: ^2.3.1 version: 2.8.3 @@ -218,7 +218,7 @@ importers: version: 3.7.1 '@types/node': specifier: ^24.12.0 - version: 24.12.0 + version: 24.12.2 '@types/pg': specifier: ^8.15.1 version: 8.20.0 @@ -284,10 +284,10 @@ importers: version: 5.2.1(encoding@0.1.13) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 6.1.1(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: ^4.0.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) e2e-auth-server: devDependencies: @@ -321,7 +321,7 @@ importers: devDependencies: '@types/node': specifier: ^24.12.0 - version: 24.12.0 + version: 24.12.2 typescript: specifier: ^5.3.3 version: 5.9.3 @@ -507,7 +507,7 @@ importers: version: 2.1.1 nest-commander: specifier: ^3.16.0 - version: 3.20.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@types/inquirer@8.2.12)(@types/node@24.12.0)(typescript@5.9.3) + version: 3.20.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@types/inquirer@8.2.12)(@types/node@24.12.2)(typescript@5.9.3) nestjs-cls: specifier: ^5.0.0 version: 5.4.3(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) @@ -592,7 +592,7 @@ importers: version: 10.0.1(eslint@10.1.0(jiti@2.6.1)) '@nestjs/cli': specifier: ^11.0.2 - version: 11.0.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(@types/node@24.12.0)(esbuild@0.27.4) + version: 11.0.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(@types/node@24.12.2)(esbuild@0.27.4) '@nestjs/schematics': specifier: ^11.0.0 version: 11.0.9(chokidar@4.0.3)(typescript@5.9.3) @@ -646,7 +646,7 @@ importers: version: 2.1.0 '@types/node': specifier: ^24.12.0 - version: 24.12.0 + version: 24.12.2 '@types/nodemailer': specifier: ^7.0.0 version: 7.0.11 @@ -676,7 +676,7 @@ importers: version: 13.15.10 '@vitest/coverage-v8': specifier: ^3.0.0 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) eslint: specifier: ^10.0.0 version: 10.1.0(jiti@2.6.1) @@ -730,10 +730,10 @@ importers: version: 1.5.9(@swc/core@1.15.18(@swc/helpers@0.5.17))(rollup@4.55.1) vite-tsconfig-paths: specifier: ^6.0.0 - version: 6.1.1(typescript@5.9.3)(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 6.1.1(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: ^3.0.0 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) web: dependencies: @@ -748,7 +748,7 @@ importers: version: link:../open-api/typescript-sdk '@immich/ui': specifier: ^0.69.0 - version: 0.69.0(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + version: 0.69.0(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) '@mapbox/mapbox-gl-rtl-text': specifier: 0.3.0 version: 0.3.0 @@ -875,25 +875,25 @@ importers: version: 3.1.2 '@sveltejs/adapter-static': specifier: ^3.0.8 - version: 3.0.10(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 3.0.10(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) '@sveltejs/enhanced-img': specifier: ^0.10.4 - version: 0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/kit': specifier: ^2.27.1 - version: 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: 7.0.0 - version: 7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.2.2(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@testing-library/jest-dom': specifier: ^6.4.2 version: 6.9.1 '@testing-library/svelte': specifier: ^5.2.8 - version: 5.3.1(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 5.3.1(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) '@testing-library/user-event': specifier: ^14.5.2 version: 14.6.1(@testing-library/dom@10.4.1) @@ -917,7 +917,7 @@ importers: version: 1.5.6 '@vitest/coverage-v8': specifier: ^4.0.0 - version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) dotenv: specifier: ^17.0.0 version: 17.3.1 @@ -956,7 +956,7 @@ importers: version: 3.5.1(prettier@3.8.1)(svelte@5.54.1) rollup-plugin-visualizer: specifier: ^6.0.0 - version: 6.0.11(rolldown@1.0.0-rc.10)(rollup@4.55.1) + version: 6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(rollup@4.55.1) svelte: specifier: 5.54.1 version: 5.54.1 @@ -977,10 +977,10 @@ importers: version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^8.0.0 - version: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: ^4.0.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) packages: @@ -3436,8 +3436,11 @@ packages: '@namnode/store@0.1.0': resolution: {integrity: sha512-4NGTldxKcmY0UuZ7OEkvCjs8ZEoeYB6M2UwMu74pdLiFMKxXbj9HdNk1Qn213bxX1O7bY5h+PLh5DZsTURZkYA==} - '@napi-rs/wasm-runtime@1.1.1': - resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@napi-rs/wasm-runtime@1.1.2': + resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 '@nestjs/bull-shared@11.0.4': resolution: {integrity: sha512-VBJcDHSAzxQnpcDfA0kt9MTGUD1XZzfByV70su0W0eDCQ9aqIEBlzWRW21tv9FG9dIut22ysgDidshdjlnczLw==} @@ -3815,8 +3818,8 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 - '@oxc-project/types@0.120.0': - resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==} + '@oxc-project/types@0.122.0': + resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} '@paralleldrive/cuid2@2.3.1': resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==} @@ -4132,103 +4135,103 @@ packages: '@codemirror/state': ^6.0.0 '@codemirror/view': ^6.0.0 - '@rolldown/binding-android-arm64@1.0.0-rc.10': - resolution: {integrity: sha512-jOHxwXhxmFKuXztiu1ORieJeTbx5vrTkcOkkkn2d35726+iwhrY1w/+nYY/AGgF12thg33qC3R1LMBF5tHTZHg==} + '@rolldown/binding-android-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.10': - resolution: {integrity: sha512-gED05Teg/vtTZbIJBc4VNMAxAFDUPkuO/rAIyyxZjTj1a1/s6z5TII/5yMGZ0uLRCifEtwUQn8OlYzuYc0m70w==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.10': - resolution: {integrity: sha512-rI15NcM1mA48lqrIxVkHfAqcyFLcQwyXWThy+BQ5+mkKKPvSO26ir+ZDp36AgYoYVkqvMcdS8zOE6SeBsR9e8A==} + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.10': - resolution: {integrity: sha512-XZRXHdTa+4ME1MuDVp021+doQ+z6Ei4CCFmNc5/sKbqb8YmkiJdj8QKlV3rCI0AJtAeSB5n0WGPuJWNL9p/L2w==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10': - resolution: {integrity: sha512-R0SQMRluISSLzFE20sPWYHVmJdDQnRyc/FzSCN72BqQmh2SOZUFG+N3/vBZpR4C6WpEUVYJLrYUXaj43sJsNLA==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10': - resolution: {integrity: sha512-Y1reMrV/o+cwpduYhJuOE3OMKx32RMYCidf14y+HssARRmhDuWXJ4yVguDg2R/8SyyGNo+auzz64LnPK9Hq6jg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10': - resolution: {integrity: sha512-vELN+HNb2IzuzSBUOD4NHmP9yrGwl1DVM29wlQvx1OLSclL0NgVWnVDKl/8tEks79EFek/kebQKnNJkIAA4W2g==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10': - resolution: {integrity: sha512-ZqrufYTgzxbHwpqOjzSsb0UV/aV2TFIY5rP8HdsiPTv/CuAgCRjM6s9cYFwQ4CNH+hf9Y4erHW1GjZuZ7WoI7w==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10': - resolution: {integrity: sha512-gSlmVS1FZJSRicA6IyjoRoKAFK7IIHBs7xJuHRSmjImqk3mPPWbR7RhbnfH2G6bcmMEllCt2vQ/7u9e6bBnByg==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10': - resolution: {integrity: sha512-eOCKUpluKgfObT2pHjztnaWEIbUabWzk3qPZ5PuacuPmr4+JtQG4k2vGTY0H15edaTnicgU428XW/IH6AimcQw==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.10': - resolution: {integrity: sha512-Xdf2jQbfQowJnLcgYfD/m0Uu0Qj5OdxKallD78/IPPfzaiaI4KRAwZzHcKQ4ig1gtg1SuzC7jovNiM2TzQsBXA==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.10': - resolution: {integrity: sha512-o1hYe8hLi1EY6jgPFyxQgQ1wcycX+qz8eEbVmot2hFkgUzPxy9+kF0u0NIQBeDq+Mko47AkaFFaChcvZa9UX9Q==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.10': - resolution: {integrity: sha512-Ugv9o7qYJudqQO5Y5y2N2SOo6S4WiqiNOpuQyoPInnhVzCY+wi/GHltcLHypG9DEUYMB0iTB/huJrpadiAcNcA==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10': - resolution: {integrity: sha512-7UODQb4fQUNT/vmgDZBl3XOBAIOutP5R3O/rkxg0aLfEGQ4opbCgU5vOw/scPe4xOqBwL9fw7/RP1vAMZ6QlAQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10': - resolution: {integrity: sha512-PYxKHMVHOb5NJuDL53vBUl1VwUjymDcYI6rzpIni0C9+9mTiJedvUxSk7/RPp7OOAm3v+EjgMu9bIy3N6b408w==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.10': - resolution: {integrity: sha512-UkVDEFk1w3mveXeKgaTuYfKWtPbvgck1dT8TUG3bnccrH0XtLTuAyfCoks4Q/M5ZGToSVJTIQYCzy2g/atAOeg==} + '@rolldown/pluginutils@1.0.0-rc.12': + resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} @@ -5104,8 +5107,8 @@ packages: '@types/node@18.19.130': resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} - '@types/node@24.12.0': - resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==} + '@types/node@24.12.2': + resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} '@types/node@25.5.0': resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} @@ -10740,8 +10743,8 @@ packages: robust-predicates@3.0.3: resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} - rolldown@1.0.0-rc.10: - resolution: {integrity: sha512-q7j6vvarRFmKpgJUT8HCAUljkgzEp4LAhPlJUvQhA5LA1SUL36s5QCysMutErzL3EbNOZOkoziSx9iZC4FddKA==} + rolldown@1.0.0-rc.12: + resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -11968,8 +11971,8 @@ packages: peerDependencies: vite: '*' - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@7.3.2: + resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -12008,14 +12011,14 @@ packages: yaml: optional: true - vite@8.0.1: - resolution: {integrity: sha512-wt+Z2qIhfFt85uiyRt5LPU4oVEJBXj8hZNWKeqFG4gRG/0RaRGJ7njQCwzFVjO+v4+Ipmf5CY7VdmZRAYYBPHw==} + vite@8.0.5: + resolution: {integrity: sha512-nmu43Qvq9UopTRfMx2jOYW5l16pb3iDC1JH6yMuPkpVbzK0k+L7dfsEDH4jRgYFmsg0sTAqkojoZgzLMlwHsCQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 '@vitejs/devtools': ^0.1.0 - esbuild: ^0.27.0 + esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 sass: ^1.70.0 @@ -12631,11 +12634,11 @@ snapshots: optionalDependencies: chokidar: 4.0.3 - '@angular-devkit/schematics-cli@19.2.19(@types/node@24.12.0)(chokidar@4.0.3)': + '@angular-devkit/schematics-cli@19.2.19(@types/node@24.12.2)(chokidar@4.0.3)': dependencies: '@angular-devkit/core': 19.2.19(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3) - '@inquirer/prompts': 7.3.2(@types/node@24.12.0) + '@inquirer/prompts': 7.3.2(@types/node@24.12.2) ansi-colors: 4.1.3 symbol-observable: 4.0.0 yargs-parser: 21.1.1 @@ -15137,12 +15140,12 @@ snapshots: node-emoji: 2.2.0 svelte: 5.54.1 - '@immich/ui@0.69.0(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)': + '@immich/ui@0.69.0(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)': dependencies: '@immich/svelte-markdown-preprocess': 0.2.1(svelte@5.54.1) '@internationalized/date': 3.12.0 '@mdi/js': 7.4.47 - bits-ui: 2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + bits-ui: 2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) luxon: 3.7.2 simple-icons: 16.13.0 svelte: 5.54.1 @@ -15155,143 +15158,143 @@ snapshots: '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@4.3.2(@types/node@24.12.0)': + '@inquirer/checkbox@4.3.2(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/type': 3.0.10(@types/node@24.12.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/confirm@5.1.21(@types/node@24.12.0)': + '@inquirer/confirm@5.1.21(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/core@10.3.2(@types/node@24.12.0)': + '@inquirer/core@10.3.2(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/type': 3.0.10(@types/node@24.12.2) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/editor@4.2.23(@types/node@24.12.0)': + '@inquirer/editor@4.2.23(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/external-editor': 1.0.3(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/external-editor': 1.0.3(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/expand@4.0.23(@types/node@24.12.0)': + '@inquirer/expand@4.0.23(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/external-editor@1.0.3(@types/node@24.12.0)': + '@inquirer/external-editor@1.0.3(@types/node@24.12.2)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@inquirer/figures@1.0.15': {} - '@inquirer/input@4.3.1(@types/node@24.12.0)': + '@inquirer/input@4.3.1(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/number@3.0.23(@types/node@24.12.0)': + '@inquirer/number@3.0.23(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/password@4.0.23(@types/node@24.12.0)': + '@inquirer/password@4.0.23(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/prompts@7.10.1(@types/node@24.12.0)': + '@inquirer/prompts@7.10.1(@types/node@24.12.2)': dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@24.12.0) - '@inquirer/confirm': 5.1.21(@types/node@24.12.0) - '@inquirer/editor': 4.2.23(@types/node@24.12.0) - '@inquirer/expand': 4.0.23(@types/node@24.12.0) - '@inquirer/input': 4.3.1(@types/node@24.12.0) - '@inquirer/number': 3.0.23(@types/node@24.12.0) - '@inquirer/password': 4.0.23(@types/node@24.12.0) - '@inquirer/rawlist': 4.1.11(@types/node@24.12.0) - '@inquirer/search': 3.2.2(@types/node@24.12.0) - '@inquirer/select': 4.4.2(@types/node@24.12.0) + '@inquirer/checkbox': 4.3.2(@types/node@24.12.2) + '@inquirer/confirm': 5.1.21(@types/node@24.12.2) + '@inquirer/editor': 4.2.23(@types/node@24.12.2) + '@inquirer/expand': 4.0.23(@types/node@24.12.2) + '@inquirer/input': 4.3.1(@types/node@24.12.2) + '@inquirer/number': 3.0.23(@types/node@24.12.2) + '@inquirer/password': 4.0.23(@types/node@24.12.2) + '@inquirer/rawlist': 4.1.11(@types/node@24.12.2) + '@inquirer/search': 3.2.2(@types/node@24.12.2) + '@inquirer/select': 4.4.2(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/prompts@7.3.2(@types/node@24.12.0)': + '@inquirer/prompts@7.3.2(@types/node@24.12.2)': dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@24.12.0) - '@inquirer/confirm': 5.1.21(@types/node@24.12.0) - '@inquirer/editor': 4.2.23(@types/node@24.12.0) - '@inquirer/expand': 4.0.23(@types/node@24.12.0) - '@inquirer/input': 4.3.1(@types/node@24.12.0) - '@inquirer/number': 3.0.23(@types/node@24.12.0) - '@inquirer/password': 4.0.23(@types/node@24.12.0) - '@inquirer/rawlist': 4.1.11(@types/node@24.12.0) - '@inquirer/search': 3.2.2(@types/node@24.12.0) - '@inquirer/select': 4.4.2(@types/node@24.12.0) + '@inquirer/checkbox': 4.3.2(@types/node@24.12.2) + '@inquirer/confirm': 5.1.21(@types/node@24.12.2) + '@inquirer/editor': 4.2.23(@types/node@24.12.2) + '@inquirer/expand': 4.0.23(@types/node@24.12.2) + '@inquirer/input': 4.3.1(@types/node@24.12.2) + '@inquirer/number': 3.0.23(@types/node@24.12.2) + '@inquirer/password': 4.0.23(@types/node@24.12.2) + '@inquirer/rawlist': 4.1.11(@types/node@24.12.2) + '@inquirer/search': 3.2.2(@types/node@24.12.2) + '@inquirer/select': 4.4.2(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/rawlist@4.1.11(@types/node@24.12.0)': + '@inquirer/rawlist@4.1.11(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/search@3.2.2(@types/node@24.12.0)': + '@inquirer/search@3.2.2(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/type': 3.0.10(@types/node@24.12.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/select@4.4.2(@types/node@24.12.0)': + '@inquirer/select@4.4.2(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/type': 3.0.10(@types/node@24.12.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/type@3.0.10(@types/node@24.12.0)': + '@inquirer/type@3.0.10(@types/node@24.12.2)': optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@internationalized/date@3.12.0': dependencies: @@ -15325,7 +15328,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -15605,7 +15608,7 @@ snapshots: '@namnode/store@0.1.0': {} - '@napi-rs/wasm-runtime@1.1.1': + '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': dependencies: '@emnapi/core': 1.9.1 '@emnapi/runtime': 1.9.1 @@ -15626,12 +15629,12 @@ snapshots: bullmq: 5.71.0 tslib: 2.8.1 - '@nestjs/cli@11.0.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(@types/node@24.12.0)(esbuild@0.27.4)': + '@nestjs/cli@11.0.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(@types/node@24.12.2)(esbuild@0.27.4)': dependencies: '@angular-devkit/core': 19.2.19(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3) - '@angular-devkit/schematics-cli': 19.2.19(@types/node@24.12.0)(chokidar@4.0.3) - '@inquirer/prompts': 7.10.1(@types/node@24.12.0) + '@angular-devkit/schematics-cli': 19.2.19(@types/node@24.12.2)(chokidar@4.0.3) + '@inquirer/prompts': 7.10.1(@types/node@24.12.2) '@nestjs/schematics': 11.0.9(chokidar@4.0.3)(typescript@5.9.3) ansis: 4.2.0 chokidar: 4.0.3 @@ -16090,7 +16093,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) - '@oxc-project/types@0.120.0': {} + '@oxc-project/types@0.122.0': {} '@paralleldrive/cuid2@2.3.1': dependencies: @@ -16351,54 +16354,57 @@ snapshots: '@codemirror/state': 6.5.3 '@codemirror/view': 6.39.8 - '@rolldown/binding-android-arm64@1.0.0-rc.10': + '@rolldown/binding-android-arm64@1.0.0-rc.12': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.10': + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.10': + '@rolldown/binding-darwin-x64@1.0.0-rc.12': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.10': + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.10': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.10': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.10': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': dependencies: - '@napi-rs/wasm-runtime': 1.1.1 + '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': optional: true - '@rolldown/pluginutils@1.0.0-rc.10': {} + '@rolldown/pluginutils@1.0.0-rc.12': {} '@rollup/pluginutils@5.3.0(rollup@4.55.1)': dependencies: @@ -16539,29 +16545,29 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: - '@sveltejs/kit': 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/kit': 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@sveltejs/enhanced-img@0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/enhanced-img@0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) magic-string: 0.30.21 sharp: 0.34.5 svelte: 5.54.1 svelte-parse-markup: 0.1.5(svelte@5.54.1) - vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vite-imagetools: 9.0.3(rollup@4.55.1) zimmerframe: 1.1.4 transitivePeerDependencies: - rollup - supports-color - '@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -16573,19 +16579,19 @@ snapshots: set-cookie-parser: 3.1.0 sirv: 3.0.2 svelte: 5.54.1 - vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: '@opentelemetry/api': 1.9.0 typescript: 5.9.3 - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 svelte: 5.54.1 - vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vitefu: 1.1.2(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vitefu: 1.1.2(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.5)': dependencies: @@ -16802,12 +16808,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - '@tailwindcss/vite@4.2.2(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tailwindcss/vite@4.2.2(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) '@testing-library/dom@10.4.1': dependencies: @@ -16833,14 +16839,14 @@ snapshots: dependencies: svelte: 5.54.1 - '@testing-library/svelte@5.3.1(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@testing-library/svelte@5.3.1(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@testing-library/dom': 10.4.1 '@testing-library/svelte-core': 1.0.0(svelte@5.54.1) svelte: 5.54.1 optionalDependencies: - vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: @@ -16883,7 +16889,7 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/archiver@7.0.0': dependencies: @@ -16895,16 +16901,16 @@ snapshots: '@types/bcrypt@6.0.0': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/bonjour@3.5.13': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/braces@3.0.5': {} @@ -16926,21 +16932,21 @@ snapshots: '@types/cli-progress@3.11.6': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/compression@1.8.1': dependencies: '@types/express': 5.0.6 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.1.0 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/connect@3.4.38': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/content-disposition@0.5.9': {} @@ -16957,11 +16963,11 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.6 '@types/keygrip': 1.0.6 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/cors@2.8.19': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/d3-array@3.2.2': {} @@ -17088,13 +17094,13 @@ snapshots: '@types/docker-modem@3.0.6': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/ssh2': 1.15.5 '@types/dockerode@4.0.1': dependencies: '@types/docker-modem': 3.0.6 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/ssh2': 1.15.5 '@types/dom-to-image@2.6.7': {} @@ -17119,14 +17125,14 @@ snapshots: '@types/express-serve-static-core@4.19.7': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -17152,7 +17158,7 @@ snapshots: '@types/fluent-ffmpeg@2.1.28': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/geojson@7946.0.16': {} @@ -17180,7 +17186,7 @@ snapshots: '@types/http-proxy@1.17.17': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/inquirer@8.2.12': dependencies: @@ -17204,7 +17210,7 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/justified-layout@4.1.4': {} @@ -17223,7 +17229,7 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.9 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/leaflet@1.9.21': dependencies: @@ -17253,7 +17259,7 @@ snapshots: '@types/mock-fs@4.13.4': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/ms@2.1.0': {} @@ -17263,7 +17269,7 @@ snapshots: '@types/node-forge@1.3.14': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/node@17.0.45': {} @@ -17271,7 +17277,7 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@24.12.0': + '@types/node@24.12.2': dependencies: undici-types: 7.16.0 @@ -17282,13 +17288,13 @@ snapshots: '@types/nodemailer@7.0.11': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/oidc-provider@9.5.0': dependencies: '@types/keygrip': 1.0.6 '@types/koa': 3.0.1 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/parse5@5.0.3': {} @@ -17298,13 +17304,13 @@ snapshots: '@types/pg@8.15.6': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 pg-protocol: 1.13.0 pg-types: 2.2.0 '@types/pg@8.20.0': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 pg-protocol: 1.13.0 pg-types: 2.2.0 @@ -17312,13 +17318,13 @@ snapshots: '@types/pngjs@6.0.5': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/prismjs@1.26.5': {} '@types/qrcode@1.5.6': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/qs@6.14.0': {} @@ -17347,7 +17353,7 @@ snapshots: '@types/readdir-glob@1.1.5': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/retry@0.12.2': {} @@ -17357,18 +17363,18 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/semver@7.7.1': {} '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/send@1.2.1': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/serve-index@1.9.4': dependencies: @@ -17377,25 +17383,25 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/send': 0.17.6 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/sockjs@0.3.36': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/ssh2-streams@0.1.13': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/ssh2@0.5.52': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/ssh2-streams': 0.1.13 '@types/ssh2@1.15.5': @@ -17406,7 +17412,7 @@ snapshots: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 24.12.0 + '@types/node': 24.12.2 form-data: 4.0.5 '@types/supercluster@7.1.3': @@ -17420,7 +17426,7 @@ snapshots: '@types/through@0.0.33': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/trusted-types@2.0.7': {} @@ -17436,7 +17442,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/yargs-parser@21.0.3': {} @@ -17539,7 +17545,7 @@ snapshots: '@vercel/oidc@3.0.5': {} - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -17554,11 +17560,11 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.2 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -17570,9 +17576,9 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -17584,7 +17590,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/expect@3.2.4': dependencies: @@ -17603,29 +17609,29 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.1.0(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/mocker@4.1.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.0(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -18129,15 +18135,15 @@ snapshots: binary-extensions@2.3.0: {} - bits-ui@2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): + bits-ui@2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): dependencies: '@floating-ui/core': 1.7.3 '@floating-ui/dom': 1.7.4 '@internationalized/date': 3.12.0 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + runed: 0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) svelte: 5.54.1 - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -19425,7 +19431,7 @@ snapshots: engine.io@6.6.5: dependencies: '@types/cors': 2.8.19 - '@types/node': 24.12.0 + '@types/node': 24.12.2 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -19824,7 +19830,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 require-like: 0.1.2 event-emitter@0.3.5: @@ -20397,7 +20403,7 @@ snapshots: happy-dom@20.8.9: dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 entities: 7.0.1 @@ -20829,9 +20835,9 @@ snapshots: inline-style-parser@0.2.7: {} - inquirer@8.2.7(@types/node@24.12.0): + inquirer@8.2.7(@types/node@24.12.2): dependencies: - '@inquirer/external-editor': 1.0.3(@types/node@24.12.0) + '@inquirer/external-editor': 1.0.3(@types/node@24.12.2) ansi-escapes: 4.3.2 chalk: 4.1.2 cli-cursor: 3.1.0 @@ -21067,7 +21073,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.12.0 + '@types/node': 24.12.2 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -21075,13 +21081,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -22348,7 +22354,7 @@ snapshots: neo-async@2.6.2: {} - nest-commander@3.20.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@types/inquirer@8.2.12)(@types/node@24.12.0)(typescript@5.9.3): + nest-commander@3.20.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@types/inquirer@8.2.12)(@types/node@24.12.2)(typescript@5.9.3): dependencies: '@fig/complete-commander': 3.2.0(commander@11.1.0) '@golevelup/nestjs-discovery': 5.0.0(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17) @@ -22357,7 +22363,7 @@ snapshots: '@types/inquirer': 8.2.12 commander: 11.1.0 cosmiconfig: 8.3.6(typescript@5.9.3) - inquirer: 8.2.7(@types/node@24.12.0) + inquirer: 8.2.7(@types/node@24.12.2) transitivePeerDependencies: - '@types/node' - typescript @@ -23478,7 +23484,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 24.12.0 + '@types/node': 24.12.2 long: 5.3.2 protocol-buffers-schema@3.6.0: {} @@ -23928,35 +23934,38 @@ snapshots: robust-predicates@3.0.3: {} - rolldown@1.0.0-rc.10: + rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): dependencies: - '@oxc-project/types': 0.120.0 - '@rolldown/pluginutils': 1.0.0-rc.10 + '@oxc-project/types': 0.122.0 + '@rolldown/pluginutils': 1.0.0-rc.12 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.10 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.10 - '@rolldown/binding-darwin-x64': 1.0.0-rc.10 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.10 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.10 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.10 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.10 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.10 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.10 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.10 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.10 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.10 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.10 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.10 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.10 + '@rolldown/binding-android-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-x64': 1.0.0-rc.12 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' - rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.10)(rollup@4.55.1): + rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(rollup@4.55.1): dependencies: open: 8.4.2 picomatch: 4.0.4 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rolldown: 1.0.0-rc.10 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) rollup: 4.55.1 rollup@4.55.1: @@ -24025,14 +24034,14 @@ snapshots: dependencies: queue-microtask: 1.2.3 - runed@0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): + runed@0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 svelte: 5.54.1 optionalDependencies: - '@sveltejs/kit': 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/kit': 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) rw@1.3.3: {} @@ -24761,10 +24770,10 @@ snapshots: dependencies: svelte-floating-ui: 1.5.8 - svelte-toolbelt@0.10.6(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + runed: 0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) style-to-object: 1.0.14 svelte: 5.54.1 transitivePeerDependencies: @@ -25465,13 +25474,13 @@ snapshots: - rollup - supports-color - vite-node@3.2.4(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vite-node@3.2.4(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -25486,17 +25495,17 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - typescript - vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.4) @@ -25505,7 +25514,7 @@ snapshots: rollup: 4.55.1 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 @@ -25514,15 +25523,15 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.8 - rolldown: 1.0.0-rc.10 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 esbuild: 0.27.4 fsevents: 2.3.3 jiti: 2.6.1 @@ -25530,13 +25539,16 @@ snapshots: terser: 5.44.1 tsx: 4.21.0 yaml: 2.8.3 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' - vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.8 - rolldown: 1.0.0-rc.10 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) tinyglobby: 0.2.15 optionalDependencies: '@types/node': 25.5.0 @@ -25547,20 +25559,23 @@ snapshots: terser: 5.44.1 tsx: 4.21.0 yaml: 2.8.3 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' - vitefu@1.1.2(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitefu@1.1.2(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: - vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vitest-fetch-mock@0.4.5(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))): + vitest-fetch-mock@0.4.5(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))): dependencies: - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -25578,12 +25593,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vite-node: 3.2.4(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 24.12.0 + '@types/node': 24.12.2 happy-dom: 20.8.9 jsdom: 26.1.0(canvas@2.11.2) transitivePeerDependencies: @@ -25600,10 +25615,10 @@ snapshots: - tsx - yaml - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.0(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -25620,20 +25635,20 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 24.12.0 + '@types/node': 24.12.2 happy-dom: 20.8.9 jsdom: 26.1.0(canvas@2.11.2(encoding@0.1.13)) transitivePeerDependencies: - msw - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.0(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -25650,20 +25665,20 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 8.0.1(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 24.12.0 + '@types/node': 24.12.2 happy-dom: 20.8.9 jsdom: 26.1.0(canvas@2.11.2) transitivePeerDependencies: - msw - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.0(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -25680,7 +25695,7 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 8.0.1(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 From 4987032e62e646ece9762cb46642b304d855c7a9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:48:06 +0200 Subject: [PATCH 117/156] chore(deps): update docker.io/valkey/valkey:9 docker digest to 3b55fba (#27559) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docker/docker-compose.dev.yml | 2 +- docker/docker-compose.prod.yml | 2 +- docker/docker-compose.rootless.yml | 2 +- docker/docker-compose.yml | 2 +- e2e/docker-compose.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 1dac8f2c50..bcfb86a2aa 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -156,7 +156,7 @@ services: redis: container_name: immich_redis - image: docker.io/valkey/valkey:9@sha256:3eeb09785cd61ec8e3be35f8804c8892080f3ca21934d628abc24ee4ed1698f6 + image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 healthcheck: test: redis-cli ping || exit 1 diff --git a/docker/docker-compose.prod.yml b/docker/docker-compose.prod.yml index 2d185a8487..8eb54670f3 100644 --- a/docker/docker-compose.prod.yml +++ b/docker/docker-compose.prod.yml @@ -56,7 +56,7 @@ services: redis: container_name: immich_redis - image: docker.io/valkey/valkey:9@sha256:3eeb09785cd61ec8e3be35f8804c8892080f3ca21934d628abc24ee4ed1698f6 + image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 healthcheck: test: redis-cli ping || exit 1 restart: always diff --git a/docker/docker-compose.rootless.yml b/docker/docker-compose.rootless.yml index eb41bf9bca..c16a623807 100644 --- a/docker/docker-compose.rootless.yml +++ b/docker/docker-compose.rootless.yml @@ -61,7 +61,7 @@ services: redis: container_name: immich_redis - image: docker.io/valkey/valkey:9@sha256:3eeb09785cd61ec8e3be35f8804c8892080f3ca21934d628abc24ee4ed1698f6 + image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 user: '1000:1000' security_opt: - no-new-privileges:true diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 4437087d24..610b375011 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -49,7 +49,7 @@ services: redis: container_name: immich_redis - image: docker.io/valkey/valkey:9@sha256:3eeb09785cd61ec8e3be35f8804c8892080f3ca21934d628abc24ee4ed1698f6 + image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 healthcheck: test: redis-cli ping || exit 1 restart: always diff --git a/e2e/docker-compose.yml b/e2e/docker-compose.yml index 957de4698e..c8a3b975d4 100644 --- a/e2e/docker-compose.yml +++ b/e2e/docker-compose.yml @@ -44,7 +44,7 @@ services: redis: container_name: immich-e2e-redis - image: docker.io/valkey/valkey:9@sha256:3eeb09785cd61ec8e3be35f8804c8892080f3ca21934d628abc24ee4ed1698f6 + image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 healthcheck: test: redis-cli ping || exit 1 From 4e28811f095275786d87bd6cab52c86578e17e66 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:49:05 +0200 Subject: [PATCH 118/156] chore(deps): update prom/prometheus docker digest to dda13e2 (#27566) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docker/docker-compose.prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.prod.yml b/docker/docker-compose.prod.yml index 8eb54670f3..700f68ff19 100644 --- a/docker/docker-compose.prod.yml +++ b/docker/docker-compose.prod.yml @@ -85,7 +85,7 @@ services: container_name: immich_prometheus ports: - 9090:9090 - image: prom/prometheus@sha256:4a61322ac1103a0e3aea2a61ef1718422a48fa046441f299d71e660a3bc71ae9 + image: prom/prometheus@sha256:dda13e28bf95a5e5ca5b8ed56852006094c1c8e8871d9c9dbeed30aa6e55271f volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus-data:/prometheus From e6d114af10bc7118bffbc4b1a2ced576abfcbc33 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 12:37:29 +0200 Subject: [PATCH 119/156] chore(deps): update dependency terragrunt to v0.99.5 (#27567) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- deployment/mise.toml | 2 +- mise.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deployment/mise.toml b/deployment/mise.toml index 4f03e27ff7..bda19c4c84 100644 --- a/deployment/mise.toml +++ b/deployment/mise.toml @@ -1,5 +1,5 @@ [tools] -terragrunt = "0.99.4" +terragrunt = "0.99.5" opentofu = "1.11.5" [tasks."tg:fmt"] diff --git a/mise.toml b/mise.toml index 90cc03a50f..ab44ea8652 100644 --- a/mise.toml +++ b/mise.toml @@ -17,7 +17,7 @@ config_roots = [ node = "24.14.1" flutter = "3.35.7" pnpm = "10.32.1" -terragrunt = "0.99.4" +terragrunt = "0.99.5" opentofu = "1.11.5" java = "21.0.2" From 8f3a99ffbc6f08f25e529782454835f7080b8007 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 10:52:25 +0000 Subject: [PATCH 120/156] chore(deps): update dependency eslint-plugin-compat to v7 (#27570) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 12 ++++++------ web/package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1588157ac1..755be5234b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -928,8 +928,8 @@ importers: specifier: ^10.1.8 version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-compat: - specifier: ^6.0.2 - version: 6.2.1(eslint@10.1.0(jiti@2.6.1)) + specifier: ^7.0.0 + version: 7.0.1(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-svelte: specifier: ^3.12.4 version: 3.16.0(eslint@10.1.0(jiti@2.6.1))(svelte@5.54.1) @@ -7151,11 +7151,11 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-compat@6.2.1: - resolution: {integrity: sha512-gLKqUH+lQcCL+HzsROUjBDvakc5Zaga51Y4ZAkPCXc41pzKBfyluqTr2j8zOx8QQQb7zyglu1LVoL5aSNWf2SQ==} + eslint-plugin-compat@7.0.1: + resolution: {integrity: sha512-wDID2fVIAfxV9R1uSkCn5HscnNu8yMxDF1IaQGyD1C6XuWwJbuaDgMOSkVgOom0LzY8z0fXXXCy7AQQTERQUvQ==} engines: {node: '>=18.x'} peerDependencies: - eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 + eslint: ^9.0.0 || ^10.0.0 eslint-plugin-prettier@5.5.5: resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==} @@ -19623,7 +19623,7 @@ snapshots: dependencies: eslint: 10.1.0(jiti@2.6.1) - eslint-plugin-compat@6.2.1(eslint@10.1.0(jiti@2.6.1)): + eslint-plugin-compat@7.0.1(eslint@10.1.0(jiti@2.6.1)): dependencies: '@mdn/browser-compat-data': 6.1.5 ast-metadata-inferer: 0.8.1 diff --git a/web/package.json b/web/package.json index 736f005f9b..4cb09e1a08 100644 --- a/web/package.json +++ b/web/package.json @@ -89,7 +89,7 @@ "dotenv": "^17.0.0", "eslint": "^10.0.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-compat": "^6.0.2", + "eslint-plugin-compat": "^7.0.0", "eslint-plugin-svelte": "^3.12.4", "eslint-plugin-unicorn": "^63.0.0", "factory.ts": "^1.4.1", From 3be97db118024a4f1591b4ab992b3b0afb21bcf7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 12:53:33 +0200 Subject: [PATCH 121/156] fix(deps): update react monorepo to v19 (major) (#27571) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/package.json | 4 +- pnpm-lock.yaml | 496 ++++++++++++++++++++++------------------------ 2 files changed, 237 insertions(+), 263 deletions(-) diff --git a/docs/package.json b/docs/package.json index 03dae60b33..a6829f9fc5 100644 --- a/docs/package.json +++ b/docs/package.json @@ -30,8 +30,8 @@ "postcss": "^8.4.25", "prism-react-renderer": "^2.3.1", "raw-loader": "^4.0.2", - "react": "^18.0.0", - "react-dom": "^18.0.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", "tailwindcss": "^3.2.4", "url": "^0.11.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 755be5234b..b40631b711 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -124,16 +124,16 @@ importers: dependencies: '@docusaurus/core': specifier: ~3.9.0 - version: 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + version: 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/preset-classic': specifier: ~3.9.0 - version: 3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3) + version: 3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3) '@docusaurus/theme-common': specifier: ~3.9.0 - version: 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/theme-mermaid': specifier: ~3.9.0 - version: 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + version: 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@mdi/js': specifier: ^7.3.67 version: 7.4.47 @@ -142,13 +142,13 @@ importers: version: 1.6.1 '@mdx-js/react': specifier: ^3.0.0 - version: 3.1.1(@types/react@19.2.14)(react@18.3.1) + version: 3.1.1(@types/react@19.2.14)(react@19.2.4) autoprefixer: specifier: ^10.4.17 version: 10.4.27(postcss@8.5.8) docusaurus-lunr-search: specifier: ^3.3.2 - version: 3.6.0(@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.6.0(@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) lunr: specifier: ^2.3.9 version: 2.3.9 @@ -157,16 +157,16 @@ importers: version: 8.5.8 prism-react-renderer: specifier: ^2.3.1 - version: 2.4.1(react@18.3.1) + version: 2.4.1(react@19.2.4) raw-loader: specifier: ^4.0.2 version: 4.0.2(webpack@5.104.1) react: - specifier: ^18.0.0 - version: 18.3.1 + specifier: ^19.0.0 + version: 19.2.4 react-dom: - specifier: ^18.0.0 - version: 18.3.1(react@18.3.1) + specifier: ^19.0.0 + version: 19.2.4(react@19.2.4) tailwindcss: specifier: ^3.2.4 version: 3.4.19(tsx@4.21.0)(yaml@2.8.3) @@ -176,13 +176,13 @@ importers: devDependencies: '@docusaurus/module-type-aliases': specifier: ~3.9.0 - version: 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/tsconfig': specifier: ^3.7.0 version: 3.9.2 '@docusaurus/types': specifier: ^3.7.0 - version: 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) prettier: specifier: ^3.7.4 version: 3.8.1 @@ -10468,11 +10468,6 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 - react-dom@19.2.4: resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: @@ -10524,10 +10519,6 @@ packages: peerDependencies: react: '>=15' - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - react@19.2.4: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} @@ -10841,9 +10832,6 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -12487,12 +12475,12 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/react@2.0.115(react@18.3.1)(zod@4.2.1)': + '@ai-sdk/react@2.0.115(react@19.2.4)(zod@4.2.1)': dependencies: '@ai-sdk/provider-utils': 3.0.19(zod@4.2.1) ai: 5.0.113(zod@4.2.1) - react: 18.3.1 - swr: 2.3.8(react@18.3.1) + react: 19.2.4 + swr: 2.3.8(react@19.2.4) throttleit: 2.1.0 optionalDependencies: zod: 4.2.1 @@ -13812,19 +13800,19 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@docsearch/core@4.3.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docsearch/core@4.3.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': optionalDependencies: '@types/react': 19.2.14 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) '@docsearch/css@4.3.2': {} - '@docsearch/react@4.3.2(@algolia/client-search@5.46.0)(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)': + '@docsearch/react@4.3.2(@algolia/client-search@5.46.0)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)': dependencies: - '@ai-sdk/react': 2.0.115(react@18.3.1)(zod@4.2.1) + '@ai-sdk/react': 2.0.115(react@19.2.4)(zod@4.2.1) '@algolia/autocomplete-core': 1.19.2(@algolia/client-search@5.46.0)(algoliasearch@5.46.0)(search-insights@2.17.3) - '@docsearch/core': 4.3.1(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docsearch/core': 4.3.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docsearch/css': 4.3.2 ai: 5.0.113(zod@4.2.1) algoliasearch: 5.46.0 @@ -13832,13 +13820,13 @@ snapshots: zod: 4.2.1 optionalDependencies: '@types/react': 19.2.14 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/babel@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/babel@3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/core': 7.28.5 '@babel/generator': 7.28.5 @@ -13851,7 +13839,7 @@ snapshots: '@babel/runtime-corejs3': 7.28.4 '@babel/traverse': 7.28.5 '@docusaurus/logger': 3.9.2 - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) babel-plugin-dynamic-import-node: 2.3.3 fs-extra: 11.3.2 tslib: 2.8.1 @@ -13864,14 +13852,14 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/bundler@3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: '@babel/core': 7.28.5 - '@docusaurus/babel': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/babel': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/cssnano-preset': 3.9.2 '@docusaurus/logger': 3.9.2 - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) babel-loader: 9.2.1(@babel/core@7.28.5)(webpack@5.104.1) clean-css: 5.3.3 copy-webpack-plugin: 11.0.0(webpack@5.104.1) @@ -13905,16 +13893,16 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/babel': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/bundler': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/babel': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/bundler': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 - '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@18.3.1) + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.4) boxen: 6.2.1 chalk: 4.1.2 chokidar: 3.6.0 @@ -13935,14 +13923,14 @@ snapshots: open: 8.4.2 p-map: 4.0.0 prompts: 2.4.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' - react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.104.1) - react-router: 5.3.4(react@18.3.1) - react-router-config: 5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1) - react-router-dom: 5.3.4(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' + react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.4)' + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@19.2.4))(webpack@5.104.1) + react-router: 5.3.4(react@19.2.4) + react-router-config: 5.1.1(react-router@5.3.4(react@19.2.4))(react@19.2.4) + react-router-dom: 5.3.4(react@19.2.4) semver: 7.7.4 serve-handler: 6.1.6 tinypool: 1.1.1 @@ -13981,11 +13969,11 @@ snapshots: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/mdx-loader@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/mdx-loader@3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@docusaurus/logger': 3.9.2 - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@mdx-js/mdx': 3.1.1 '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 @@ -13995,8 +13983,8 @@ snapshots: image-size: 2.0.2 mdast-util-mdx: 3.0.0 mdast-util-to-string: 4.0.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) rehype-raw: 7.0.0 remark-directive: 3.0.1 remark-emoji: 4.0.1 @@ -14016,17 +14004,17 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/module-type-aliases@3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/history': 4.7.11 '@types/react': 19.2.14 '@types/react-router-config': 5.0.11 '@types/react-router-dom': 5.3.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' - react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' + react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.4)' transitivePeerDependencies: - '@swc/core' - esbuild @@ -14034,23 +14022,23 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/plugin-content-blog@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 - '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.3.2 lodash: 4.18.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) schema-dts: 1.1.5 srcset: 4.0.0 tslib: 2.8.1 @@ -14075,24 +14063,24 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 - '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.3.2 js-yaml: 4.1.1 lodash: 4.18.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) schema-dts: 1.1.5 tslib: 2.8.1 utility-types: 3.11.0 @@ -14115,16 +14103,16 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-pages@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/plugin-content-pages@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) fs-extra: 11.3.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tslib: 2.8.1 webpack: 5.104.1 transitivePeerDependencies: @@ -14145,12 +14133,12 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-css-cascade-layers@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/plugin-css-cascade-layers@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -14172,15 +14160,15 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-debug@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/plugin-debug@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) fs-extra: 11.3.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-json-view-lite: 2.5.0(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-json-view-lite: 2.5.0(react@19.2.4) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -14200,13 +14188,13 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-analytics@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/plugin-google-analytics@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -14226,14 +14214,14 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-gtag@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/plugin-google-gtag@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/gtag.js': 0.0.12 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -14253,13 +14241,13 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/plugin-google-tag-manager@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -14279,17 +14267,17 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-sitemap@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/plugin-sitemap@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) fs-extra: 11.3.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) sitemap: 7.1.2 tslib: 2.8.1 transitivePeerDependencies: @@ -14310,16 +14298,16 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-svgr@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/plugin-svgr@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@svgr/core': 8.1.0(typescript@5.9.3) '@svgr/webpack': 8.1.0(typescript@5.9.3) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tslib: 2.8.1 webpack: 5.104.1 transitivePeerDependencies: @@ -14340,25 +14328,25 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/preset-classic@3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3)': + '@docusaurus/preset-classic@3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-css-cascade-layers': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-debug': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-google-analytics': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-google-gtag': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-google-tag-manager': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-sitemap': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-svgr': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/theme-classic': 3.9.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-search-algolia': 3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3) - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-css-cascade-layers': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-debug': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-google-analytics': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-google-gtag': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-google-tag-manager': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-sitemap': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-svgr': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/theme-classic': 3.9.2(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/theme-search-algolia': 3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/faster' @@ -14380,37 +14368,37 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/react-loadable@6.0.0(react@18.3.1)': + '@docusaurus/react-loadable@6.0.0(react@19.2.4)': dependencies: '@types/react': 19.2.14 - react: 18.3.1 + react: 19.2.4 - '@docusaurus/theme-classic@3.9.2(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/theme-classic@3.9.2(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 - '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/theme-translations': 3.9.2 - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@18.3.1) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.4) clsx: 2.1.1 infima: 0.2.0-alpha.45 lodash: 4.18.1 nprogress: 0.2.0 postcss: 8.5.8 - prism-react-renderer: 2.4.1(react@18.3.1) + prism-react-renderer: 2.4.1(react@19.2.4) prismjs: 1.30.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-router-dom: 5.3.4(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-router-dom: 5.3.4(react@19.2.4) rtlcss: 4.3.0 tslib: 2.8.1 utility-types: 3.11.0 @@ -14432,21 +14420,21 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-common@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/theme-common@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@docusaurus/mdx-loader': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/history': 4.7.11 '@types/react': 19.2.14 '@types/react-router-config': 5.0.11 clsx: 2.1.1 parse-numeric-range: 1.3.0 - prism-react-renderer: 2.4.1(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + prism-react-renderer: 2.4.1(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tslib: 2.8.1 utility-types: 3.11.0 transitivePeerDependencies: @@ -14456,16 +14444,16 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-mermaid@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': + '@docusaurus/theme-mermaid@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/module-type-aliases': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) mermaid: 11.12.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -14486,24 +14474,24 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-search-algolia@3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3)': + '@docusaurus/theme-search-algolia@3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3)': dependencies: - '@docsearch/react': 4.3.2(@algolia/client-search@5.46.0)(@types/react@19.2.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docsearch/react': 4.3.2(@algolia/client-search@5.46.0)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 - '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/theme-translations': 3.9.2 - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) algoliasearch: 5.46.0 algoliasearch-helper: 3.26.1(algoliasearch@5.46.0) clsx: 2.1.1 eta: 2.2.0 fs-extra: 11.3.2 lodash: 4.18.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tslib: 2.8.1 utility-types: 3.11.0 transitivePeerDependencies: @@ -14534,7 +14522,7 @@ snapshots: '@docusaurus/tsconfig@3.9.2': {} - '@docusaurus/types@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/types@3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@mdx-js/mdx': 3.1.1 '@types/history': 4.7.11 @@ -14542,9 +14530,9 @@ snapshots: '@types/react': 19.2.14 commander: 5.1.0 joi: 17.13.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' utility-types: 3.11.0 webpack: 5.104.1 webpack-merge: 5.10.0 @@ -14555,9 +14543,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-common@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils-common@3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) tslib: 2.8.1 transitivePeerDependencies: - '@swc/core' @@ -14568,11 +14556,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils-validation@3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@docusaurus/logger': 3.9.2 - '@docusaurus/utils': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) fs-extra: 11.3.2 joi: 17.13.3 js-yaml: 4.1.1 @@ -14587,11 +14575,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils@3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@docusaurus/logger': 3.9.2 - '@docusaurus/types': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/utils-common': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) escape-string-regexp: 4.0.0 execa: 5.1.1 file-loader: 6.2.0(webpack@5.104.1) @@ -15576,11 +15564,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1)': + '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.2.14 - react: 18.3.1 + react: 19.2.4 '@mermaid-js/parser@0.6.3': dependencies: @@ -16510,13 +16498,13 @@ snapshots: '@sindresorhus/is@5.6.0': {} - '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@slorber/react-helmet-async@1.3.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.29.2 invariant: 2.2.4 prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) react-fast-compare: 3.2.2 shallowequal: 1.1.0 @@ -19292,9 +19280,9 @@ snapshots: transitivePeerDependencies: - supports-color - docusaurus-lunr-search@3.6.0(@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + docusaurus-lunr-search@3.6.0(@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) autocomplete.js: 0.37.1 clsx: 2.1.1 gauge: 3.0.2 @@ -19305,8 +19293,8 @@ snapshots: lunr-languages: 1.14.0 mark.js: 8.11.1 minimatch: 3.1.5 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) rehype-parse: 7.0.1 to-vfile: 6.1.0 unified: 9.2.2 @@ -23421,11 +23409,11 @@ snapshots: pretty-time@1.1.0: {} - prism-react-renderer@2.4.1(react@18.3.1): + prism-react-renderer@2.4.1(react@19.2.4): dependencies: '@types/prismjs': 1.26.5 clsx: 2.1.1 - react: 18.3.1 + react: 19.2.4 prismjs@1.30.0: {} @@ -23567,12 +23555,6 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-dom@18.3.1(react@18.3.1): - dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 - react-dom@19.2.4(react@19.2.4): dependencies: react: 19.2.4 @@ -23607,38 +23589,38 @@ snapshots: react-is@17.0.2: {} - react-json-view-lite@2.5.0(react@18.3.1): + react-json-view-lite@2.5.0(react@19.2.4): dependencies: - react: 18.3.1 + react: 19.2.4 - react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.104.1): + react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@19.2.4))(webpack@5.104.1): dependencies: '@babel/runtime': 7.29.2 - react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' + react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.4)' webpack: 5.104.1 react-promise-suspense@0.3.4: dependencies: fast-deep-equal: 2.0.1 - react-router-config@5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1): + react-router-config@5.1.1(react-router@5.3.4(react@19.2.4))(react@19.2.4): dependencies: '@babel/runtime': 7.29.2 - react: 18.3.1 - react-router: 5.3.4(react@18.3.1) + react: 19.2.4 + react-router: 5.3.4(react@19.2.4) - react-router-dom@5.3.4(react@18.3.1): + react-router-dom@5.3.4(react@19.2.4): dependencies: '@babel/runtime': 7.29.2 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 18.3.1 - react-router: 5.3.4(react@18.3.1) + react: 19.2.4 + react-router: 5.3.4(react@19.2.4) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - react-router@5.3.4(react@18.3.1): + react-router@5.3.4(react@19.2.4): dependencies: '@babel/runtime': 7.29.2 history: 4.10.1 @@ -23646,15 +23628,11 @@ snapshots: loose-envify: 1.4.0 path-to-regexp: 1.9.0 prop-types: 15.8.1 - react: 18.3.1 + react: 19.2.4 react-is: 16.13.1 tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - react@18.3.1: - dependencies: - loose-envify: 1.4.0 - react@19.2.4: {} read-cache@1.0.0: @@ -24091,10 +24069,6 @@ snapshots: xmlchars: 2.2.0 optional: true - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 - scheduler@0.27.0: {} schema-dts@1.1.5: {} @@ -24814,11 +24788,11 @@ snapshots: dependencies: '@scarf/scarf': 1.4.0 - swr@2.3.8(react@18.3.1): + swr@2.3.8(react@19.2.4): dependencies: dequal: 2.0.3 - react: 18.3.1 - use-sync-external-store: 1.6.0(react@18.3.1) + react: 19.2.4 + use-sync-external-store: 1.6.0(react@19.2.4) symbol-observable@4.0.0: {} @@ -25398,9 +25372,9 @@ snapshots: urlpattern-polyfill@8.0.2: {} - use-sync-external-store@1.6.0(react@18.3.1): + use-sync-external-store@1.6.0(react@19.2.4): dependencies: - react: 18.3.1 + react: 19.2.4 utf8-byte-length@1.0.5: {} From 3d6c7ba353dcedb173d4790291d91086685f32e2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 10:57:45 +0000 Subject: [PATCH 122/156] chore(deps): update dependency @types/supertest to v7 (#27574) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- e2e/package.json | 2 +- pnpm-lock.yaml | 14 +++++++------- server/package.json | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index d545fa1b86..4c33ebe04e 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -35,7 +35,7 @@ "@types/node": "^24.12.0", "@types/pg": "^8.15.1", "@types/pngjs": "^6.0.4", - "@types/supertest": "^6.0.2", + "@types/supertest": "^7.0.0", "dotenv": "^17.2.3", "eslint": "^10.0.0", "eslint-config-prettier": "^10.1.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b40631b711..61368b37b3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -226,8 +226,8 @@ importers: specifier: ^6.0.4 version: 6.0.5 '@types/supertest': - specifier: ^6.0.2 - version: 6.0.3 + specifier: ^7.0.0 + version: 7.2.0 dotenv: specifier: ^17.2.3 version: 17.3.1 @@ -666,8 +666,8 @@ importers: specifier: ^7.5.8 version: 7.7.1 '@types/supertest': - specifier: ^6.0.0 - version: 6.0.3 + specifier: ^7.0.0 + version: 7.2.0 '@types/ua-parser-js': specifier: ^0.7.36 version: 0.7.39 @@ -5209,8 +5209,8 @@ packages: '@types/supercluster@7.1.3': resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==} - '@types/supertest@6.0.3': - resolution: {integrity: sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==} + '@types/supertest@7.2.0': + resolution: {integrity: sha512-uh2Lv57xvggst6lCqNdFAmDSvoMG7M/HDtX4iUCquxQ5EGPtaPM5PL5Hmi7LCvOG8db7YaCPNJEeoI8s/WzIQw==} '@types/through@0.0.33': resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} @@ -17407,7 +17407,7 @@ snapshots: dependencies: '@types/geojson': 7946.0.16 - '@types/supertest@6.0.3': + '@types/supertest@7.2.0': dependencies: '@types/methods': 1.1.4 '@types/superagent': 8.1.9 diff --git a/server/package.json b/server/package.json index 1adad9ba8b..6cc1976c21 100644 --- a/server/package.json +++ b/server/package.json @@ -149,7 +149,7 @@ "@types/react": "^19.0.0", "@types/sanitize-html": "^2.13.0", "@types/semver": "^7.5.8", - "@types/supertest": "^6.0.0", + "@types/supertest": "^7.0.0", "@types/ua-parser-js": "^0.7.36", "@types/validator": "^13.15.2", "@vitest/coverage-v8": "^3.0.0", From 7f784952ebeb7e1d426bec03bbcc03fed08c2055 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:01:23 +0000 Subject: [PATCH 123/156] chore(deps): update dependency rollup-plugin-visualizer to v7 (#27576) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 91 +++++++++++++++++++++++++++++++++++++++++++----- web/package.json | 2 +- 2 files changed, 83 insertions(+), 10 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61368b37b3..08861394f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -955,8 +955,8 @@ importers: specifier: ^3.3.3 version: 3.5.1(prettier@3.8.1)(svelte@5.54.1) rollup-plugin-visualizer: - specifier: ^6.0.0 - version: 6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(rollup@4.55.1) + specifier: ^7.0.0 + version: 7.0.1(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(rollup@4.55.1) svelte: specifier: 5.54.1 version: 5.54.1 @@ -6150,6 +6150,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} @@ -8179,6 +8183,10 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-in-ssh@1.0.0: + resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==} + engines: {node: '>=20'} + is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -9515,6 +9523,10 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} + open@11.0.0: + resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} + engines: {node: '>=20'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -10291,6 +10303,10 @@ packages: potpack@2.1.0: resolution: {integrity: sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==} + powershell-utils@0.1.0: + resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} + engines: {node: '>=20'} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -10739,12 +10755,12 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup-plugin-visualizer@6.0.11: - resolution: {integrity: sha512-TBwVHVY7buHjIKVLqr9scTVFwqZqMXINcCphPwIWKPDCOBIa+jCQfafvbjRJDZgXdq/A996Dy6yGJ/+/NtAXDQ==} - engines: {node: '>=18'} + rollup-plugin-visualizer@7.0.1: + resolution: {integrity: sha512-UJUT4+1Ho4OcWmPYU3sYXgUqI8B8Ayfe06MX7y0qCJ1K8aGoKtR/NDd/2nZqM7ADkrzny+I99Ul7GgyoiVNAgg==} + engines: {node: '>=22'} hasBin: true peerDependencies: - rolldown: 1.x || ^1.0.0-beta + rolldown: 1.x || ^1.0.0-beta || ^1.0.0-rc rollup: 2.x || 3.x || 4.x peerDependenciesMeta: rolldown: @@ -12310,6 +12326,10 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -12356,6 +12376,10 @@ packages: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} + wsl-utils@0.3.1: + resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} + engines: {node: '>=20'} + xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} @@ -12413,6 +12437,10 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} @@ -12421,6 +12449,10 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -18531,6 +18563,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 @@ -20943,6 +20981,8 @@ snapshots: is-hexadecimal@2.0.1: {} + is-in-ssh@1.0.0: {} + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 @@ -22566,6 +22606,15 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 + open@11.0.0: + dependencies: + default-browser: 5.4.0 + define-lazy-prop: 3.0.0 + is-in-ssh: 1.0.0 + is-inside-container: 1.0.0 + powershell-utils: 0.1.0 + wsl-utils: 0.3.1 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -23374,6 +23423,8 @@ snapshots: potpack@2.1.0: {} + powershell-utils@0.1.0: {} + prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.1: @@ -23936,12 +23987,12 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' - rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(rollup@4.55.1): + rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(rollup@4.55.1): dependencies: - open: 8.4.2 + open: 11.0.0 picomatch: 4.0.4 source-map: 0.7.6 - yargs: 17.7.2 + yargs: 18.0.0 optionalDependencies: rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) rollup: 4.55.1 @@ -25966,6 +26017,12 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.2.0 + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrappy@1.0.2: {} write-file-atomic@3.0.3: @@ -25985,6 +26042,11 @@ snapshots: dependencies: is-wsl: 3.1.1 + wsl-utils@0.3.1: + dependencies: + is-wsl: 3.1.1 + powershell-utils: 0.1.0 + xdg-basedir@5.1.0: {} xml-js@1.6.11: @@ -26022,6 +26084,8 @@ snapshots: yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs@15.4.1: dependencies: cliui: 6.0.0 @@ -26046,6 +26110,15 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@18.0.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yocto-queue@0.1.0: {} yocto-queue@1.2.2: {} diff --git a/web/package.json b/web/package.json index 4cb09e1a08..fb30ad8db3 100644 --- a/web/package.json +++ b/web/package.json @@ -99,7 +99,7 @@ "prettier-plugin-organize-imports": "^4.0.0", "prettier-plugin-sort-json": "^4.1.1", "prettier-plugin-svelte": "^3.3.3", - "rollup-plugin-visualizer": "^6.0.0", + "rollup-plugin-visualizer": "^7.0.0", "svelte": "5.54.1", "svelte-check": "^4.1.5", "svelte-eslint-parser": "^1.3.3", From de9ec95db190e06ea2570771a94d89c443e79c31 Mon Sep 17 00:00:00 2001 From: Min Idzelis Date: Tue, 7 Apr 2026 10:22:29 -0400 Subject: [PATCH 124/156] fix(web): handle unhandled promise rejection in CancellableTask (#27553) When a concurrent caller awaits `this.complete` inside `execute()` and `cancel()` is called, the promise rejects with `undefined` outside of any try/catch, causing "Uncaught (in promise) undefined" console spam during rapid timeline scrolling. - Wrap the `await this.complete` path in try/catch, returning 'CANCELED' - Guard the `finally` block to only null `cancelToken` if it still belongs to this call, preventing a race condition with `cancel()` to `init()` Change-Id: I65764dd664eb408433fc6e5fc2be4df56a6a6964 --- web/src/lib/utils/cancellable-task.spec.ts | 24 ++++++++++++++++++++++ web/src/lib/utils/cancellable-task.ts | 12 ++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/web/src/lib/utils/cancellable-task.spec.ts b/web/src/lib/utils/cancellable-task.spec.ts index 97d63684f8..27e4678d4f 100644 --- a/web/src/lib/utils/cancellable-task.spec.ts +++ b/web/src/lib/utils/cancellable-task.spec.ts @@ -161,6 +161,30 @@ describe('CancellableTask', () => { expect(task.executed).toBe(true); }); + it('should return CANCELED when concurrent caller is waiting and task is canceled', async () => { + const task = new CancellableTask(); + let resolveTask: () => void; + const taskPromise = new Promise((resolve) => { + resolveTask = resolve; + }); + const taskFn = async (signal: AbortSignal) => { + await taskPromise; + if (signal.aborted) { + throw new DOMException('Aborted', 'AbortError'); + } + }; + + const promise1 = task.execute(taskFn, true); + const promise2 = task.execute(taskFn, true); + + task.cancel(); + resolveTask!(); + + const [result1, result2] = await Promise.all([promise1, promise2]); + expect(result1).toBe('CANCELED'); + expect(result2).toBe('CANCELED'); + }); + it('should not cancel if task is already executed', async () => { const task = new CancellableTask(); const taskFn = vi.fn(async () => {}); diff --git a/web/src/lib/utils/cancellable-task.ts b/web/src/lib/utils/cancellable-task.ts index f5f4d7830b..c8cd9db4c0 100644 --- a/web/src/lib/utils/cancellable-task.ts +++ b/web/src/lib/utils/cancellable-task.ts @@ -64,8 +64,12 @@ export class CancellableTask { if (this.cancellable && !cancellable) { this.cancellable = cancellable; } - await this.complete; - return 'WAITED'; + try { + await this.complete; + return 'WAITED'; + } catch { + return 'CANCELED'; + } } this.cancellable = cancellable; const cancelToken = (this.cancelToken = new AbortController()); @@ -86,7 +90,9 @@ export class CancellableTask { this.#transitionToErrored(error); return 'ERRORED'; } finally { - this.cancelToken = null; + if (this.cancelToken === cancelToken) { + this.cancelToken = null; + } } } From 1d0e5cf18d14e0921609c500c648bb7e53f59287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Szyma=C5=84ski?= Date: Tue, 7 Apr 2026 16:22:53 +0200 Subject: [PATCH 125/156] fix: allow bots to access /s/ urls (#27579) #27548 Add Allow directive for custom share links social media preview --- web/static/robots.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/web/static/robots.txt b/web/static/robots.txt index 9be576a0f5..6ffa7087cd 100644 --- a/web/static/robots.txt +++ b/web/static/robots.txt @@ -1,6 +1,7 @@ # Allow social media access og Tags User-agent: * Allow: /share/ +Allow: /s/ Allow: /api/assets/ # https://www.robotstxt.org/robotstxt.html From a1a03efbcdbcde85f269283357fcdc98aa4da9ae Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Tue, 7 Apr 2026 17:05:52 +0200 Subject: [PATCH 126/156] chore(web): update translations (#27483) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/fi/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/gl/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/it/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ko/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/lt/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/nn/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hans/ Translation: Immich/immich Co-authored-by: Dawnsink Co-authored-by: DevServs Co-authored-by: Francesco Fiorentino Co-authored-by: Frank Paul Silye Co-authored-by: Gianni De Wachter Co-authored-by: HackingAll Co-authored-by: Haru Ijima Co-authored-by: Hurricane_32 Co-authored-by: Jarek Iwanus Co-authored-by: Junghyuk Kwon Co-authored-by: Krastyo Krastev Co-authored-by: Luis Peregrina Co-authored-by: MarcSerraPeralta Co-authored-by: Matjaž T. Co-authored-by: Petri Hämäläinen Co-authored-by: Simen Haugen Co-authored-by: Sylvain Pichon Co-authored-by: TA Co-authored-by: TV Box Co-authored-by: Veerasak Kritsanapraphan Co-authored-by: bittin1ddc447d824349b2 Co-authored-by: chamdim Co-authored-by: miksuk28 Co-authored-by: muziqaz Co-authored-by: nanai Co-authored-by: naxxerd Co-authored-by: ray ra Co-authored-by: 张建涛 Co-authored-by: 안세훈 --- i18n/ar.json | 9 +++++++ i18n/bg.json | 4 ++++ i18n/ca.json | 4 ++++ i18n/de.json | 12 ++++++---- i18n/el.json | 6 ++++- i18n/es.json | 8 +++++-- i18n/fi.json | 16 +++++++++++-- i18n/fr.json | 4 ++++ i18n/gl.json | 4 ++++ i18n/it.json | 7 ++++++ i18n/ko.json | 60 ++++++++++++++++++++++++++++------------------- i18n/lt.json | 4 ++++ i18n/nb_NO.json | 16 ++++++++----- i18n/nl.json | 4 ++++ i18n/nn.json | 18 ++++++++++++++ i18n/pl.json | 4 ++-- i18n/pt.json | 4 ++++ i18n/ru.json | 4 ++++ i18n/sl.json | 4 ++++ i18n/sv.json | 4 ++++ i18n/th.json | 3 +++ i18n/tr.json | 4 ++++ i18n/zh_Hans.json | 10 +++++--- 23 files changed, 169 insertions(+), 44 deletions(-) diff --git a/i18n/ar.json b/i18n/ar.json index 801d8a7663..c6899c61fc 100644 --- a/i18n/ar.json +++ b/i18n/ar.json @@ -849,9 +849,12 @@ "create_link_to_share": "إنشاء رابط للمشاركة", "create_link_to_share_description": "السماح لأي شخص لديه الرابط بمشاهدة الصورة (الصور) المحددة", "create_new": "انشاء جديد", + "create_new_face": "إنشاء وجه جديد", "create_new_person": "إنشاء شخص جديد", "create_new_person_hint": "تعيين المحتويات المحددة لشخص جديد", "create_new_user": "إنشاء مستخدم جديد", + "create_person": "إنشاء شخص", + "create_person_subtitle": "أضف اسماً للوجه المحدد لإنشاء الشخص الجديد والإشارة إليه", "create_shared_album_page_share_add_assets": "إضافة الأصول", "create_shared_album_page_share_select_photos": "حدد الصور", "create_shared_link": "انشاء رابط مشترك", @@ -892,6 +895,8 @@ "day": "يوم", "days": "ايام", "deduplicate_all": "إلغاء تكرار الكل", + "default_locale": "الإعدادات المحلية الافتراضية", + "default_locale_description": "تنسيق التواريخ والأرقام بناءً على الإعدادات المحلية للمتصفح", "delete": "حذف", "delete_action_confirmation_message": "هل انت متأكد من حذف هذا الملف؟ هذا سؤدي الى نقل الملف الى سلة مهملات الخادم وسيتم اشعارك ان كنت تريد حذفه على الجهاز", "delete_action_prompt": "تم حذف {count}", @@ -1384,9 +1389,11 @@ "library_page_sort_title": "عنوان الألبوم", "licenses": "رُخَص", "light": "المضيئ", + "light_theme": "التبديل إلى المظهر الفاتح", "like": "اعجاب", "like_deleted": "تم حذف الإعجاب", "link_motion_video": "رابط فيديو الحركة", + "link_to_docs": "لمزيد من المعلومات، يُرجى الرجوع إلى الوثائق.", "link_to_oauth": "الربط مع OAuth", "linked_oauth_account": "حساب مرتبط بـ OAuth", "list": "قائمة", @@ -2210,6 +2217,7 @@ "tag": "العلامة", "tag_assets": "أصول العلامة", "tag_created": "تم إنشاء العلامة: {tag}", + "tag_face": "علِّم الوجه", "tag_feature_description": "تصفح الصور ومقاطع الفيديو المجمعة حسب مواضيع العلامات المنطقية", "tag_not_found_question": "لا يمكن العثور على علامة؟ قم بإنشاء علامة جديدة.", "tag_people": "علِّم الأشخاص", @@ -2391,6 +2399,7 @@ "viewer_remove_from_stack": "حذف من الكومه أو المجموعة", "viewer_stack_use_as_main_asset": "استخدم كأصل رئيسي", "viewer_unstack": "فك الكومه", + "visibility": "إمكانية الرؤية", "visibility_changed": "الرؤية تغيرت لـ {count, plural, one {شخص واحد} other {# عدة أشخاص}}", "visual": "مرئي", "visual_builder": "اداة نشاء مرئية", diff --git a/i18n/bg.json b/i18n/bg.json index 60b91cee64..024ba3502e 100644 --- a/i18n/bg.json +++ b/i18n/bg.json @@ -849,9 +849,12 @@ "create_link_to_share": "Създаване на линк за споделяне", "create_link_to_share_description": "Позволете на всеки, който има линк, да види избраната(ите) снимка(и)", "create_new": "СЪЗДАЙ НОВ", + "create_new_face": "Създай ново лице", "create_new_person": "Създаване на ново лице", "create_new_person_hint": "Присвойте избраните файлове на нов човек", "create_new_user": "Създаване на нов потребител", + "create_person": "Създай човек", + "create_person_subtitle": "Добави име към избраното лице за да създадеш и да сложиш етикет на новия човек", "create_shared_album_page_share_add_assets": "ДОБАВИ ОБЕКТИ", "create_shared_album_page_share_select_photos": "Избери снимки", "create_shared_link": "Създай линк за споделяне", @@ -2214,6 +2217,7 @@ "tag": "Таг", "tag_assets": "Тагни елементи", "tag_created": "Създаден етикет: {tag}", + "tag_face": "Отбележи лице", "tag_feature_description": "Разглеждане на снимки и видеоклипове, групирани по теми с логически тагове", "tag_not_found_question": "Не можете да намерите етикет? Създайте нов етикет.", "tag_people": "Отбележи Хора", diff --git a/i18n/ca.json b/i18n/ca.json index 5b5c0592e4..88c6b8a323 100644 --- a/i18n/ca.json +++ b/i18n/ca.json @@ -849,9 +849,12 @@ "create_link_to_share": "Crear enllaç per compartir", "create_link_to_share_description": "Deixa que qualsevol persona amb l'enllaç vegi les fotos seleccionades", "create_new": "CREAR NOU", + "create_new_face": "Crea una nova cara", "create_new_person": "Crea una nova persona", "create_new_person_hint": "Assigna els elements seleccionats a una persona nova", "create_new_user": "Crea un usuari nou", + "create_person": "Crea una persona", + "create_person_subtitle": "Afegeix un nom a la cara seleccionada per crear i etiquetar la nova persona", "create_shared_album_page_share_add_assets": "AFEGEIX ELEMENTS", "create_shared_album_page_share_select_photos": "Escull fotografies", "create_shared_link": "Crea un enllaç compartit", @@ -2214,6 +2217,7 @@ "tag": "Etiqueta", "tag_assets": "Etiquetar actius", "tag_created": "Etiqueta creada: {tag}", + "tag_face": "Etiqueta una cara", "tag_feature_description": "Exploreu fotos i vídeos agrupats per temes d'etiquetes lògiques", "tag_not_found_question": "No trobeu una etiqueta? Crear una nova etiqueta.", "tag_people": "Etiquetar personas", diff --git a/i18n/de.json b/i18n/de.json index e611431730..9816055023 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -541,7 +541,7 @@ "app_settings": "App-Einstellungen", "app_stores": "App Stores", "app_update_available": "App Update verfügbar", - "appears_in": "Erscheint in", + "appears_in": "Enthalten in", "apply_count": "Anwenden ({count, number})", "archive": "Archiv", "archive_action_prompt": "{count} zum Archiv hinzugefügt", @@ -812,8 +812,8 @@ "confirm_keep_this_delete_others": "Alle anderen Dateien im Stapel bis auf diese werden gelöscht. Bist du sicher, dass du fortfahren möchten?", "confirm_new_pin_code": "Neuen PIN-Code bestätigen", "confirm_password": "Passwort bestätigen", - "confirm_tag_face": "Wollen Sie dieses Gesicht mit {name} markieren?", - "confirm_tag_face_unnamed": "Möchten Sie dieses Gesicht markieren?", + "confirm_tag_face": "Wollen Sie dieses Gesicht mit {name} taggen?", + "confirm_tag_face_unnamed": "Möchten Sie dieses Gesicht taggen?", "connected_device": "Verbundenes Gerät", "connected_to": "Verbunden mit", "contain": "Vollständig", @@ -849,9 +849,12 @@ "create_link_to_share": "Link zum Teilen erstellen", "create_link_to_share_description": "Lass jeden mit dem Link die ausgewählten Fotos sehen", "create_new": "NEUES ERSTELLEN", + "create_new_face": "Neues Gesicht erstellen", "create_new_person": "Neue Person anlegen", "create_new_person_hint": "Ausgewählte Dateien einer neuen Person zuweisen", "create_new_user": "Neuen Nutzer erstellen", + "create_person": "Person anlegen", + "create_person_subtitle": "Gib dem gewählten Gesicht einen Namen um die neue Person zu erstellen und zu taggen", "create_shared_album_page_share_add_assets": "INHALTE HINZUFÜGEN", "create_shared_album_page_share_select_photos": "Fotos auswählen", "create_shared_link": "Geteilten Link erstellen", @@ -1035,7 +1038,7 @@ "error_loading_partners": "Fehler beim Laden der Partner: {error}", "error_retrieving_asset_information": "Fehler beim Abruf der Dateiinformationen", "error_saving_image": "Fehler: {error}", - "error_tag_face_bounding_box": "Fehler beim Markieren des Gesichts - Begrenzungen können nicht abgerufen werden", + "error_tag_face_bounding_box": "Fehler beim Taggen des Gesichts - Begrenzungen können nicht abgerufen werden", "error_title": "Fehler - Etwas ist schief gelaufen", "error_while_navigating": "Fehler beim Navigieren zur Datei", "errors": { @@ -2214,6 +2217,7 @@ "tag": "Tag", "tag_assets": "Dateien taggen", "tag_created": "Tag erstellt: {tag}", + "tag_face": "Gesicht taggen", "tag_feature_description": "Durchsuchen von Fotos und Videos, gruppiert nach logischen Tag-Themen", "tag_not_found_question": "Kein Tag vorhanden? Erstelle einen neuen Tag.", "tag_people": "Personen taggen", diff --git a/i18n/el.json b/i18n/el.json index bb25e0e811..8cd20d04a4 100644 --- a/i18n/el.json +++ b/i18n/el.json @@ -849,9 +849,12 @@ "create_link_to_share": "Δημιουργία συνδέσμου για διαμοιρασμό", "create_link_to_share_description": "Επιτρέψτε σε οποιονδήποτε έχει τον σύνδεσμο να δει τη/τις επιλεγμένη/ες φωτογραφία/ες", "create_new": "ΔΗΜΙΟΥΡΓΙΑ ΝΕΟΥ", - "create_new_person": "Δημιουργία νέου προσώπου", + "create_new_face": "Δημιουργία νέου προσώπου", + "create_new_person": "Δημιουργία νέου ατόμου", "create_new_person_hint": "Αντιστοίχιση των επιλεγμένων αρχείων σε ένα νέο πρόσωπο", "create_new_user": "Δημιουργία νέου χρήστη", + "create_person": "Δημιουργία ατόμου", + "create_person_subtitle": "Προσθέστε ένα όνομα στο επιλεγμένο πρόσωπο για να δημιουργηθεί και να επισημανθεί το νέο άτομο", "create_shared_album_page_share_add_assets": "ΠΡΟΣΘΗΚΗ ΣΤΟΙΧΕΙΩΝ", "create_shared_album_page_share_select_photos": "Επιλέξτε Φωτογραφίες", "create_shared_link": "Δημιουργία κοινόχρηστου συνδέσμου", @@ -2214,6 +2217,7 @@ "tag": "Ετικέτα", "tag_assets": "Ετικετοποίηση στοιχείων", "tag_created": "Δημιουργήθηκε ετικέτα: {tag}", + "tag_face": "Επισήμανση προσώπου", "tag_feature_description": "Περιήγηση σε φωτογραφίες και βίντεο που είναι οργανωμένα σύμφωνα με λογικά θέματα ετικετών", "tag_not_found_question": "Δεν μπορείτε να βρείτε μια ετικέτα; Δημιουργήστε μια νέα ετικέτα.", "tag_people": "Επισήμανση ατόμων", diff --git a/i18n/es.json b/i18n/es.json index 63c7e72081..722c8fd98c 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -849,9 +849,12 @@ "create_link_to_share": "Crear enlace compartido", "create_link_to_share_description": "Permitir que cualquier persona con el enlace vea la(s) foto(s) seleccionada(s)", "create_new": "CREAR NUEVO", + "create_new_face": "Crear nueva cara", "create_new_person": "Crear nueva persona", "create_new_person_hint": "Asignar los recursos seleccionados a una nueva persona", "create_new_user": "Crear nuevo usuario", + "create_person": "Crear persona", + "create_person_subtitle": "Añade un nombre a la cara seleccionada para crear y etiquetar a la nueva persona", "create_shared_album_page_share_add_assets": "AÑADIR RECURSOS", "create_shared_album_page_share_select_photos": "Seleccionar fotos", "create_shared_link": "Crear un enlace compartido", @@ -1022,7 +1025,7 @@ "enable_biometric_auth_description": "Introduce tu código PIN para habilitar la autentificación biométrica", "enabled": "Habilitado", "end_date": "Fecha final", - "enqueued": "Agregado a la cola", + "enqueued": "Añadido a la cola", "enter_wifi_name": "Introduce el nombre Wi-Fi", "enter_your_pin_code": "Introduce tu código PIN", "enter_your_pin_code_subtitle": "Introduce tu código PIN para acceder a la carpeta protegida", @@ -1085,7 +1088,7 @@ "unable_to_add_partners": "No se pueden añadir miembros", "unable_to_add_remove_archive": "No se pudo {archived, select, true {eliminar el recurso del} other {añadir el recurso al}} archivo", "unable_to_add_remove_favorites": "No se pudo {favorite, select, true {añadir el recuso a} other {eliminar el recurso de}} los favoritos", - "unable_to_archive_unarchive": "No se pudo {archived, select, true {agregar el elemento al} other {quitar el elemento del}} archivo", + "unable_to_archive_unarchive": "No se pudo {archived, select, true {añadir el elemento al} other {quitar el elemento del}} archivo", "unable_to_change_album_user_role": "No se puede cambiar la función del usuario del álbum", "unable_to_change_date": "No se puede cambiar la fecha", "unable_to_change_description": "Imposible cambiar la descripción", @@ -2214,6 +2217,7 @@ "tag": "Etiqueta", "tag_assets": "Etiquetar recursos", "tag_created": "Etiqueta creada: {tag}", + "tag_face": "Etiquetar cara", "tag_feature_description": "Explore fotos y videos agrupados por temas de etiquetas lógicas", "tag_not_found_question": "¿No encuentra una etiqueta? Crea una nueva etiqueta.", "tag_people": "Etiquetar personas", diff --git a/i18n/fi.json b/i18n/fi.json index 2ea62d41f6..aaa2ee2bc1 100644 --- a/i18n/fi.json +++ b/i18n/fi.json @@ -849,9 +849,12 @@ "create_link_to_share": "Luo linkki jaettavaksi", "create_link_to_share_description": "Salli kaikkien linkin saaneiden nähdä valitut kuvat", "create_new": "LUO UUSI", + "create_new_face": "Luo uudet kasvot", "create_new_person": "Luo uusi henkilö", "create_new_person_hint": "Määritä valitut mediat uudelle henkilölle", "create_new_user": "Luo uusi käyttäjä", + "create_person": "Luo henkilö", + "create_person_subtitle": "Lisää nimi valituille kasvoille luodaksesi uudelle henkilölle tunnisteen", "create_shared_album_page_share_add_assets": "LISÄÄ KOHTEITA", "create_shared_album_page_share_select_photos": "Valitse kuvat", "create_shared_link": "Luo jakolinkki", @@ -866,6 +869,7 @@ "crop_aspect_ratio_fixed": "Kiinteä", "crop_aspect_ratio_free": "Vapaa", "crop_aspect_ratio_original": "Alkuperäinen", + "crop_aspect_ratio_square": "Neliö", "curated_object_page_title": "Asiat", "current_device": "Nykyinen laite", "current_pin_code": "Nykyinen PIN-koodi", @@ -880,7 +884,7 @@ "daily_title_text_date": "E, dd MMM", "daily_title_text_date_year": "E, dd MMM, yyyy", "dark": "Tumma", - "dark_theme": "Vaihda tumma teema", + "dark_theme": "Vaihda tummaan teemaan", "date": "Päivämäärä", "date_after": "Päivämäärän jälkeen", "date_and_time": "Päivämäärä ja aika", @@ -891,6 +895,8 @@ "day": "Päivä", "days": "Päivää", "deduplicate_all": "Poista kaikkien kaksoiskappaleet", + "default_locale": "Oletuskieli", + "default_locale_description": "Muotoile päivämäärät ja luvut selaimesi kieliasetusten mukaan", "delete": "Poista", "delete_action_confirmation_message": "Haluatko varmasti poistaa tämän aineiston? Tämä toiminto siirtää aineiston palvelimen roskakoriin ja kysyy, haluatko poistaa sen myös paikallisesti", "delete_action_prompt": "{count} poistettu", @@ -966,7 +972,7 @@ "downloading_media": "Median lataaminen", "drop_files_to_upload": "Pudota tiedostot mihin tahansa ladataksesi ne", "duplicates": "Kaksoiskappaleet", - "duplicates_description": "Selvitä jokaisen kohdalla mitkä (jos mitkään) ovat kaksoiskappaleita", + "duplicates_description": "Selvitä jokaisen kohdalla mitkä (jos mitkään) ovat kaksoiskappaleita.", "duration": "Kesto", "edit": "Muokkaa", "edit_album": "Muokkaa albumia", @@ -1003,6 +1009,8 @@ "editor_edits_applied_success": "Muutokset otettu käyttöön", "editor_flip_horizontal": "Käännä vaakatasossa", "editor_flip_vertical": "Käännä pystytasossa", + "editor_handle_corner": "{corner, select, top_left {Vasen yläkulma} top_right {Oikea yläkulma} bottom_left {Vasen alakulma} bottom_right {Oikea alakulma} other {A}} kulman kahva", + "editor_handle_edge": "{edge, select, top {Yläreuna} bottom {Alareuna} left {Vasen reuna} right {Oikea reuna} other {En}} reunan kahva", "editor_orientation": "Suunta", "editor_reset_all_changes": "Nollaa muutokset", "editor_rotate_left": "Kierrä 90° vastapäivään", @@ -1381,9 +1389,11 @@ "library_page_sort_title": "Albumin otsikko", "licenses": "Lisenssit", "light": "Vaalea", + "light_theme": "Vaihda vaaleaan teemaan", "like": "Tykkää", "like_deleted": "Tykkäys poistettu", "link_motion_video": "Linkitä liikevideo", + "link_to_docs": "Lisätietoja löytyy dokumentaatiosta.", "link_to_oauth": "Linkki OAuth", "linked_oauth_account": "Linkitetty OAuth-tili", "list": "Lista", @@ -2207,6 +2217,7 @@ "tag": "Tunniste", "tag_assets": "Lisää tunnisteita", "tag_created": "Luotu tunniste: {tag}", + "tag_face": "Merkitse kasvot", "tag_feature_description": "Selaa valokuvia ja videoita, jotka on ryhmitelty loogisten tunnisteotsikoiden mukaan", "tag_not_found_question": "Etkö löydä tunnistetta? Luo uusi tunniste.", "tag_people": "Merkitse henkilö tunnisteella", @@ -2388,6 +2399,7 @@ "viewer_remove_from_stack": "Poista pinosta", "viewer_stack_use_as_main_asset": "Käytä pääkohteena", "viewer_unstack": "Pura pino", + "visibility": "Näkyvyys", "visibility_changed": "{count, plural, one {# henkilön} other {# henkilöiden}} näkyvyys vaihdettu", "visual": "Visuaalinen", "visual_builder": "Visuaalinen koostaja", diff --git a/i18n/fr.json b/i18n/fr.json index 5a3ab9e77b..f15931b0d6 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -849,9 +849,12 @@ "create_link_to_share": "Créer un lien pour partager", "create_link_to_share_description": "Permettre à n'importe qui ayant le lien de voir la(es) photo(s) sélectionnée(s)", "create_new": "NOUVEAU", + "create_new_face": "Créer un nouveau visage", "create_new_person": "Créer une nouvelle personne", "create_new_person_hint": "Attribuer les médias sélectionnés à une nouvelle personne", "create_new_user": "Créer un nouvel utilisateur", + "create_person": "Créer une personne", + "create_person_subtitle": "Ajouter un nom au visage sélectionné pour créer et étiqueter la nouvelle personne", "create_shared_album_page_share_add_assets": "AJOUTER DES ÉLÉMENTS", "create_shared_album_page_share_select_photos": "Sélectionner les photos", "create_shared_link": "Créer un lien partagé", @@ -2214,6 +2217,7 @@ "tag": "Étiquette", "tag_assets": "Étiqueter les médias", "tag_created": "Étiquette créée : {tag}", + "tag_face": "Étiqueter le visage", "tag_feature_description": "Parcourir les photos et vidéos groupées par thèmes logiques", "tag_not_found_question": "Vous ne trouvez pas une étiquette ? Créer une nouvelle étiquette.", "tag_people": "Étiqueter les personnes", diff --git a/i18n/gl.json b/i18n/gl.json index f65201deec..201f718998 100644 --- a/i18n/gl.json +++ b/i18n/gl.json @@ -849,9 +849,12 @@ "create_link_to_share": "Crear ligazón para compartir", "create_link_to_share_description": "Permitir que calquera persoa coa ligazón vexa a(s) foto(s) seleccionada(s)", "create_new": "CREAR NOVO", + "create_new_face": "Crear nova cara", "create_new_person": "Crear nova persoa", "create_new_person_hint": "Asignar activos seleccionados a unha nova persoa", "create_new_user": "Crear novo usuario", + "create_person": "Crear persona", + "create_person_subtitle": "Engade un nome á cara seleccionada para crear e etiquetar á nova persona", "create_shared_album_page_share_add_assets": "ENGADIR ACTIVOS", "create_shared_album_page_share_select_photos": "Seleccionar Fotos", "create_shared_link": "Crear ligazón compartida", @@ -2214,6 +2217,7 @@ "tag": "Etiqueta", "tag_assets": "Etiquetar activos", "tag_created": "Etiqueta creada: {tag}", + "tag_face": "Etiquetar cara", "tag_feature_description": "Navegar por fotos e vídeos agrupados por temas de etiquetas lóxicas", "tag_not_found_question": "Non atopa unha etiqueta? Crear unha nova etiqueta.", "tag_people": "Etiquetar Persoas", diff --git a/i18n/it.json b/i18n/it.json index fda8d82731..d51e45b37b 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -849,9 +849,12 @@ "create_link_to_share": "Crea link da condividere", "create_link_to_share_description": "Permetti a chiunque con il link di vedere le foto selezionate", "create_new": "CREA NUOVO", + "create_new_face": "Crea nuova faccia", "create_new_person": "Crea nuova persona", "create_new_person_hint": "Assegna le risorse selezionate a una nuova persona", "create_new_user": "Crea nuovo utente", + "create_person": "Crea persona", + "create_person_subtitle": "Aggiungi un nome alla faccia selezionata per creare e taggare la nuova persona", "create_shared_album_page_share_add_assets": "AGGIUNGI RISORSE", "create_shared_album_page_share_select_photos": "Seleziona foto", "create_shared_link": "Crea link condiviso", @@ -892,6 +895,8 @@ "day": "Giorno", "days": "Giorni", "deduplicate_all": "Elimina tutti i doppioni", + "default_locale": "Predefinito Locale", + "default_locale_description": "Formatta le date e i numeri sulla base del tuo browser locale", "delete": "Elimina", "delete_action_confirmation_message": "Vuoi davvero eliminare questa risorsa? Questa azione sposterà la risorsa nel cestino del server e ti chiederà se desideri eliminarla dal dispositivo", "delete_action_prompt": "{count} elementi eliminati", @@ -1388,6 +1393,7 @@ "like": "Mi piace", "like_deleted": "Mi piace rimosso", "link_motion_video": "Collega video in movimento", + "link_to_docs": "Per maggiori informazioni, riferirsi al documentazione.", "link_to_oauth": "Collegamento a OAuth", "linked_oauth_account": "Account OAuth collegato", "list": "Lista", @@ -2211,6 +2217,7 @@ "tag": "Tag", "tag_assets": "Tagga risorse", "tag_created": "Tag creato: {tag}", + "tag_face": "Tagga la faccia", "tag_feature_description": "Navigazione foto e video raggruppati per argomenti tag logici", "tag_not_found_question": "Non riesci a trovare un tag? Creane uno nuovo.", "tag_people": "Tagga persone", diff --git a/i18n/ko.json b/i18n/ko.json index 5e167c7bf3..7114316134 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -798,7 +798,7 @@ "command_palette_to_close": "닫기", "command_palette_to_navigate": "들어가기", "command_palette_to_select": "선택하기", - "command_palette_to_show_all": "다 보여주기", + "command_palette_to_show_all": "모두 보기", "comment_deleted": "댓글이 삭제되었습니다.", "comment_options": "댓글 옵션", "comments_and_likes": "댓글 및 좋아요", @@ -849,9 +849,12 @@ "create_link_to_share": "공유 링크 생성", "create_link_to_share_description": "링크가 있는 경우 누구나 선택한 사진을 볼 수 있습니다.", "create_new": "새로 만들기", + "create_new_face": "새 얼굴 생성", "create_new_person": "인물 생성", "create_new_person_hint": "선택한 항목의 인물을 새 인물로 변경", "create_new_user": "새 사용자 생성", + "create_person": "인물 생성", + "create_person_subtitle": "선택한 얼굴에 이름을 추가해 신규 인물을 생성하고 태그 지정", "create_shared_album_page_share_add_assets": "항목 추가", "create_shared_album_page_share_select_photos": "사진 선택", "create_shared_link": "공유 링크 생성", @@ -866,6 +869,7 @@ "crop_aspect_ratio_fixed": "고정", "crop_aspect_ratio_free": "직접 조절", "crop_aspect_ratio_original": "원본", + "crop_aspect_ratio_square": "정사각형", "curated_object_page_title": "사물", "current_device": "현재 기기", "current_pin_code": "현재 PIN 코드", @@ -880,7 +884,7 @@ "daily_title_text_date": "M월 d일 EEEE", "daily_title_text_date_year": "yyyy년 M월 d일 EEEE", "dark": "다크", - "dark_theme": "다크 테마 토글", + "dark_theme": "다크 테마 전환", "date": "날짜", "date_after": "다음 날짜 이후", "date_and_time": "날짜 및 시간", @@ -891,6 +895,8 @@ "day": "일", "days": "일", "deduplicate_all": "모두 삭제", + "default_locale": "기본 로케일", + "default_locale_description": "브라우저 로케일 설정에 따라 날짜 및 숫자 형식을 지정합니다", "delete": "삭제", "delete_action_confirmation_message": "이 항목을 삭제하시겠습니까? 서버에서는 항목을 휴지통으로 이동시키며, 로컬에서도 삭제할 것인지 확인 메시지가 표시됩니다.", "delete_action_prompt": "{count}개 항목 삭제됨", @@ -1003,6 +1009,8 @@ "editor_edits_applied_success": "편집이 적용되었습니다.", "editor_flip_horizontal": "좌우반전", "editor_flip_vertical": "상하반전", + "editor_handle_corner": "{corner, select, top_left {좌상단} top_right {우상단} bottom_left {좌하단} bottom_right {우하단} other {A}} 코너 핸들", + "editor_handle_edge": "{edge, select, top {위} bottom {아래} left {왼쪽} right {오른쪽} other {An}} 모서리 핸들", "editor_orientation": "방향", "editor_reset_all_changes": "편집내용 초기화", "editor_rotate_left": "반시계 방향으로 90° 회전", @@ -1061,26 +1069,26 @@ "failed_to_load_assets": "항목 로드 실패", "failed_to_load_notifications": "알림 로드 실패", "failed_to_load_people": "인물 로드 실패", - "failed_to_remove_product_key": "제품 키 제거에 실패", + "failed_to_remove_product_key": "제품 키 제거에 실패했습니다.", "failed_to_reset_pin_code": "PIN 코드 초기화 실패", - "failed_to_stack_assets": "항목 스택에 실패", - "failed_to_unstack_assets": "항목 스택 풀기에 실패", + "failed_to_stack_assets": "항목 스택에 실패했습니다.", + "failed_to_unstack_assets": "항목 스택 풀기에 실패했습니다.", "failed_to_update_notification_status": "알림 상태 업데이트 실패", "incorrect_email_or_password": "잘못된 이메일 또는 비밀번호", "library_folder_already_exists": "가져올 경로가 이미 존재합니다.", - "page_not_found": "페이지를 찾을 수 없음 :/", + "page_not_found": "페이지를 찾을 수 없음", "paths_validation_failed": "{paths, plural, one {경로 #개} other {경로 #개}}가 유효성 검사에 실패했습니다.", "profile_picture_transparent_pixels": "프로필 사진에 투명 픽셀을 사용할 수 없습니다. 사진을 확대하거나 이동하세요.", "quota_higher_than_disk_size": "할당량은 디스크 크기보다 작아야 합니다.", "something_went_wrong": "문제가 발생했습니다.", - "unable_to_add_album_users": "앨범에 사용자를 추가할 수 없음", - "unable_to_add_assets_to_shared_link": "항목을 공유 링크에 추가할 수 없음", - "unable_to_add_comment": "댓글을 추가할 수 없음", - "unable_to_add_exclusion_pattern": "제외 규칙을 추가할 수 없음", - "unable_to_add_partners": "파트너를 추가할 수 없음", - "unable_to_add_remove_archive": "{archived, select, true {보관함에서 항목을 제거할} other {보관함으로 항목을 이동할}} 수 없음", - "unable_to_add_remove_favorites": "즐겨찾기에 항목을 {favorite, select, true {추가} other {제거}}할 수 없음", - "unable_to_archive_unarchive": "항목을 {archived, select, true {보관} other {보관 해제}}할 수 없음", + "unable_to_add_album_users": "앨범에 사용자를 추가할 수 없습니다.", + "unable_to_add_assets_to_shared_link": "항목을 공유 링크에 추가할 수 없습니다.", + "unable_to_add_comment": "댓글을 추가할 수 없습니다.", + "unable_to_add_exclusion_pattern": "제외 규칙을 추가할 수 없습니다.", + "unable_to_add_partners": "파트너를 추가할 수 없습니다.", + "unable_to_add_remove_archive": "{archived, select, true {보관함에서 항목을 제거할} other {보관함으로 항목을 이동할}} 수 없습니다.", + "unable_to_add_remove_favorites": "즐겨찾기에 항목을 {favorite, select, true {추가} other {제거}}할 수 없습니다", + "unable_to_archive_unarchive": "항목을 {archived, select, true {보관} other {보관 해제}}할 수 없습니다", "unable_to_change_album_user_role": "앨범 사용자의 역할을 변경할 수 없습니다.", "unable_to_change_date": "날짜를 변경할 수 없습니다.", "unable_to_change_description": "설명을 변경할 수 없습니다.", @@ -1126,10 +1134,10 @@ "unable_to_remove_library": "라이브러리를 제거할 수 없습니다.", "unable_to_remove_partner": "파트너를 제거할 수 없습니다.", "unable_to_remove_reaction": "반응을 제거할 수 없습니다.", - "unable_to_reset_password": "비밀번호를 초기화할 수 없음", + "unable_to_reset_password": "비밀번호를 초기화할 수 없습니다.", "unable_to_reset_pin_code": "PIN 코드를 초기화할 수 없음", "unable_to_resolve_duplicate": "비슷한 항목을 처리할 수 없음", - "unable_to_restore_assets": "항목을 복원할 수 없음", + "unable_to_restore_assets": "항목을 복원할 수 없습니다.", "unable_to_restore_trash": "휴지통을 복원할 수 없습니다.", "unable_to_restore_user": "사용자를 복원할 수 없습니다.", "unable_to_save_album": "앨범을 저장할 수 없습니다.", @@ -1142,7 +1150,7 @@ "unable_to_scan_library": "라이브러리를 스캔할 수 없습니다.", "unable_to_set_feature_photo": "대표 사진을 설정할 수 없습니다.", "unable_to_set_profile_picture": "프로필 사진을 설정할 수 없습니다.", - "unable_to_set_rating": "평점을 정할 수 없음", + "unable_to_set_rating": "별점을 지정할 수 없습니다.", "unable_to_submit_job": "작업을 수행할 수 없습니다.", "unable_to_trash_asset": "휴지통으로 이동할 수 없습니다.", "unable_to_unlink_account": "계정 연결을 해제할 수 없습니다.", @@ -1381,9 +1389,11 @@ "library_page_sort_title": "앨범명", "licenses": "라이선스", "light": "라이트", + "light_theme": "라이트 테마로 전환", "like": "좋아요", "like_deleted": "좋아요가 삭제되었습니다.", "link_motion_video": "모션 비디오 링크", + "link_to_docs": "자세한 내용은 문서를 참조하십시오.", "link_to_oauth": "OAuth에 연결", "linked_oauth_account": "OAuth 계정이 연결되었습니다.", "list": "목록", @@ -1645,6 +1655,7 @@ "only_favorites": "즐겨찾기만", "open": "열기", "open_calendar": "캘린더 열기", + "open_in_browser": "브라우저에서 열기", "open_in_map_view": "지도 보기에서 열기", "open_in_openstreetmap": "OpenStreetMap에서 열기", "open_the_search_filters": "검색 필터 열기", @@ -1801,11 +1812,11 @@ "purchase_settings_server_activated": "서버 제품 키는 관리자가 제어합니다.", "query_asset_id": "쿼리 항목 ID", "queue_status": "전체 {total}, {count} 대기 중", - "rate_asset": "항목 평점", + "rate_asset": "항목 별점", "rating": "별점", - "rating_clear": "평점 초기화", - "rating_count": "{count, plural, =0 {평점 없음} one {#점} other {#점}}", - "rating_description": "상세 정보 패널에 EXIF 등급 태그 표시", + "rating_clear": "별점 초기화", + "rating_count": "{count, plural, =0 {별점 없음} one {#점} other {#점}}", + "rating_description": "상세 정보 패널에 EXIF 별점 태그 표시", "reaction_options": "반응 옵션", "read_changelog": "변경 내역 보기", "readonly_mode_disabled": "읽기 전용 모드 비활성화", @@ -1942,7 +1953,7 @@ "search_filter_media_type_title": "미디어 종류 선택", "search_filter_ocr": "OCR 검색", "search_filter_people_title": "인물 선택", - "search_filter_star_rating": "평점", + "search_filter_star_rating": "별점", "search_filter_tags_title": "태그 선택", "search_for": "검색", "search_for_existing_person": "존재하는 인물 검색", @@ -1964,7 +1975,7 @@ "search_page_your_map": "나의 지도", "search_people": "인물 검색", "search_places": "장소 검색", - "search_rating": "등급으로 검색...", + "search_rating": "별점으로 검색...", "search_result_page_new_search_hint": "새 검색", "search_settings": "설정 검색", "search_state": "지역 검색...", @@ -2384,6 +2395,7 @@ "viewer_remove_from_stack": "스택에서 제거", "viewer_stack_use_as_main_asset": "대표 항목으로 설정", "viewer_unstack": "스택 풀기", + "visibility": "표시 설정", "visibility_changed": "인물 {count, plural, one {#명} other {#명}}의 표시 여부가 변경됨", "visual": "비주얼", "visual_builder": "비주얼 빌더", @@ -2414,7 +2426,7 @@ "yes": "네", "you_dont_have_any_shared_links": "공유 링크가 없습니다.", "your_wifi_name": "Wi-Fi 네트워크 이름", - "zero_to_clear_rating": "0을 눌러 항목 평점 초기화", + "zero_to_clear_rating": "0을 눌러 항목 별점 초기화", "zoom_image": "이미지 확대", "zoom_to_bounds": "화면에 맞춰 확대" } diff --git a/i18n/lt.json b/i18n/lt.json index 5c232f8a04..b686c37b83 100644 --- a/i18n/lt.json +++ b/i18n/lt.json @@ -849,9 +849,12 @@ "create_link_to_share": "Sukurti bendrinimo nuorodą", "create_link_to_share_description": "Leisti bet kam su nuoroda matyti pažymėtą(-as) nuotrauką(-as)", "create_new": "SUKURTI NAUJĄ", + "create_new_face": "Sukurti naują veidą", "create_new_person": "Sukurti naują žmogų", "create_new_person_hint": "Priskirti pasirinktus elementus naujam žmogui", "create_new_user": "Sukurti naują varotoją", + "create_person": "Sukurti asmenį", + "create_person_subtitle": "Pridėkite vardą prie pasirinkto veido, kad sukurtumėte ir pažymėtumėte naują asmenį", "create_shared_album_page_share_add_assets": "PRIDĖTI ELEMENTŲ", "create_shared_album_page_share_select_photos": "Pažymėti nuotraukas", "create_shared_link": "Sukurti dalijimosi nuorodą", @@ -2214,6 +2217,7 @@ "tag": "Žyma", "tag_assets": "Pažymėti", "tag_created": "Sukurta žyma: {tag}", + "tag_face": "Pažymėti veidą", "tag_feature_description": "Peržiūrėkite nuotraukas ir vaizdo įrašus sugrupuotus pagal sužymėtas temas", "tag_not_found_question": "Nerandate žymos? Sukurti naują žymą.", "tag_people": "Pažymėti Žmones", diff --git a/i18n/nb_NO.json b/i18n/nb_NO.json index 5e34ef2918..1602707dd9 100644 --- a/i18n/nb_NO.json +++ b/i18n/nb_NO.json @@ -5,7 +5,7 @@ "acknowledge": "Bekreft", "action": "Handling", "action_common_update": "Oppdater", - "action_description": "Ett sett med handlinger som skal utføres på de filtrerede objekter", + "action_description": "Ett sett handlinger som skal utføres på de filtrerte mediefilene", "actions": "Handlinger", "active": "Aktiv", "active_count": "Aktiv: {count}", @@ -18,7 +18,7 @@ "add_a_title": "Legg til tittel", "add_action": "Legg til hendelse", "add_action_description": "Trykk for å legge til en hendelse å utføre", - "add_assets": "Legg til objekter", + "add_assets": "Legg til mediefiler", "add_birthday": "Legg til bursdag", "add_endpoint": "Legg til endepunkt", "add_exclusion_pattern": "Legg til ekskluderingsmønster", @@ -34,7 +34,7 @@ "add_to_album": "Legg til album", "add_to_album_bottom_sheet_added": "Lagt til i {album}", "add_to_album_bottom_sheet_already_exists": "Allerede i {album}", - "add_to_album_bottom_sheet_some_local_assets": "Noen lokale elementer kunne ikke legges til i albumet", + "add_to_album_bottom_sheet_some_local_assets": "Noen lokale filer kunne ikke legges til i albumet", "add_to_album_toggle": "Avhuking for {album}", "add_to_albums": "Legg til i album", "add_to_albums_count": "Legg til i album ({count})", @@ -50,8 +50,8 @@ "add_exclusion_pattern_description": "Legg til ekskluderingsmønstre. Globbing med *, ** og ? støttes. For å ignorere alle filer i en hvilken som helst mappe som heter \"Raw\", bruk \"**/Raw/**\". For å ignorere alle filer som slutter på \".tif\", bruk \"**/*.tif\". For å ignorere en absolutt filplassering, bruk \"/filsti/til/ignorer/**\".", "admin_user": "Administrasjonsbruker", "asset_offline_description": "Dette eksterne bibliotekselementet finnes ikke lenger på disk og har blitt flyttet til papirkurven. Hvis filen ble flyttet innad i biblioteket, se etter det tilsvarende elementet i tidslinjen din. For å gjenopprette elementet, vennligst sørg for at filstien under er tilgjengelig for Immich og skann biblioteket.", - "authentication_settings": "Godkjenninger", - "authentication_settings_description": "Administrer passord, OAuth, og andre innstillinger for autentisering", + "authentication_settings": "Godkjenings Instillinger", + "authentication_settings_description": "Administrer passord, OAuth, og andre innstillinger for autentiserings Instilinger", "authentication_settings_disable_all": "Er du sikker på at du ønsker å deaktivere alle innloggingsmetoder? Innlogging vil bli fullstendig deaktivert.", "authentication_settings_reenable": "For å aktivere på nytt, bruk en Server Command.", "background_task_job": "Bakgrunnsjobber", @@ -81,7 +81,7 @@ "cron_expression_description": "Still inn skanneintervallet med cron-formatet. For mer informasjon henvises til f.eks. Crontab Guru", "cron_expression_presets": "Forhåndsinnstillinger for Cron-uttrykk", "disable_login": "Deaktiver innlogging", - "duplicate_detection_job_description": "Kjør maskinlæring på filer for å oppdage lignende bilder. Krever bruk av Smart Search", + "duplicate_detection_job_description": "Kjør maskinlæring på filer for å oppdage lignende bilder. Krever bruk av Smart Søk", "exclusion_pattern_description": "Ekskluderingsmønstre lar deg ignorere filer og mapper når du skanner biblioteket ditt. Dette er nyttig hvis du har mapper som inneholder filer du ikke vil importere, for eksempel RAW-filer.", "export_config_as_json_description": "Last ned nåværende systemkonfigurasjon som en JSON fil", "external_libraries_page_description": "Administrering for eksterne bibliotek", @@ -849,9 +849,12 @@ "create_link_to_share": "Opprett delelink", "create_link_to_share_description": "La alle med lenken se de(t) valgte bildet/bildene", "create_new": "LAG NY", + "create_new_face": "Opprett nytt ansikt", "create_new_person": "Opprett ny person", "create_new_person_hint": "Tildel valgte eiendeler til en ny person", "create_new_user": "Opprett ny bruker", + "create_person": "Opprett person", + "create_person_subtitle": "Gi det valgte ansiktet et navn for å opprette og tagge den nye personen", "create_shared_album_page_share_add_assets": "LEGG TIL OBJEKTER", "create_shared_album_page_share_select_photos": "Velg bilder", "create_shared_link": "Opprett delt lenke", @@ -2214,6 +2217,7 @@ "tag": "Tagg", "tag_assets": "Merk ressurser", "tag_created": "Lag merke: {tag}", + "tag_face": "Tagg ansikt", "tag_feature_description": "Bla gjennom bilder og videoer gruppert etter logiske merke-emner", "tag_not_found_question": "Finner du ikke en merke? Opprett en nytt merke.", "tag_people": "Tag personer", diff --git a/i18n/nl.json b/i18n/nl.json index 57c898d728..951638d470 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -849,9 +849,12 @@ "create_link_to_share": "Gedeelde link maken", "create_link_to_share_description": "Laat iedereen met de link de geselecteerde foto(s) zien", "create_new": "MAAK NIEUW", + "create_new_face": "Nieuw gezicht aanmaken", "create_new_person": "Nieuwe persoon aanmaken", "create_new_person_hint": "Geselecteerde items toewijzen aan een nieuwe persoon", "create_new_user": "Nieuwe gebruiker aanmaken", + "create_person": "Persoon aanmaken", + "create_person_subtitle": "Voeg een naam toe aan het geselecteerde gezicht om de nieuwe persoon aan te maken en te taggen", "create_shared_album_page_share_add_assets": "ITEMS TOEVOEGEN", "create_shared_album_page_share_select_photos": "Selecteer foto's", "create_shared_link": "Gedeelde link maken", @@ -2214,6 +2217,7 @@ "tag": "Tag", "tag_assets": "Items taggen", "tag_created": "Tag aangemaakt: {tag}", + "tag_face": "Gezicht labelen", "tag_feature_description": "Bladeren door foto's en video's gegroepeerd op tags", "tag_not_found_question": "Kun je een tag niet vinden? Maak een nieuwe tag.", "tag_people": "Mensen taggen", diff --git a/i18n/nn.json b/i18n/nn.json index cbf81e4807..7a0471c574 100644 --- a/i18n/nn.json +++ b/i18n/nn.json @@ -37,8 +37,10 @@ "add_to_album_bottom_sheet_some_local_assets": "Somme lokale eigedelar kunne ikkje leggjast til i album", "add_to_albums": "Legg til i album", "add_to_albums_count": "Legg til i album ({count})", + "add_to_bottom_bar": "Legg til i", "add_to_shared_album": "Legg til i delt album", "add_url": "Legg til URL", + "add_workflow_step": "Legg til steg i arbeidsflyt", "added_to_archive": "Lagt til i arkiv", "added_to_favorites": "Lagt til i favorittar", "added_to_favorites_count": "La til {count, number} i favorittar", @@ -71,6 +73,7 @@ "confirm_reprocess_all_faces": "Er du sikker på at du vil behandle alle ansikt på nytt? Det vil òg fjerne namngjevne personar.", "confirm_user_password_reset": "Er du sikker at du vil tilbakestille passordet til {user}?", "confirm_user_pin_code_reset": "Er du sikker på at du vil tilbakestille {user} sin PIN-kode?", + "copy_config_to_clipboard_description": "Kopier systemkonfigurasjonen som eit JSON-objekt til utklippstavla", "create_job": "Lag jobb", "cron_expression": "Cron uttrykk", "cron_expression_description": "Set inn skanningsintervall med cron-formatet. For meir informasjon sjå t.d. Crontab Guru", @@ -78,6 +81,7 @@ "disable_login": "Deaktiver innlogging", "duplicate_detection_job_description": "Kjør maskinlæring på filer for å oppdage liknande bilete. Krev bruk av Smart Search", "exclusion_pattern_description": "Utelatingsmønster let deg utelate filer og mapper når du skannar biblioteket ditt. Det er nyttig om du har mapper som inneheld filer du ikkje ynskjer å importere, til dømes RAW-filer.", + "export_config_as_json_description": "Last ned nåverande systemkonfigurasjon som ei JSON-fil", "face_detection": "Ansiktssøk", "face_detection_description": "Finn ansikt i bilete ved hjelp av maskinlæring. For videoar vert berre miniatyrbilete bruka. \"Alle\" søkjer (opp att) gjennom alle bilete. \"Tilbakestill\" fjernar all gjeldande ansiktsdata. \"Manglande\" legg filer som ikkje vert behandla til i køa for ansiktssøk. Oppdaga ansikt vert lagt i køa for ansiktsattkjenning, og kopla til eksisterande eller nye personar.", "facial_recognition_job_description": "Koplar attkjende ansikt til personar. Det skjer fyrst når anskiktssøkjet er ferdig. \"Tilbakestill\" fjernar alle koplingar til personar, og tilbakestiller ansiktsgrupper. \"Manglande\" legg ansikt som ikkje er oppkopla til i køa.", @@ -105,6 +109,7 @@ "image_thumbnail_description": "Lite miniatyrbilete med fjerna metadata, brukt når ein ser på grupper av bilete som hovudtidslinja", "image_thumbnail_quality_description": "Kvalitet på miniatyrbilete frå 1-100. Høgare er betre, men gjev større filstorleik, og kan senkje appresposen.", "image_thumbnail_title": "Innstillingar for miniatyrbilete", + "import_config_from_json_description": "Importer systemkonfigurasjon ved å laste opp ei JSON konfigurasjonsfil", "job_concurrency": "{job} samstundes utføring", "job_created": "Jobb laga", "job_not_concurrency_safe": "Kan ikke trygt utføre jobben samstundes.", @@ -112,22 +117,30 @@ "job_settings_description": "Handsam samstundes utføring av jobber", "jobs_delayed": "{jobCount, plural, other {# forsinka}}", "jobs_failed": "{jobCount, plural, other {# mislykkast}}", + "jobs_over_time": "Jobbar over tid", "library_created": "Opprett bibliotek: {library}", "library_deleted": "Bibliotek sletta", + "library_details": "Bibliotekdetaljar", + "library_folder_description": "Vel ei mappe å importere. Denne mappa, inkludert undermappar, vil bli skanna for biletar og videoar.", + "library_remove_exclusion_pattern_prompt": "Er du sikker på at du vil fjerne dette unntaksmønsteret?", "library_scanning": "Regelbunden skanning", "library_scanning_description": "Sett opp regelbunden skanning av biblioteket", "library_scanning_enable_description": "Aktiver regelbunden skanning av biblioteket", "library_settings": "Eksternt Bibliotek", "library_settings_description": "Handsam eksterne biblioteksinnstillingar", "library_tasks_description": "Utfør bibliotekstoppgåver", + "library_updated": "Oppdatert bibliotek", "library_watching_enable_description": "Sjekk eksterne bibliotek for forandringar", "library_watching_settings": "Biblioteksovervåking (EKSPERIMENTELL)", "library_watching_settings_description": "Sjekk automatisk for forandringar", "logging_enable_description": "Aktiver loggføring", "logging_level_description": "Når aktivert, kva loggnivå å bruke.", "logging_settings": "Logging", + "machine_learning_availability_checks": "Tilgjengelegheitssjekkar", "machine_learning_availability_checks_description": "Automatiser oppdaging og prioritet av tilgjengelege maskinlærings-serverar", + "machine_learning_availability_checks_enabled": "Slå på tilgjengelegheitssjekkar", "machine_learning_availability_checks_interval": "Sjekk intervall", + "machine_learning_availability_checks_timeout": "Tidsavbrot på forespørsel", "machine_learning_availability_checks_timeout_description": "Utløpstid i millisekund for tilgjengelegheitssjekk", "machine_learning_clip_model": "CLIP modell", "machine_learning_clip_model_description": "Namnet på ein CLIP modell finst her. Merk at du må køyre 'Smart Søk'-jobben på nytt for alle bilete etter du har forandra modell.", @@ -151,6 +164,11 @@ "machine_learning_min_detection_score_description": "Minimum tillitspoeng for at eit ansikt skal bli oppdaga, på ein skala frå 0 til 1. Lågare verdiar vil oppdage fleire ansikt, men kan føre til feilaktige treff.", "machine_learning_min_recognized_faces": "Minimum gjenkjende ansikt", "machine_learning_min_recognized_faces_description": "Minste tal på gjenkjende fjes for å opprette ein person. Aukar ein dette, vert ansiktsgjenkjenninga meir presis, på bekostning av auka sjanse for at ansikt ikkje vert tileigna ein person.", + "machine_learning_ocr": "OCR", + "machine_learning_ocr_description": "Bruk maskinlæring for å gjenkjenne tekst i bilete", + "machine_learning_ocr_enabled": "Slå på OCR", + "machine_learning_ocr_max_resolution": "Maksimal oppløysing", + "machine_learning_ocr_model": "OCR-modell", "machine_learning_settings": "Innstillingar for maskinlæring", "machine_learning_settings_description": "Administrer maskinlæringsfunksjonar og innstillingar", "machine_learning_smart_search": "Smart Søk", diff --git a/i18n/pl.json b/i18n/pl.json index 6cd4f39886..0f45c82e4a 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -2224,12 +2224,12 @@ "tag_updated": "Uaktualniono etykietę: {tag}", "tagged_assets": "Przypisano etykietę {count, plural, one {# zasobowi} other {# zasobom}}", "tags": "Etykiety", - "tap_to_run_job": "Uruchom zadanie", + "tap_to_run_job": "Naciśnij, żeby uruchomić zadanie", "template": "Szablon", "text_recognition": "Rozpoznawanie tekstu", "theme": "Motyw", "theme_selection": "Wybór motywu", - "theme_selection_description": "Automatycznie zmień motyw na jasny lub ciemny zależnie od ustawień przeglądarki", + "theme_selection_description": "Automatycznie zmień motyw na jasny lub ciemny zależnie od ustawień systemu", "theme_setting_asset_list_storage_indicator_title": "Pokaż wskaźnik przechowywania na kafelkach zasobów", "theme_setting_asset_list_tiles_per_row_title": "Liczba zasobów w wierszu ({count})", "theme_setting_colorful_interface_subtitle": "Zastosuj kolor podstawowy do powierzchni tła.", diff --git a/i18n/pt.json b/i18n/pt.json index 2cafc1fdc6..7511ed58a5 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -849,9 +849,12 @@ "create_link_to_share": "Criar link para partilhar", "create_link_to_share_description": "Permitir a visualização desta(s) imagem(s) a qualquer pessoa com o link", "create_new": "CRIAR NOVO", + "create_new_face": "Criar novo rosto", "create_new_person": "Criar nova pessoa", "create_new_person_hint": "Associe os ficheiros a uma nova pessoa", "create_new_user": "Criar novo utilizador", + "create_person": "Criar pessoa", + "create_person_subtitle": "Adicione um nome ao rosto selecionado para criar e etiquetar a nova pessoa", "create_shared_album_page_share_add_assets": "ADICIONAR FICHEIROS", "create_shared_album_page_share_select_photos": "Selecionar Fotos", "create_shared_link": "Criar link partilhado", @@ -2214,6 +2217,7 @@ "tag": "Etiqueta", "tag_assets": "Etiquetar ficheiros", "tag_created": "Criada a etiqueta {tag}", + "tag_face": "Etiquetar rosto", "tag_feature_description": "A mostrar fotos e videos agrupados por tópicos lógicos de etiquetas", "tag_not_found_question": "Não consegue encontrar a etiqueta? Crie uma nova etiqueta.", "tag_people": "Etiquetar Pessoas", diff --git a/i18n/ru.json b/i18n/ru.json index 5aba7df109..799861ebc2 100644 --- a/i18n/ru.json +++ b/i18n/ru.json @@ -849,9 +849,12 @@ "create_link_to_share": "Создать ссылку общего доступа", "create_link_to_share_description": "Разрешить всем, у кого есть ссылка, просматривать выбранные фотографии", "create_new": "СОЗДАТЬ НОВЫЙ", + "create_new_face": "Создать новое лицо", "create_new_person": "Добавить нового человека", "create_new_person_hint": "Назначить выбранные объекты на нового человека", "create_new_user": "Создать нового пользователя", + "create_person": "Создать человека", + "create_person_subtitle": "Укажите имя для создания нового человека", "create_shared_album_page_share_add_assets": "ДОБАВИТЬ ОБЪЕКТЫ", "create_shared_album_page_share_select_photos": "Выбрать фотографии", "create_shared_link": "Создать общую ссылку", @@ -2214,6 +2217,7 @@ "tag": "Тег", "tag_assets": "Добавить теги", "tag_created": "Тег {tag} создан", + "tag_face": "Отметить человека", "tag_feature_description": "Просмотр фотографий и видео, сгруппированных по тегам", "tag_not_found_question": "Не удается найти тег? Создайте новый тег.", "tag_people": "Отметить человека", diff --git a/i18n/sl.json b/i18n/sl.json index 38c4aa3dcc..fa6e04201e 100644 --- a/i18n/sl.json +++ b/i18n/sl.json @@ -849,9 +849,12 @@ "create_link_to_share": "Ustvari povezavo za skupno rabo", "create_link_to_share_description": "Omogoči vsem s povezavo ogled izbranih fotografij", "create_new": "USTVARI NOVEGA", + "create_new_face": "Ustvari nov obraz", "create_new_person": "Ustvari novo osebo", "create_new_person_hint": "Dodeli izbrana sredstva novi osebi", "create_new_user": "Ustvari novega uporabnika", + "create_person": "Ustvari osebo", + "create_person_subtitle": "Dodajte ime izbranemu obrazu, da ustvarite in označite novo osebo", "create_shared_album_page_share_add_assets": "DODAJ SREDSTVA", "create_shared_album_page_share_select_photos": "Izberi fotografije", "create_shared_link": "Ustvari deljeno povezavo", @@ -2214,6 +2217,7 @@ "tag": "Oznaka", "tag_assets": "Označi sredstva", "tag_created": "Ustvarjena oznaka: {tag}", + "tag_face": "Označi obraz", "tag_feature_description": "Brskanje po fotografijah in videoposnetkih, razvrščenih po temah logičnih oznak", "tag_not_found_question": "Ne najdete oznake? Ustvarite novo oznako.", "tag_people": "Označi osebe", diff --git a/i18n/sv.json b/i18n/sv.json index e76f23c9a4..a9c63cc836 100644 --- a/i18n/sv.json +++ b/i18n/sv.json @@ -849,9 +849,12 @@ "create_link_to_share": "Skapa länk att dela", "create_link_to_share_description": "Låt alla med länken se de valda fotona", "create_new": "SKAPA NY", + "create_new_face": "Skapa nytt ansikte", "create_new_person": "Skapa ny person", "create_new_person_hint": "Tilldela valda objekt till en ny person", "create_new_user": "Skapa en ny användare", + "create_person": "Skapa person", + "create_person_subtitle": "Lägg till ett namn till det valda ansiktet för att skapa och tagga den nya personen", "create_shared_album_page_share_add_assets": "LÄGG TILL OBJEKT", "create_shared_album_page_share_select_photos": "Välj bilder", "create_shared_link": "Skapa delad länk", @@ -2214,6 +2217,7 @@ "tag": "Tagg", "tag_assets": "Tagga objekt", "tag_created": "Skapade tagg: {tag}", + "tag_face": "Tagga ansikte", "tag_feature_description": "Bläddra bland foton och videor grupperade efter logiska taggar", "tag_not_found_question": "Kan du inte hitta en tagg? Skapa en ny tagg.", "tag_people": "Tagga Personer", diff --git a/i18n/th.json b/i18n/th.json index c9766e0fce..d8d34d024a 100644 --- a/i18n/th.json +++ b/i18n/th.json @@ -2123,9 +2123,12 @@ "sync_upload_album_setting_subtitle": "สร้างและอัปโหลดรูปภาพและวิดีโอของคุณไปยังอัลบั้มที่เลือกบน Immich", "tag": "แท็ก", "tag_created": "สร้างแท็ก: {tag}", + "tag_face": "แท็กใบหน้า", + "tag_feature_description": "ดูรูปถ่ายและวีดีโอที่สร้างกลุ่มตามหัวข้อแท็ก", "tag_not_found_question": "ไม่สามารถหาแท็กได้ใช่หรือไม่?สร้างแท็กใหม่", "tag_people": "แท็กผู้คน", "tag_updated": "แท็กที่ถูกอัพเดต: {tag}", + "tagged_assets": "ที่ถูกแท็ก", "tags": "แท็ก", "tap_to_run_job": "แตะเพื่อรันงาน", "template": "เท็มเพลต", diff --git a/i18n/tr.json b/i18n/tr.json index 391b0fca34..e728c73a22 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -849,9 +849,12 @@ "create_link_to_share": "Paylaşmak için link oluştur", "create_link_to_share_description": "Bağlantıya sahip olan herkesin seçilen fotoğrafları görmesine izin ver", "create_new": "YENİ OLUŞTUR", + "create_new_face": "Yeni yüz oluştur", "create_new_person": "Yeni kişi oluştur", "create_new_person_hint": "Seçili öğeleri yeni bir kişiye atayın", "create_new_user": "Yeni kullanıcı oluştur", + "create_person": "Kişi oluştur", + "create_person_subtitle": "Seçilen yüze bir isim ekleyerek yeni kişiyi oluşturun ve etiketleyin", "create_shared_album_page_share_add_assets": "ÖĞELER EKLE", "create_shared_album_page_share_select_photos": "Fotoğrafları Seç", "create_shared_link": "Paylaşılan bağlantı oluştur", @@ -2214,6 +2217,7 @@ "tag": "Etiket", "tag_assets": "Öğeleri etiketle", "tag_created": "Etiket oluşturuldu: {tag}", + "tag_face": "Yüzü etiketle", "tag_feature_description": "Etiket temalarına göre gruplandırılmış fotoğraf ve videoları keşfedin", "tag_not_found_question": "Etiket bulunamadı mı? Yeni bir etiket oluşturun.", "tag_people": "İnsanları etiketle", diff --git a/i18n/zh_Hans.json b/i18n/zh_Hans.json index 2b1374f3e6..a59ec9cb9f 100644 --- a/i18n/zh_Hans.json +++ b/i18n/zh_Hans.json @@ -40,7 +40,7 @@ "add_to_albums_count": "添加到相册 ({count})", "add_to_bottom_bar": "添加到", "add_to_shared_album": "添加到共享相册", - "add_upload_to_stack": "添加上传至堆栈", + "add_upload_to_stack": "添加上传至堆叠", "add_url": "添加 URL", "add_workflow_step": "添加工作流步骤", "added_to_archive": "添加至存档", @@ -622,7 +622,7 @@ "backup": "备份", "backup_album_selection_page_albums_device": "设备上的相簿({count})", "backup_album_selection_page_albums_tap": "单击包含,双击排除", - "backup_album_selection_page_assets_scatter": "选择包含或排除特定的相簿。(因为文件可能分散在多个相簿中)", + "backup_album_selection_page_assets_scatter": "资源可以分散在多个相册中。因此,在备份过程中,可以包含或排除某些相册。", "backup_album_selection_page_select_albums": "选择相簿", "backup_album_selection_page_selection_info": "选择信息", "backup_album_selection_page_total_assets": "选中的照片或视频总数", @@ -809,7 +809,7 @@ "confirm_admin_password": "确认管理员密码", "confirm_delete_face": "确定要从此文件中删除 {name} 的面部信息吗?", "confirm_delete_shared_link": "确定要删除此共享链接吗?", - "confirm_keep_this_delete_others": "堆栈中除此项目外的所有其他项目都将被删除。确定要继续吗?", + "confirm_keep_this_delete_others": "堆叠中除此项目外的所有其他项目都将被删除。确定要继续吗?", "confirm_new_pin_code": "确认新 PIN 码", "confirm_password": "确认密码", "confirm_tag_face": "是否将此人脸标记为 {name}?", @@ -849,9 +849,12 @@ "create_link_to_share": "创建共享链接", "create_link_to_share_description": "允许任何拥有链接的人查看所选照片", "create_new": "新建", + "create_new_face": "创建新人脸", "create_new_person": "创建新人物", "create_new_person_hint": "将所选照片/视频分配给新人物", "create_new_user": "新建用户", + "create_person": "创建人物", + "create_person_subtitle": "为所选人脸添加姓名,以创建并标记新人物", "create_shared_album_page_share_add_assets": "添加照片/视频", "create_shared_album_page_share_select_photos": "选择照片", "create_shared_link": "创建共享链接", @@ -2214,6 +2217,7 @@ "tag": "标签", "tag_assets": "标记项目", "tag_created": "已创建标签:{tag}", + "tag_face": "标记人脸", "tag_feature_description": "按逻辑标签分组并浏览照片和视频", "tag_not_found_question": "找不到标签吗?创建新标签。", "tag_people": "命名人物", From afec61addcbb14b54cb5dcc9dd7c8a101a6b72f3 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 15:08:18 +0000 Subject: [PATCH 127/156] chore: version v2.7.0 --- cli/package.json | 2 +- docs/static/archived-versions.json | 4 ++++ e2e/package.json | 2 +- i18n/package.json | 2 +- machine-learning/pyproject.toml | 2 +- machine-learning/uv.lock | 2 +- mobile/android/fastlane/Fastfile | 4 ++-- mobile/ios/Runner/Info.plist | 2 +- mobile/openapi/README.md | 2 +- mobile/pubspec.yaml | 2 +- open-api/immich-openapi-specs.json | 2 +- open-api/typescript-sdk/package.json | 2 +- open-api/typescript-sdk/src/fetch-client.ts | 2 +- package.json | 2 +- server/package.json | 2 +- web/package.json | 2 +- 16 files changed, 20 insertions(+), 16 deletions(-) diff --git a/cli/package.json b/cli/package.json index 4b7da12ebc..724ee82be1 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@immich/cli", - "version": "2.6.3", + "version": "2.7.0", "description": "Command Line Interface (CLI) for Immich", "type": "module", "exports": "./dist/index.js", diff --git a/docs/static/archived-versions.json b/docs/static/archived-versions.json index afaa584882..fb6c473c82 100644 --- a/docs/static/archived-versions.json +++ b/docs/static/archived-versions.json @@ -1,4 +1,8 @@ [ + { + "label": "v2.7.0", + "url": "https://docs.v2.7.0.archive.immich.app" + }, { "label": "v2.6.3", "url": "https://docs.v2.6.3.archive.immich.app" diff --git a/e2e/package.json b/e2e/package.json index 4c33ebe04e..e26fc9fee0 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "immich-e2e", - "version": "2.6.3", + "version": "2.7.0", "description": "", "main": "index.js", "type": "module", diff --git a/i18n/package.json b/i18n/package.json index a66505923d..56f8877087 100644 --- a/i18n/package.json +++ b/i18n/package.json @@ -1,6 +1,6 @@ { "name": "immich-i18n", - "version": "2.6.3", + "version": "2.7.0", "private": true, "scripts": { "format": "prettier --cache --check .", diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index fd6b61d6c2..1ab7ee9668 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "immich-ml" -version = "2.6.3" +version = "2.7.0" description = "" authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }] requires-python = ">=3.11,<4.0" diff --git a/machine-learning/uv.lock b/machine-learning/uv.lock index e07f942312..f916777a1b 100644 --- a/machine-learning/uv.lock +++ b/machine-learning/uv.lock @@ -898,7 +898,7 @@ wheels = [ [[package]] name = "immich-ml" -version = "2.6.3" +version = "2.7.0" source = { editable = "." } dependencies = [ { name = "aiocache" }, diff --git a/mobile/android/fastlane/Fastfile b/mobile/android/fastlane/Fastfile index 279b985cfe..152dbee96d 100644 --- a/mobile/android/fastlane/Fastfile +++ b/mobile/android/fastlane/Fastfile @@ -35,8 +35,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 3041, - "android.injected.version.name" => "2.6.3", + "android.injected.version.code" => 3042, + "android.injected.version.name" => "2.7.0", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') diff --git a/mobile/ios/Runner/Info.plist b/mobile/ios/Runner/Info.plist index 1bf52807f9..c77aedee8a 100644 --- a/mobile/ios/Runner/Info.plist +++ b/mobile/ios/Runner/Info.plist @@ -80,7 +80,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.6.3 + 2.7.0 CFBundleSignature ???? CFBundleURLTypes diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index e79a60f98b..f192470b10 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -3,7 +3,7 @@ Immich API This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 2.6.3 +- API version: 2.7.0 - Generator version: 7.8.0 - Build package: org.openapitools.codegen.languages.DartClientCodegen diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index c5839fb9be..44714e6522 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -2,7 +2,7 @@ name: immich_mobile description: Immich - selfhosted backup media file on mobile phone publish_to: 'none' -version: 2.6.3+3041 +version: 2.7.0+3042 environment: sdk: '>=3.8.0 <4.0.0' diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index d975189609..0533e13fa3 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -15225,7 +15225,7 @@ "info": { "title": "Immich", "description": "Immich API", - "version": "2.6.3", + "version": "2.7.0", "contact": {} }, "tags": [ diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index d502ac5eb4..249d353e45 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@immich/sdk", - "version": "2.6.3", + "version": "2.7.0", "description": "Auto-generated TypeScript SDK for the Immich API", "type": "module", "main": "./build/index.js", diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index 1541ec828e..431e724ea3 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -1,6 +1,6 @@ /** * Immich - * 2.6.3 + * 2.7.0 * DO NOT MODIFY - This file has been generated using oazapfts. * See https://www.npmjs.com/package/oazapfts */ diff --git a/package.json b/package.json index e33d46df96..3f0913f5e8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "immich-monorepo", - "version": "2.6.3", + "version": "2.7.0", "description": "Monorepo for Immich", "private": true, "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be", diff --git a/server/package.json b/server/package.json index 6cc1976c21..b77ff39e71 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "immich", - "version": "2.6.3", + "version": "2.7.0", "description": "", "author": "", "private": true, diff --git a/web/package.json b/web/package.json index fb30ad8db3..9e35f5361a 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "immich-web", - "version": "2.6.3", + "version": "2.7.0", "license": "GNU Affero General Public License version 3", "type": "module", "scripts": { From 921c8a8de3af5561c475e402ffde7c1000aed90d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 17:15:55 +0200 Subject: [PATCH 128/156] chore(deps): update dependency typescript to v6 (#27577) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Dietzler --- cli/package.json | 4 +- cli/tsconfig.json | 7 +- docs/package.json | 4 +- docs/tsconfig.json | 6 +- e2e/package.json | 2 +- e2e/src/ui/mock-network/base-network.ts | 2 +- e2e/tsconfig.json | 4 +- open-api/typescript-sdk/package.json | 2 +- open-api/typescript-sdk/tsconfig.json | 1 + plugins/package-lock.json | 8 +- plugins/package.json | 2 +- plugins/src/index.ts | 4 +- plugins/tsconfig.json | 10 +- pnpm-lock.yaml | 549 ++++++++++++------ server/package.json | 2 +- server/tsconfig.build.json | 3 + server/tsconfig.json | 3 +- web/eslint.config.js | 1 + web/package.json | 2 +- .../managers/edit/transform-manager.svelte.ts | 2 +- web/tsconfig.json | 2 + 21 files changed, 410 insertions(+), 210 deletions(-) diff --git a/cli/package.json b/cli/package.json index 724ee82be1..efbdcec97c 100644 --- a/cli/package.json +++ b/cli/package.json @@ -33,8 +33,8 @@ "mock-fs": "^5.2.0", "prettier": "^3.7.4", "prettier-plugin-organize-imports": "^4.0.0", - "typescript": "^5.3.3", - "typescript-eslint": "^8.28.0", + "typescript": "^6.0.0", + "typescript-eslint": "^8.58.0", "vite": "^8.0.0", "vitest": "^4.0.0", "vitest-fetch-mock": "^0.4.0", diff --git a/cli/tsconfig.json b/cli/tsconfig.json index d3a02a8257..780ef8ba5c 100644 --- a/cli/tsconfig.json +++ b/cli/tsconfig.json @@ -15,8 +15,11 @@ "incremental": true, "skipLibCheck": true, "esModuleInterop": true, - "baseUrl": "./", + "rootDir": "./src", + "paths": { + "src/*": ["./src/*"], + }, "types": ["vitest/globals"] }, - "exclude": ["dist", "node_modules"] + "exclude": ["dist", "node_modules", "vite.config.ts"] } diff --git a/docs/package.json b/docs/package.json index a6829f9fc5..f976791279 100644 --- a/docs/package.json +++ b/docs/package.json @@ -37,10 +37,10 @@ }, "devDependencies": { "@docusaurus/module-type-aliases": "~3.9.0", - "@docusaurus/tsconfig": "^3.7.0", + "@docusaurus/tsconfig": "^3.10.0", "@docusaurus/types": "^3.7.0", "prettier": "^3.7.4", - "typescript": "^5.1.6" + "typescript": "^6.0.0" }, "browserslist": { "production": [ diff --git a/docs/tsconfig.json b/docs/tsconfig.json index 674c46e46d..a6ba1bd9dd 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -1,8 +1,4 @@ { // This file is not used in compilation. It is here just for a nice editor experience. - "extends": "@docusaurus/tsconfig", - - "compilerOptions": { - "baseUrl": "." - } + "extends": "@docusaurus/tsconfig" } diff --git a/e2e/package.json b/e2e/package.json index e26fc9fee0..aa559dd9b8 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -51,7 +51,7 @@ "sharp": "^0.34.5", "socket.io-client": "^4.7.4", "supertest": "^7.0.0", - "typescript": "^5.3.3", + "typescript": "^6.0.0", "typescript-eslint": "^8.28.0", "utimes": "^5.2.1", "vite-tsconfig-paths": "^6.1.1", diff --git a/e2e/src/ui/mock-network/base-network.ts b/e2e/src/ui/mock-network/base-network.ts index c7246ea3cb..7c4aee59e3 100644 --- a/e2e/src/ui/mock-network/base-network.ts +++ b/e2e/src/ui/mock-network/base-network.ts @@ -1,5 +1,5 @@ import { BrowserContext } from '@playwright/test'; -import { playwrightHost } from 'playwright.config'; +import { playwrightHost } from 'src/../playwright.config'; export const setupBaseMockApiRoutes = async (context: BrowserContext, adminUserId: string) => { await context.addCookies([ diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json index f6efbf41e9..61eefdac07 100644 --- a/e2e/tsconfig.json +++ b/e2e/tsconfig.json @@ -14,8 +14,10 @@ "outDir": "./dist", "incremental": true, "skipLibCheck": true, + "paths": { + "src/*": ["./src/*"] + }, "esModuleInterop": true, - "baseUrl": "./" }, "include": ["src/**/*.ts", "vitest*.config.ts"], "exclude": ["dist", "node_modules"] diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 249d353e45..d1c7b902e0 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -20,7 +20,7 @@ }, "devDependencies": { "@types/node": "^24.12.0", - "typescript": "^5.3.3" + "typescript": "^6.0.0" }, "repository": { "type": "git", diff --git a/open-api/typescript-sdk/tsconfig.json b/open-api/typescript-sdk/tsconfig.json index 30d58d5177..a4255c3f6c 100644 --- a/open-api/typescript-sdk/tsconfig.json +++ b/open-api/typescript-sdk/tsconfig.json @@ -7,6 +7,7 @@ "outDir": "build", "module": "Node16", "moduleResolution": "Node16", + "rootDir": "./src", "lib": ["esnext", "dom"] }, "include": ["src/**/*.ts"] diff --git a/plugins/package-lock.json b/plugins/package-lock.json index 3f004d7dba..efff7ef4fe 100644 --- a/plugins/package-lock.json +++ b/plugins/package-lock.json @@ -11,7 +11,7 @@ "devDependencies": { "@extism/js-pdk": "^1.0.1", "esbuild": "^0.27.0", - "typescript": "^5.3.2" + "typescript": "^6.0.0" } }, "node_modules/@esbuild/aix-ppc64": { @@ -509,9 +509,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/plugins/package.json b/plugins/package.json index abeabe7161..04d6600480 100644 --- a/plugins/package.json +++ b/plugins/package.json @@ -14,6 +14,6 @@ "devDependencies": { "@extism/js-pdk": "^1.0.1", "esbuild": "^0.27.0", - "typescript": "^5.3.2" + "typescript": "^6.0.0" } } diff --git a/plugins/src/index.ts b/plugins/src/index.ts index 9566c02cd8..5cf666fc87 100644 --- a/plugins/src/index.ts +++ b/plugins/src/index.ts @@ -44,7 +44,7 @@ export function actionAddToAlbum() { authToken, assetId: data.asset.id, albumId: albumId, - }) + }), ); addAssetToAlbum(ptr.offset); @@ -61,7 +61,7 @@ export function actionArchive() { authToken, id: data.asset.id, visibility: 'archive', - }) + }), ); updateAsset(ptr.offset); diff --git a/plugins/tsconfig.json b/plugins/tsconfig.json index 86c9e766bf..a0bc730661 100644 --- a/plugins/tsconfig.json +++ b/plugins/tsconfig.json @@ -2,17 +2,13 @@ "compilerOptions": { "target": "es2020", // Specify ECMAScript target version "module": "commonjs", // Specify module code generation - "lib": [ - "es2020" - ], // Specify a list of library files to be included in the compilation - "types": [ - "@extism/js-pdk", - "./src/index.d.ts" - ], // Specify a list of type definition files to be included in the compilation + "lib": ["es2020"], // Specify a list of library files to be included in the compilation + "types": ["./src/index.d.ts", "./node_modules/@extism/js-pdk"], // Specify a list of type definition files to be included in the compilation "strict": true, // Enable all strict type-checking options "esModuleInterop": true, // Enables compatibility with Babel-style module imports "skipLibCheck": true, // Skip type checking of declaration files "allowJs": true, // Allow JavaScript files to be compiled + "rootDir": "./src", "noEmit": true // Do not emit outputs (no .js or .d.ts files) }, "include": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08861394f0..c26b897d41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,13 +100,13 @@ importers: version: 3.8.1 prettier-plugin-organize-imports: specifier: ^4.0.0 - version: 4.3.0(prettier@3.8.1)(typescript@5.9.3) + version: 4.3.0(prettier@3.8.1)(typescript@6.0.2) typescript: - specifier: ^5.3.3 - version: 5.9.3 + specifier: ^6.0.0 + version: 6.0.2 typescript-eslint: - specifier: ^8.28.0 - version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.58.0 + version: 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) vite: specifier: ^8.0.0 version: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) @@ -124,16 +124,16 @@ importers: dependencies: '@docusaurus/core': specifier: ~3.9.0 - version: 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + version: 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/preset-classic': specifier: ~3.9.0 - version: 3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3) + version: 3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@6.0.2) '@docusaurus/theme-common': specifier: ~3.9.0 - version: 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/theme-mermaid': specifier: ~3.9.0 - version: 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + version: 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@mdi/js': specifier: ^7.3.67 version: 7.4.47 @@ -148,7 +148,7 @@ importers: version: 10.4.27(postcss@8.5.8) docusaurus-lunr-search: specifier: ^3.3.2 - version: 3.6.0(@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 3.6.0(@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) lunr: specifier: ^2.3.9 version: 2.3.9 @@ -178,8 +178,8 @@ importers: specifier: ~3.9.0 version: 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/tsconfig': - specifier: ^3.7.0 - version: 3.9.2 + specifier: ^3.10.0 + version: 3.10.0 '@docusaurus/types': specifier: ^3.7.0 version: 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -187,8 +187,8 @@ importers: specifier: ^3.7.4 version: 3.8.1 typescript: - specifier: ^5.1.6 - version: 5.9.3 + specifier: ^6.0.0 + version: 6.0.2 e2e: devDependencies: @@ -263,7 +263,7 @@ importers: version: 3.8.1 prettier-plugin-organize-imports: specifier: ^4.0.0 - version: 4.3.0(prettier@3.8.1)(typescript@5.9.3) + version: 4.3.0(prettier@3.8.1)(typescript@6.0.2) sharp: specifier: ^0.34.5 version: 0.34.5 @@ -274,17 +274,17 @@ importers: specifier: ^7.0.0 version: 7.2.2 typescript: - specifier: ^5.3.3 - version: 5.9.3 + specifier: ^6.0.0 + version: 6.0.2 typescript-eslint: specifier: ^8.28.0 - version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) utimes: specifier: ^5.2.1 version: 5.2.1(encoding@0.1.13) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 6.1.1(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: ^4.0.0 version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(happy-dom@20.8.9)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) @@ -323,8 +323,8 @@ importers: specifier: ^24.12.0 version: 24.12.2 typescript: - specifier: ^5.3.3 - version: 5.9.3 + specifier: ^6.0.0 + version: 6.0.2 plugins: devDependencies: @@ -335,8 +335,8 @@ importers: specifier: ^0.27.0 version: 0.27.4 typescript: - specifier: ^5.3.2 - version: 5.9.3 + specifier: ^6.0.0 + version: 6.0.2 server: dependencies: @@ -507,7 +507,7 @@ importers: version: 2.1.1 nest-commander: specifier: ^3.16.0 - version: 3.20.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@types/inquirer@8.2.12)(@types/node@24.12.2)(typescript@5.9.3) + version: 3.20.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@types/inquirer@8.2.12)(@types/node@24.12.2)(typescript@6.0.2) nestjs-cls: specifier: ^5.0.0 version: 5.4.3(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) @@ -595,7 +595,7 @@ importers: version: 11.0.16(@swc/core@1.15.18(@swc/helpers@0.5.17))(@types/node@24.12.2)(esbuild@0.27.4) '@nestjs/schematics': specifier: ^11.0.0 - version: 11.0.9(chokidar@4.0.3)(typescript@5.9.3) + version: 11.0.9(chokidar@4.0.3)(typescript@6.0.2) '@nestjs/testing': specifier: ^11.0.4 version: 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@nestjs/platform-express@11.1.17) @@ -706,7 +706,7 @@ importers: version: 3.8.1 prettier-plugin-organize-imports: specifier: ^4.0.0 - version: 4.3.0(prettier@3.8.1)(typescript@5.9.3) + version: 4.3.0(prettier@3.8.1)(typescript@6.0.2) sql-formatter: specifier: ^15.0.0 version: 15.7.2 @@ -720,17 +720,17 @@ importers: specifier: ^11.0.0 version: 11.13.0 typescript: - specifier: ^5.9.2 - version: 5.9.3 + specifier: ^6.0.0 + version: 6.0.2 typescript-eslint: specifier: ^8.28.0 - version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) unplugin-swc: specifier: ^1.4.5 version: 1.5.9(@swc/core@1.15.18(@swc/helpers@0.5.17))(rollup@4.55.1) vite-tsconfig-paths: specifier: ^6.0.0 - version: 6.1.1(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 6.1.1(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: specifier: ^3.0.0 version: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.32.0)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) @@ -748,7 +748,7 @@ importers: version: link:../open-api/typescript-sdk '@immich/ui': specifier: ^0.69.0 - version: 0.69.0(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + version: 0.69.0(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) '@mapbox/mapbox-gl-rtl-text': specifier: 0.3.0 version: 0.3.0 @@ -869,19 +869,19 @@ importers: version: 10.3.0 '@koddsson/eslint-plugin-tscompat': specifier: ^0.2.0 - version: 0.2.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + version: 0.2.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@socket.io/component-emitter': specifier: ^3.1.0 version: 3.1.2 '@sveltejs/adapter-static': specifier: ^3.0.8 - version: 3.0.10(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 3.0.10(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) '@sveltejs/enhanced-img': specifier: ^0.10.4 version: 0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/kit': specifier: ^2.27.1 - version: 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: 7.0.0 version: 7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) @@ -947,7 +947,7 @@ importers: version: 3.8.1 prettier-plugin-organize-imports: specifier: ^4.0.0 - version: 4.3.0(prettier@3.8.1)(typescript@5.9.3) + version: 4.3.0(prettier@3.8.1)(typescript@6.0.2) prettier-plugin-sort-json: specifier: ^4.1.1 version: 4.2.0(prettier@3.8.1) @@ -962,7 +962,7 @@ importers: version: 5.54.1 svelte-check: specifier: ^4.1.5 - version: 4.4.5(picomatch@4.0.4)(svelte@5.54.1)(typescript@5.9.3) + version: 4.4.5(picomatch@4.0.4)(svelte@5.54.1)(typescript@6.0.2) svelte-eslint-parser: specifier: ^1.3.3 version: 1.6.0(svelte@5.54.1) @@ -970,11 +970,11 @@ importers: specifier: ^4.2.2 version: 4.2.2 typescript: - specifier: ^5.8.3 - version: 5.9.3 + specifier: ^6.0.0 + version: 6.0.2 typescript-eslint: specifier: ^8.45.0 - version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) vite: specifier: ^8.0.0 version: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) @@ -2243,8 +2243,8 @@ packages: resolution: {integrity: sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA==} engines: {node: '>=20.0'} - '@docusaurus/tsconfig@3.9.2': - resolution: {integrity: sha512-j6/Fp4Rlpxsc632cnRnl5HpOWeb6ZKssDj6/XzzAzVGXXfm9Eptx3rxCC+fDzySn9fHTS+CWJjPineCR1bB5WQ==} + '@docusaurus/tsconfig@3.10.0': + resolution: {integrity: sha512-TXdC3WXuPrdQAexLvjUJfnYf3YKEgEqAs5nK0Q88pRBCW7t7oN4ILvWYb3A5Z1wlSXyXGWW/mCUmLEhdWsjnDQ==} '@docusaurus/types@3.9.2': resolution: {integrity: sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q==} @@ -5250,6 +5250,14 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/eslint-plugin@8.58.0': + resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.58.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/parser@8.57.1': resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5257,22 +5265,45 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.58.0': + resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/project-service@8.57.1': resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.58.0': + resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/scope-manager@8.57.1': resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.58.0': + resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.57.1': resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.58.0': + resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/type-utils@8.57.1': resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5280,16 +5311,33 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.58.0': + resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/types@8.57.1': resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.58.0': + resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.57.1': resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.58.0': + resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/utils@8.57.1': resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5297,10 +5345,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.58.0': + resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/visitor-keys@8.57.1': resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.58.0': + resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -11725,11 +11784,23 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' + typescript-eslint@8.58.0: + resolution: {integrity: sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true + typescript@6.0.2: + resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} + engines: {node: '>=14.17'} + hasBin: true + ua-is-frozen@0.1.2: resolution: {integrity: sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==} @@ -13884,7 +13955,7 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/bundler@3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: '@babel/core': 7.28.5 '@docusaurus/babel': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -13903,7 +13974,7 @@ snapshots: mini-css-extract-plugin: 2.9.4(webpack@5.104.1) null-loader: 4.0.1(webpack@5.104.1) postcss: 8.5.8 - postcss-loader: 7.3.4(postcss@8.5.8)(typescript@5.9.3)(webpack@5.104.1) + postcss-loader: 7.3.4(postcss@8.5.8)(typescript@6.0.2)(webpack@5.104.1) postcss-preset-env: 10.5.0(postcss@8.5.8) terser-webpack-plugin: 5.3.16(webpack@5.104.1) tslib: 2.8.1 @@ -13925,10 +13996,10 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: '@docusaurus/babel': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/bundler': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/bundler': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/logger': 3.9.2 '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -14054,13 +14125,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-content-blog@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/logger': 3.9.2 '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-common': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -14095,13 +14166,13 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/logger': 3.9.2 '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-common': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -14135,9 +14206,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-pages@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-content-pages@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -14165,9 +14236,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-css-cascade-layers@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-css-cascade-layers@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -14192,9 +14263,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-debug@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-debug@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) fs-extra: 11.3.2 @@ -14220,9 +14291,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-analytics@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-google-analytics@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 @@ -14246,9 +14317,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-gtag@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-google-gtag@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/gtag.js': 0.0.12 @@ -14273,9 +14344,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-google-tag-manager@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 @@ -14299,9 +14370,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-sitemap@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-sitemap@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/logger': 3.9.2 '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -14330,14 +14401,14 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-svgr@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-svgr@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@svgr/core': 8.1.0(typescript@5.9.3) - '@svgr/webpack': 8.1.0(typescript@5.9.3) + '@svgr/core': 8.1.0(typescript@6.0.2) + '@svgr/webpack': 8.1.0(typescript@6.0.2) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) tslib: 2.8.1 @@ -14360,22 +14431,22 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/preset-classic@3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3)': + '@docusaurus/preset-classic@3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-css-cascade-layers': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-debug': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-google-analytics': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-google-gtag': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-google-tag-manager': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-sitemap': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-svgr': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/theme-classic': 3.9.2(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/theme-search-algolia': 3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-css-cascade-layers': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-debug': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-google-analytics': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-google-gtag': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-google-tag-manager': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-sitemap': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-svgr': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/theme-classic': 3.9.2(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/theme-search-algolia': 3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@6.0.2) '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -14405,16 +14476,16 @@ snapshots: '@types/react': 19.2.14 react: 19.2.4 - '@docusaurus/theme-classic@3.9.2(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/theme-classic@3.9.2(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/logger': 3.9.2 '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/theme-translations': 3.9.2 '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -14452,11 +14523,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-common@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@docusaurus/theme-common@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-common': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/history': 4.7.11 @@ -14476,11 +14547,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-mermaid@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/theme-mermaid@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/types': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) mermaid: 11.12.2 @@ -14506,13 +14577,13 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-search-algolia@3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3)': + '@docusaurus/theme-search-algolia@3.9.2(@algolia/client-search@5.46.0)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@6.0.2)': dependencies: '@docsearch/react': 4.3.2(@algolia/client-search@5.46.0)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3) - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) '@docusaurus/logger': 3.9.2 - '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/theme-translations': 3.9.2 '@docusaurus/utils': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -14552,7 +14623,7 @@ snapshots: fs-extra: 11.3.2 tslib: 2.8.1 - '@docusaurus/tsconfig@3.9.2': {} + '@docusaurus/tsconfig@3.10.0': {} '@docusaurus/types@3.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: @@ -15160,12 +15231,12 @@ snapshots: node-emoji: 2.2.0 svelte: 5.54.1 - '@immich/ui@0.69.0(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)': + '@immich/ui@0.69.0(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)': dependencies: '@immich/svelte-markdown-preprocess': 0.2.1(svelte@5.54.1) '@internationalized/date': 3.12.0 '@mdi/js': 7.4.47 - bits-ui: 2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + bits-ui: 2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) luxon: 3.7.2 simple-icons: 16.13.0 svelte: 5.54.1 @@ -15438,11 +15509,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@koddsson/eslint-plugin-tscompat@0.2.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@koddsson/eslint-plugin-tscompat@0.2.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@mdn/browser-compat-data': 6.1.5 - '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) browserslist: 4.28.1 transitivePeerDependencies: - eslint @@ -15756,6 +15827,17 @@ snapshots: transitivePeerDependencies: - chokidar + '@nestjs/schematics@11.0.9(chokidar@4.0.3)(typescript@6.0.2)': + dependencies: + '@angular-devkit/core': 19.2.17(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.17(chokidar@4.0.3) + comment-json: 4.4.1 + jsonc-parser: 3.3.1 + pluralize: 8.0.0 + typescript: 6.0.2 + transitivePeerDependencies: + - chokidar + '@nestjs/swagger@11.2.6(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)': dependencies: '@microsoft/tsdoc': 0.16.0 @@ -16565,9 +16647,9 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: - '@sveltejs/kit': 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/kit': 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/enhanced-img@0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.55.1)(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: @@ -16583,7 +16665,7 @@ snapshots: - rollup - supports-color - '@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) @@ -16602,7 +16684,7 @@ snapshots: vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: '@opentelemetry/api': 1.9.0 - typescript: 5.9.3 + typescript: 6.0.2 '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: @@ -16657,12 +16739,12 @@ snapshots: '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.28.5) '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.28.5) - '@svgr/core@8.1.0(typescript@5.9.3)': + '@svgr/core@8.1.0(typescript@6.0.2)': dependencies: '@babel/core': 7.28.5 '@svgr/babel-preset': 8.1.0(@babel/core@7.28.5) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.9.3) + cosmiconfig: 8.3.6(typescript@6.0.2) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -16673,35 +16755,35 @@ snapshots: '@babel/types': 7.29.0 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.2))': dependencies: '@babel/core': 7.28.5 '@svgr/babel-preset': 8.1.0(@babel/core@7.28.5) - '@svgr/core': 8.1.0(typescript@5.9.3) + '@svgr/core': 8.1.0(typescript@6.0.2) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@6.0.2))(typescript@6.0.2)': dependencies: - '@svgr/core': 8.1.0(typescript@5.9.3) - cosmiconfig: 8.3.6(typescript@5.9.3) + '@svgr/core': 8.1.0(typescript@6.0.2) + cosmiconfig: 8.3.6(typescript@6.0.2) deepmerge: 4.3.1 svgo: 3.3.2 transitivePeerDependencies: - typescript - '@svgr/webpack@8.1.0(typescript@5.9.3)': + '@svgr/webpack@8.1.0(typescript@6.0.2)': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.28.5) '@babel/preset-env': 7.28.5(@babel/core@7.28.5) '@babel/preset-react': 7.28.5(@babel/core@7.28.5) '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5) - '@svgr/core': 8.1.0(typescript@5.9.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) + '@svgr/core': 8.1.0(typescript@6.0.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.2)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@6.0.2))(typescript@6.0.2) transitivePeerDependencies: - supports-color - typescript @@ -17470,40 +17552,77 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/visitor-keys': 8.57.1 eslint: 10.1.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/type-utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.58.0 + eslint: 10.1.0(jiti@2.6.1) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/scope-manager': 8.57.1 '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3 eslint: 10.1.0(jiti@2.6.1) - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.1(typescript@5.9.3)': + '@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.58.0 + debug: 4.4.3 + eslint: 10.1.0(jiti@2.6.1) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.57.1(typescript@6.0.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.2) '@typescript-eslint/types': 8.57.1 debug: 4.4.3 - typescript: 5.9.3 + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.58.0(typescript@6.0.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2) + '@typescript-eslint/types': 8.58.0 + debug: 4.4.3 + typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -17512,47 +17631,96 @@ snapshots: '@typescript-eslint/types': 8.57.1 '@typescript-eslint/visitor-keys': 8.57.1 - '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.9.3)': + '@typescript-eslint/scope-manager@8.58.0': dependencies: - typescript: 5.9.3 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/visitor-keys': 8.58.0 - '@typescript-eslint/type-utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.57.1(typescript@6.0.2)': + dependencies: + typescript: 6.0.2 + + '@typescript-eslint/tsconfig-utils@8.58.0(typescript@6.0.2)': + dependencies: + typescript: 6.0.2 + + '@typescript-eslint/type-utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) debug: 4.4.3 eslint: 10.1.0(jiti@2.6.1) - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + dependencies: + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + debug: 4.4.3 + eslint: 10.1.0(jiti@2.6.1) + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.57.1': {} - '@typescript-eslint/typescript-estree@8.57.1(typescript@5.9.3)': + '@typescript-eslint/types@8.58.0': {} + + '@typescript-eslint/typescript-estree@8.57.1(typescript@6.0.2)': dependencies: - '@typescript-eslint/project-service': 8.57.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/project-service': 8.57.1(typescript@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.2) '@typescript-eslint/types': 8.57.1 '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3 minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2)': + dependencies: + '@typescript-eslint/project-service': 8.58.0(typescript@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/visitor-keys': 8.58.0 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.57.1 '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) - typescript: 5.9.3 + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) + eslint: 10.1.0(jiti@2.6.1) + typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -17561,6 +17729,11 @@ snapshots: '@typescript-eslint/types': 8.57.1 eslint-visitor-keys: 5.0.1 + '@typescript-eslint/visitor-keys@8.58.0': + dependencies: + '@typescript-eslint/types': 8.58.0 + eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.3.0': {} '@vercel/oidc@3.0.5': {} @@ -18155,15 +18328,15 @@ snapshots: binary-extensions@2.3.0: {} - bits-ui@2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): + bits-ui@2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): dependencies: '@floating-ui/core': 1.7.3 '@floating-ui/dom': 1.7.4 '@internationalized/date': 3.12.0 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + runed: 0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) svelte: 5.54.1 - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -18775,6 +18948,15 @@ snapshots: optionalDependencies: typescript: 5.9.3 + cosmiconfig@8.3.6(typescript@6.0.2): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 6.0.2 + cpu-features@0.0.10: dependencies: buildcheck: 0.0.7 @@ -19318,9 +19500,9 @@ snapshots: transitivePeerDependencies: - supports-color - docusaurus-lunr-search@3.6.0(@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + docusaurus-lunr-search@3.6.0(@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) autocomplete.js: 0.37.1 clsx: 2.1.1 gauge: 3.0.2 @@ -22382,7 +22564,7 @@ snapshots: neo-async@2.6.2: {} - nest-commander@3.20.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@types/inquirer@8.2.12)(@types/node@24.12.2)(typescript@5.9.3): + nest-commander@3.20.1(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17)(@types/inquirer@8.2.12)(@types/node@24.12.2)(typescript@6.0.2): dependencies: '@fig/complete-commander': 3.2.0(commander@11.1.0) '@golevelup/nestjs-discovery': 5.0.0(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17) @@ -22390,7 +22572,7 @@ snapshots: '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.17)(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@types/inquirer': 8.2.12 commander: 11.1.0 - cosmiconfig: 8.3.6(typescript@5.9.3) + cosmiconfig: 8.3.6(typescript@6.0.2) inquirer: 8.2.7(@types/node@24.12.2) transitivePeerDependencies: - '@types/node' @@ -23099,9 +23281,9 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - postcss-loader@7.3.4(postcss@8.5.8)(typescript@5.9.3)(webpack@5.104.1): + postcss-loader@7.3.4(postcss@8.5.8)(typescript@6.0.2)(webpack@5.104.1): dependencies: - cosmiconfig: 8.3.6(typescript@5.9.3) + cosmiconfig: 8.3.6(typescript@6.0.2) jiti: 1.21.7 postcss: 8.5.8 semver: 7.7.4 @@ -23431,10 +23613,10 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-organize-imports@4.3.0(prettier@3.8.1)(typescript@5.9.3): + prettier-plugin-organize-imports@4.3.0(prettier@3.8.1)(typescript@6.0.2): dependencies: prettier: 3.8.1 - typescript: 5.9.3 + typescript: 6.0.2 prettier-plugin-sort-json@4.2.0(prettier@3.8.1): dependencies: @@ -24063,14 +24245,14 @@ snapshots: dependencies: queue-microtask: 1.2.3 - runed@0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): + runed@0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 svelte: 5.54.1 optionalDependencies: - '@sveltejs/kit': 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/kit': 2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) rw@1.3.3: {} @@ -24696,7 +24878,7 @@ snapshots: dependencies: svelte: 5.54.1 - svelte-check@4.4.5(picomatch@4.0.4)(svelte@5.54.1)(typescript@5.9.3): + svelte-check@4.4.5(picomatch@4.0.4)(svelte@5.54.1)(typescript@6.0.2): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 @@ -24704,7 +24886,7 @@ snapshots: picocolors: 1.1.1 sade: 1.8.1 svelte: 5.54.1 - typescript: 5.9.3 + typescript: 6.0.2 transitivePeerDependencies: - picomatch @@ -24795,10 +24977,10 @@ snapshots: dependencies: svelte-floating-ui: 1.5.8 - svelte-toolbelt@0.10.6(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) + runed: 0.35.1(@sveltejs/kit@2.55.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.54.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.54.1) style-to-object: 1.0.14 svelte: 5.54.1 transitivePeerDependencies: @@ -25155,17 +25337,17 @@ snapshots: dependencies: utf8-byte-length: 1.0.5 - ts-api-utils@2.5.0(typescript@5.9.3): + ts-api-utils@2.5.0(typescript@6.0.2): dependencies: - typescript: 5.9.3 + typescript: 6.0.2 ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} - tsconfck@3.1.6(typescript@5.9.3): + tsconfck@3.1.6(typescript@6.0.2): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.2 tsconfig-paths-webpack-plugin@4.2.0: dependencies: @@ -25222,19 +25404,32 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) - typescript: 5.9.3 + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + typescript-eslint@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + eslint: 10.1.0(jiti@2.6.1) + typescript: 6.0.2 transitivePeerDependencies: - supports-color typescript@5.9.3: {} + typescript@6.0.2: {} + ua-is-frozen@0.1.2: {} ua-parser-js@2.0.9: @@ -25520,11 +25715,11 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-tsconfig-paths@6.1.1(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: debug: 4.4.3 globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.9.3) + tsconfck: 3.1.6(typescript@6.0.2) vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.2)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color diff --git a/server/package.json b/server/package.json index b77ff39e71..02ca904dbe 100644 --- a/server/package.json +++ b/server/package.json @@ -167,7 +167,7 @@ "supertest": "^7.1.0", "tailwindcss": "^3.4.0", "testcontainers": "^11.0.0", - "typescript": "^5.9.2", + "typescript": "^6.0.0", "typescript-eslint": "^8.28.0", "unplugin-swc": "^1.4.5", "vite-tsconfig-paths": "^6.0.0", diff --git a/server/tsconfig.build.json b/server/tsconfig.build.json index 6bdc715a11..b64a2f98a7 100644 --- a/server/tsconfig.build.json +++ b/server/tsconfig.build.json @@ -1,4 +1,7 @@ { "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "./src", + }, "exclude": ["dist", "node_modules", "upload", "test", "e2e", "**/*spec.ts"] } diff --git a/server/tsconfig.json b/server/tsconfig.json index fcb0ea2a97..9d86425ab5 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -19,8 +19,9 @@ "preserveWatchOutput": true, "paths": { "src/*": ["./src/*"], + "test/*": ["./test/*"] }, - "baseUrl": "./", + "rootDir": ".", "jsx": "react", "types": ["vitest/globals"], "noErrorTruncation": true diff --git a/web/eslint.config.js b/web/eslint.config.js index f8e6cdd9c6..c25621f73a 100644 --- a/web/eslint.config.js +++ b/web/eslint.config.js @@ -73,6 +73,7 @@ export default typescriptEslint.config( 'eslint.config.js', 'tailwind.config.js', 'coverage', + 'vite.config.ts', ], }, typescriptEslint.configs.recommended, diff --git a/web/package.json b/web/package.json index 9e35f5361a..028f328db4 100644 --- a/web/package.json +++ b/web/package.json @@ -104,7 +104,7 @@ "svelte-check": "^4.1.5", "svelte-eslint-parser": "^1.3.3", "tailwindcss": "^4.2.2", - "typescript": "^5.8.3", + "typescript": "^6.0.0", "typescript-eslint": "^8.45.0", "vite": "^8.0.0", "vitest": "^4.0.0" diff --git a/web/src/lib/managers/edit/transform-manager.svelte.ts b/web/src/lib/managers/edit/transform-manager.svelte.ts index 652cd0bee9..6b5901003e 100644 --- a/web/src/lib/managers/edit/transform-manager.svelte.ts +++ b/web/src/lib/managers/edit/transform-manager.svelte.ts @@ -203,7 +203,7 @@ class TransformManager implements EditToolManager { passive: true, }); - globalThis.addEventListener('mousemove', (e) => transformManager.handleMouseMove(e), { passive: true }); + globalThis.addEventListener('mousemove', (e: MouseEvent) => transformManager.handleMouseMove(e), { passive: true }); const transformEdits = edits.filter((e) => e.action === 'rotate' || e.action === 'mirror'); diff --git a/web/tsconfig.json b/web/tsconfig.json index afebee51ad..795edd526e 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json @@ -8,11 +8,13 @@ "moduleResolution": "bundler", "noImplicitOverride": true, "resolveJsonModule": true, + "rootDir": ".", "skipLibCheck": true, "sourceMap": true, "strict": true, "target": "es2022", "types": ["vitest/globals"] }, + "exclude": ["vite.config.ts"], "extends": "./.svelte-kit/tsconfig.json" } From 42787890837c7e9489cd34a01438af2bc9bb9b38 Mon Sep 17 00:00:00 2001 From: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> Date: Tue, 7 Apr 2026 21:53:10 +0200 Subject: [PATCH 129/156] chore: git ignore tsBuildInfo (#27594) --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3220701cc6..fdfc67eddd 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ vite.config.js.timestamp-* .pnpm-store .devcontainer/library .devcontainer/.env* +*.tsbuildInfo From f1882c2926581473d19860676b02bfd148e2d057 Mon Sep 17 00:00:00 2001 From: bo0tzz Date: Tue, 7 Apr 2026 21:54:30 +0200 Subject: [PATCH 130/156] fix: csp quotes (#27592) --- server/helmet.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/helmet.json b/server/helmet.json index ec31752a52..1cd301d813 100644 --- a/server/helmet.json +++ b/server/helmet.json @@ -2,9 +2,9 @@ "contentSecurityPolicy": { "directives": { "default-src": ["'self'"], - "script-src": ["'self'", "'wasm-unsafe-eval", "'unsafe-inline'", "https://www.gstatic.com"], + "script-src": ["'self'", "'wasm-unsafe-eval'", "'unsafe-inline'", "https://www.gstatic.com"], "style-src": ["'self'", "'unsafe-inline'"], - "img-src": ["'self'", "'data:'", "'blob:'"], + "img-src": ["'self'", "data:", "blob:"], "connect-src": [ "'self'", "blob:", From 9ba9a22c401fb56f0b41db1004992c31e85a7aaa Mon Sep 17 00:00:00 2001 From: Mert <101130780+mertalev@users.noreply.github.com> Date: Tue, 7 Apr 2026 15:57:42 -0400 Subject: [PATCH 131/156] fix(ml): downgrade numpy (#27591) downgrade numpy --- machine-learning/pyproject.toml | 2 +- machine-learning/uv.lock | 150 ++++++++++++++++---------------- 2 files changed, 77 insertions(+), 75 deletions(-) diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index 1ab7ee9668..dc18d68169 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -11,7 +11,7 @@ dependencies = [ "gunicorn>=21.1.0", "huggingface-hub>=0.20.1,<1.0", "insightface>=0.7.3,<1.0", - "numpy>=2.3.4", + "numpy<2.4.0", "opencv-python-headless>=4.7.0.72,<5.0", "orjson>=3.9.5", "pillow>=12.1.1,<12.2", diff --git a/machine-learning/uv.lock b/machine-learning/uv.lock index f916777a1b..59cf60b71c 100644 --- a/machine-learning/uv.lock +++ b/machine-learning/uv.lock @@ -987,7 +987,7 @@ requires-dist = [ { name = "gunicorn", specifier = ">=21.1.0" }, { name = "huggingface-hub", specifier = ">=0.20.1,<1.0" }, { name = "insightface", specifier = ">=0.7.3,<1.0" }, - { name = "numpy", specifier = ">=2.3.4" }, + { name = "numpy", specifier = "<2.4.0" }, { name = "onnxruntime", marker = "extra == 'armnn'", specifier = ">=1.23.2,<2" }, { name = "onnxruntime", marker = "extra == 'cpu'", specifier = ">=1.23.2,<2" }, { name = "onnxruntime", marker = "extra == 'rknn'", specifier = ">=1.23.2,<2" }, @@ -1519,81 +1519,83 @@ wheels = [ [[package]] name = "numpy" -version = "2.4.2" +version = "2.3.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" } +sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/44/71852273146957899753e69986246d6a176061ea183407e95418c2aa4d9a/numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825", size = 16955478, upload-time = "2026-01-31T23:10:25.623Z" }, - { url = "https://files.pythonhosted.org/packages/74/41/5d17d4058bd0cd96bcbd4d9ff0fb2e21f52702aab9a72e4a594efa18692f/numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1", size = 14965467, upload-time = "2026-01-31T23:10:28.186Z" }, - { url = "https://files.pythonhosted.org/packages/49/48/fb1ce8136c19452ed15f033f8aee91d5defe515094e330ce368a0647846f/numpy-2.4.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7", size = 5475172, upload-time = "2026-01-31T23:10:30.848Z" }, - { url = "https://files.pythonhosted.org/packages/40/a9/3feb49f17bbd1300dd2570432961f5c8a4ffeff1db6f02c7273bd020a4c9/numpy-2.4.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73", size = 6805145, upload-time = "2026-01-31T23:10:32.352Z" }, - { url = "https://files.pythonhosted.org/packages/3f/39/fdf35cbd6d6e2fcad42fcf85ac04a85a0d0fbfbf34b30721c98d602fd70a/numpy-2.4.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f069069931240b3fc703f1e23df63443dbd6390614c8c44a87d96cd0ec81eb1", size = 15966084, upload-time = "2026-01-31T23:10:34.502Z" }, - { url = "https://files.pythonhosted.org/packages/1b/46/6fa4ea94f1ddf969b2ee941290cca6f1bfac92b53c76ae5f44afe17ceb69/numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32", size = 16899477, upload-time = "2026-01-31T23:10:37.075Z" }, - { url = "https://files.pythonhosted.org/packages/09/a1/2a424e162b1a14a5bd860a464ab4e07513916a64ab1683fae262f735ccd2/numpy-2.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2653de5c24910e49c2b106499803124dde62a5a1fe0eedeaecf4309a5f639390", size = 17323429, upload-time = "2026-01-31T23:10:39.704Z" }, - { url = "https://files.pythonhosted.org/packages/ce/a2/73014149ff250628df72c58204822ac01d768697913881aacf839ff78680/numpy-2.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1ae241bbfc6ae276f94a170b14785e561cb5e7f626b6688cf076af4110887413", size = 18635109, upload-time = "2026-01-31T23:10:41.924Z" }, - { url = "https://files.pythonhosted.org/packages/6c/0c/73e8be2f1accd56df74abc1c5e18527822067dced5ec0861b5bb882c2ce0/numpy-2.4.2-cp311-cp311-win32.whl", hash = "sha256:df1b10187212b198dd45fa943d8985a3c8cf854aed4923796e0e019e113a1bda", size = 6237915, upload-time = "2026-01-31T23:10:45.26Z" }, - { url = "https://files.pythonhosted.org/packages/76/ae/e0265e0163cf127c24c3969d29f1c4c64551a1e375d95a13d32eab25d364/numpy-2.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695", size = 12607972, upload-time = "2026-01-31T23:10:47.021Z" }, - { url = "https://files.pythonhosted.org/packages/29/a5/c43029af9b8014d6ea157f192652c50042e8911f4300f8f6ed3336bf437f/numpy-2.4.2-cp311-cp311-win_arm64.whl", hash = "sha256:47c5a6ed21d9452b10227e5e8a0e1c22979811cad7dcc19d8e3e2fb8fa03f1a3", size = 10485763, upload-time = "2026-01-31T23:10:50.087Z" }, - { url = "https://files.pythonhosted.org/packages/51/6e/6f394c9c77668153e14d4da83bcc247beb5952f6ead7699a1a2992613bea/numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a", size = 16667963, upload-time = "2026-01-31T23:10:52.147Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f8/55483431f2b2fd015ae6ed4fe62288823ce908437ed49db5a03d15151678/numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1", size = 14693571, upload-time = "2026-01-31T23:10:54.789Z" }, - { url = "https://files.pythonhosted.org/packages/2f/20/18026832b1845cdc82248208dd929ca14c9d8f2bac391f67440707fff27c/numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e", size = 5203469, upload-time = "2026-01-31T23:10:57.343Z" }, - { url = "https://files.pythonhosted.org/packages/7d/33/2eb97c8a77daaba34eaa3fa7241a14ac5f51c46a6bd5911361b644c4a1e2/numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27", size = 6550820, upload-time = "2026-01-31T23:10:59.429Z" }, - { url = "https://files.pythonhosted.org/packages/b1/91/b97fdfd12dc75b02c44e26c6638241cc004d4079a0321a69c62f51470c4c/numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548", size = 15663067, upload-time = "2026-01-31T23:11:01.291Z" }, - { url = "https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f", size = 16619782, upload-time = "2026-01-31T23:11:03.669Z" }, - { url = "https://files.pythonhosted.org/packages/b7/83/9751502164601a79e18847309f5ceec0b1446d7b6aa12305759b72cf98b2/numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460", size = 17013128, upload-time = "2026-01-31T23:11:05.913Z" }, - { url = "https://files.pythonhosted.org/packages/61/c4/c4066322256ec740acc1c8923a10047818691d2f8aec254798f3dd90f5f2/numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba", size = 18345324, upload-time = "2026-01-31T23:11:08.248Z" }, - { url = "https://files.pythonhosted.org/packages/ab/af/6157aa6da728fa4525a755bfad486ae7e3f76d4c1864138003eb84328497/numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f", size = 5960282, upload-time = "2026-01-31T23:11:10.497Z" }, - { url = "https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85", size = 12314210, upload-time = "2026-01-31T23:11:12.176Z" }, - { url = "https://files.pythonhosted.org/packages/2f/a3/56c5c604fae6dd40fa2ed3040d005fca97e91bd320d232ac9931d77ba13c/numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa", size = 10220171, upload-time = "2026-01-31T23:11:14.684Z" }, - { url = "https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c", size = 16663696, upload-time = "2026-01-31T23:11:17.516Z" }, - { url = "https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979", size = 14688322, upload-time = "2026-01-31T23:11:19.883Z" }, - { url = "https://files.pythonhosted.org/packages/da/b4/f805ab79293c728b9a99438775ce51885fd4f31b76178767cfc718701a39/numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98", size = 5198157, upload-time = "2026-01-31T23:11:22.375Z" }, - { url = "https://files.pythonhosted.org/packages/74/09/826e4289844eccdcd64aac27d13b0fd3f32039915dd5b9ba01baae1f436c/numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef", size = 6546330, upload-time = "2026-01-31T23:11:23.958Z" }, - { url = "https://files.pythonhosted.org/packages/19/fb/cbfdbfa3057a10aea5422c558ac57538e6acc87ec1669e666d32ac198da7/numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7", size = 15660968, upload-time = "2026-01-31T23:11:25.713Z" }, - { url = "https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499", size = 16607311, upload-time = "2026-01-31T23:11:28.117Z" }, - { url = "https://files.pythonhosted.org/packages/14/d9/4b5adfc39a43fa6bf918c6d544bc60c05236cc2f6339847fc5b35e6cb5b0/numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb", size = 17012850, upload-time = "2026-01-31T23:11:30.888Z" }, - { url = "https://files.pythonhosted.org/packages/b7/20/adb6e6adde6d0130046e6fdfb7675cc62bc2f6b7b02239a09eb58435753d/numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7", size = 18334210, upload-time = "2026-01-31T23:11:33.214Z" }, - { url = "https://files.pythonhosted.org/packages/78/0e/0a73b3dff26803a8c02baa76398015ea2a5434d9b8265a7898a6028c1591/numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110", size = 5958199, upload-time = "2026-01-31T23:11:35.385Z" }, - { url = "https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622", size = 12310848, upload-time = "2026-01-31T23:11:38.001Z" }, - { url = "https://files.pythonhosted.org/packages/6e/8d/6da186483e308da5da1cc6918ce913dcfe14ffde98e710bfeff2a6158d4e/numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71", size = 10221082, upload-time = "2026-01-31T23:11:40.392Z" }, - { url = "https://files.pythonhosted.org/packages/25/a1/9510aa43555b44781968935c7548a8926274f815de42ad3997e9e83680dd/numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262", size = 14815866, upload-time = "2026-01-31T23:11:42.495Z" }, - { url = "https://files.pythonhosted.org/packages/36/30/6bbb5e76631a5ae46e7923dd16ca9d3f1c93cfa8d4ed79a129814a9d8db3/numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913", size = 5325631, upload-time = "2026-01-31T23:11:44.7Z" }, - { url = "https://files.pythonhosted.org/packages/46/00/3a490938800c1923b567b3a15cd17896e68052e2145d8662aaf3e1ffc58f/numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab", size = 6646254, upload-time = "2026-01-31T23:11:46.341Z" }, - { url = "https://files.pythonhosted.org/packages/d3/e9/fac0890149898a9b609caa5af7455a948b544746e4b8fe7c212c8edd71f8/numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82", size = 15720138, upload-time = "2026-01-31T23:11:48.082Z" }, - { url = "https://files.pythonhosted.org/packages/ea/5c/08887c54e68e1e28df53709f1893ce92932cc6f01f7c3d4dc952f61ffd4e/numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f", size = 16655398, upload-time = "2026-01-31T23:11:50.293Z" }, - { url = "https://files.pythonhosted.org/packages/4d/89/253db0fa0e66e9129c745e4ef25631dc37d5f1314dad2b53e907b8538e6d/numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554", size = 17079064, upload-time = "2026-01-31T23:11:52.927Z" }, - { url = "https://files.pythonhosted.org/packages/2a/d5/cbade46ce97c59c6c3da525e8d95b7abe8a42974a1dc5c1d489c10433e88/numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257", size = 18379680, upload-time = "2026-01-31T23:11:55.22Z" }, - { url = "https://files.pythonhosted.org/packages/40/62/48f99ae172a4b63d981babe683685030e8a3df4f246c893ea5c6ef99f018/numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657", size = 6082433, upload-time = "2026-01-31T23:11:58.096Z" }, - { url = "https://files.pythonhosted.org/packages/07/38/e054a61cfe48ad9f1ed0d188e78b7e26859d0b60ef21cd9de4897cdb5326/numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b", size = 12451181, upload-time = "2026-01-31T23:11:59.782Z" }, - { url = "https://files.pythonhosted.org/packages/6e/a4/a05c3a6418575e185dd84d0b9680b6bb2e2dc3e4202f036b7b4e22d6e9dc/numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1", size = 10290756, upload-time = "2026-01-31T23:12:02.438Z" }, - { url = "https://files.pythonhosted.org/packages/18/88/b7df6050bf18fdcfb7046286c6535cabbdd2064a3440fca3f069d319c16e/numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b", size = 16663092, upload-time = "2026-01-31T23:12:04.521Z" }, - { url = "https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000", size = 14698770, upload-time = "2026-01-31T23:12:06.96Z" }, - { url = "https://files.pythonhosted.org/packages/fb/0b/f9e49ba6c923678ad5bc38181c08ac5e53b7a5754dbca8e581aa1a56b1ff/numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1", size = 5208562, upload-time = "2026-01-31T23:12:09.632Z" }, - { url = "https://files.pythonhosted.org/packages/7d/12/d7de8f6f53f9bb76997e5e4c069eda2051e3fe134e9181671c4391677bb2/numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74", size = 6543710, upload-time = "2026-01-31T23:12:11.969Z" }, - { url = "https://files.pythonhosted.org/packages/09/63/c66418c2e0268a31a4cf8a8b512685748200f8e8e8ec6c507ce14e773529/numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a", size = 15677205, upload-time = "2026-01-31T23:12:14.33Z" }, - { url = "https://files.pythonhosted.org/packages/5d/6c/7f237821c9642fb2a04d2f1e88b4295677144ca93285fd76eff3bcba858d/numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325", size = 16611738, upload-time = "2026-01-31T23:12:16.525Z" }, - { url = "https://files.pythonhosted.org/packages/c2/a7/39c4cdda9f019b609b5c473899d87abff092fc908cfe4d1ecb2fcff453b0/numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909", size = 17028888, upload-time = "2026-01-31T23:12:19.306Z" }, - { url = "https://files.pythonhosted.org/packages/da/b3/e84bb64bdfea967cc10950d71090ec2d84b49bc691df0025dddb7c26e8e3/numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a", size = 18339556, upload-time = "2026-01-31T23:12:21.816Z" }, - { url = "https://files.pythonhosted.org/packages/88/f5/954a291bc1192a27081706862ac62bb5920fbecfbaa302f64682aa90beed/numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a", size = 6006899, upload-time = "2026-01-31T23:12:24.14Z" }, - { url = "https://files.pythonhosted.org/packages/05/cb/eff72a91b2efdd1bc98b3b8759f6a1654aa87612fc86e3d87d6fe4f948c4/numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75", size = 12443072, upload-time = "2026-01-31T23:12:26.33Z" }, - { url = "https://files.pythonhosted.org/packages/37/75/62726948db36a56428fce4ba80a115716dc4fad6a3a4352487f8bb950966/numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05", size = 10494886, upload-time = "2026-01-31T23:12:28.488Z" }, - { url = "https://files.pythonhosted.org/packages/36/2f/ee93744f1e0661dc267e4b21940870cabfae187c092e1433b77b09b50ac4/numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308", size = 14818567, upload-time = "2026-01-31T23:12:30.709Z" }, - { url = "https://files.pythonhosted.org/packages/a7/24/6535212add7d76ff938d8bdc654f53f88d35cddedf807a599e180dcb8e66/numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef", size = 5328372, upload-time = "2026-01-31T23:12:32.962Z" }, - { url = "https://files.pythonhosted.org/packages/5e/9d/c48f0a035725f925634bf6b8994253b43f2047f6778a54147d7e213bc5a7/numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d", size = 6649306, upload-time = "2026-01-31T23:12:34.797Z" }, - { url = "https://files.pythonhosted.org/packages/81/05/7c73a9574cd4a53a25907bad38b59ac83919c0ddc8234ec157f344d57d9a/numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8", size = 15722394, upload-time = "2026-01-31T23:12:36.565Z" }, - { url = "https://files.pythonhosted.org/packages/35/fa/4de10089f21fc7d18442c4a767ab156b25c2a6eaf187c0db6d9ecdaeb43f/numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5", size = 16653343, upload-time = "2026-01-31T23:12:39.188Z" }, - { url = "https://files.pythonhosted.org/packages/b8/f9/d33e4ffc857f3763a57aa85650f2e82486832d7492280ac21ba9efda80da/numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e", size = 17078045, upload-time = "2026-01-31T23:12:42.041Z" }, - { url = "https://files.pythonhosted.org/packages/c8/b8/54bdb43b6225badbea6389fa038c4ef868c44f5890f95dd530a218706da3/numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a", size = 18380024, upload-time = "2026-01-31T23:12:44.331Z" }, - { url = "https://files.pythonhosted.org/packages/a5/55/6e1a61ded7af8df04016d81b5b02daa59f2ea9252ee0397cb9f631efe9e5/numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443", size = 6153937, upload-time = "2026-01-31T23:12:47.229Z" }, - { url = "https://files.pythonhosted.org/packages/45/aa/fa6118d1ed6d776b0983f3ceac9b1a5558e80df9365b1c3aa6d42bf9eee4/numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236", size = 12631844, upload-time = "2026-01-31T23:12:48.997Z" }, - { url = "https://files.pythonhosted.org/packages/32/0a/2ec5deea6dcd158f254a7b372fb09cfba5719419c8d66343bab35237b3fb/numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181", size = 10565379, upload-time = "2026-01-31T23:12:51.345Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f8/50e14d36d915ef64d8f8bc4a087fc8264d82c785eda6711f80ab7e620335/numpy-2.4.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:89f7268c009bc492f506abd6f5265defa7cb3f7487dc21d357c3d290add45082", size = 16833179, upload-time = "2026-01-31T23:12:53.5Z" }, - { url = "https://files.pythonhosted.org/packages/17/17/809b5cad63812058a8189e91a1e2d55a5a18fd04611dbad244e8aeae465c/numpy-2.4.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6dee3bb76aa4009d5a912180bf5b2de012532998d094acee25d9cb8dee3e44a", size = 14889755, upload-time = "2026-01-31T23:12:55.933Z" }, - { url = "https://files.pythonhosted.org/packages/3e/ea/181b9bcf7627fc8371720316c24db888dcb9829b1c0270abf3d288b2e29b/numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:cd2bd2bbed13e213d6b55dc1d035a4f91748a7d3edc9480c13898b0353708920", size = 5399500, upload-time = "2026-01-31T23:12:58.671Z" }, - { url = "https://files.pythonhosted.org/packages/33/9f/413adf3fc955541ff5536b78fcf0754680b3c6d95103230252a2c9408d23/numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:cf28c0c1d4c4bf00f509fa7eb02c58d7caf221b50b467bcb0d9bbf1584d5c821", size = 6714252, upload-time = "2026-01-31T23:13:00.518Z" }, - { url = "https://files.pythonhosted.org/packages/91/da/643aad274e29ccbdf42ecd94dafe524b81c87bcb56b83872d54827f10543/numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e04ae107ac591763a47398bb45b568fc38f02dbc4aa44c063f67a131f99346cb", size = 15797142, upload-time = "2026-01-31T23:13:02.219Z" }, - { url = "https://files.pythonhosted.org/packages/66/27/965b8525e9cb5dc16481b30a1b3c21e50c7ebf6e9dbd48d0c4d0d5089c7e/numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:602f65afdef699cda27ec0b9224ae5dc43e328f4c24c689deaf77133dbee74d0", size = 16727979, upload-time = "2026-01-31T23:13:04.62Z" }, - { url = "https://files.pythonhosted.org/packages/de/e5/b7d20451657664b07986c2f6e3be564433f5dcaf3482d68eaecd79afaf03/numpy-2.4.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0", size = 12502577, upload-time = "2026-01-31T23:13:07.08Z" }, + { url = "https://files.pythonhosted.org/packages/43/77/84dd1d2e34d7e2792a236ba180b5e8fcc1e3e414e761ce0253f63d7f572e/numpy-2.3.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10", size = 17034641, upload-time = "2025-11-16T22:49:19.336Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ea/25e26fa5837106cde46ae7d0b667e20f69cbbc0efd64cba8221411ab26ae/numpy-2.3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218", size = 12528324, upload-time = "2025-11-16T22:49:22.582Z" }, + { url = "https://files.pythonhosted.org/packages/4d/1a/e85f0eea4cf03d6a0228f5c0256b53f2df4bc794706e7df019fc622e47f1/numpy-2.3.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d", size = 5356872, upload-time = "2025-11-16T22:49:25.408Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bb/35ef04afd567f4c989c2060cde39211e4ac5357155c1833bcd1166055c61/numpy-2.3.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5", size = 6893148, upload-time = "2025-11-16T22:49:27.549Z" }, + { url = "https://files.pythonhosted.org/packages/f2/2b/05bbeb06e2dff5eab512dfc678b1cc5ee94d8ac5956a0885c64b6b26252b/numpy-2.3.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7", size = 14557282, upload-time = "2025-11-16T22:49:30.964Z" }, + { url = "https://files.pythonhosted.org/packages/65/fb/2b23769462b34398d9326081fad5655198fcf18966fcb1f1e49db44fbf31/numpy-2.3.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4", size = 16897903, upload-time = "2025-11-16T22:49:34.191Z" }, + { url = "https://files.pythonhosted.org/packages/ac/14/085f4cf05fc3f1e8aa95e85404e984ffca9b2275a5dc2b1aae18a67538b8/numpy-2.3.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e", size = 16341672, upload-time = "2025-11-16T22:49:37.2Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3b/1f73994904142b2aa290449b3bb99772477b5fd94d787093e4f24f5af763/numpy-2.3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748", size = 18838896, upload-time = "2025-11-16T22:49:39.727Z" }, + { url = "https://files.pythonhosted.org/packages/cd/b9/cf6649b2124f288309ffc353070792caf42ad69047dcc60da85ee85fea58/numpy-2.3.5-cp311-cp311-win32.whl", hash = "sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c", size = 6563608, upload-time = "2025-11-16T22:49:42.079Z" }, + { url = "https://files.pythonhosted.org/packages/aa/44/9fe81ae1dcc29c531843852e2874080dc441338574ccc4306b39e2ff6e59/numpy-2.3.5-cp311-cp311-win_amd64.whl", hash = "sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c", size = 13078442, upload-time = "2025-11-16T22:49:43.99Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a7/f99a41553d2da82a20a2f22e93c94f928e4490bb447c9ff3c4ff230581d3/numpy-2.3.5-cp311-cp311-win_arm64.whl", hash = "sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa", size = 10458555, upload-time = "2025-11-16T22:49:47.092Z" }, + { url = "https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e", size = 16733873, upload-time = "2025-11-16T22:49:49.84Z" }, + { url = "https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769", size = 12259838, upload-time = "2025-11-16T22:49:52.863Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e1/1ee06e70eb2136797abe847d386e7c0e830b67ad1d43f364dd04fa50d338/numpy-2.3.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5", size = 5088378, upload-time = "2025-11-16T22:49:55.055Z" }, + { url = "https://files.pythonhosted.org/packages/6d/9c/1ca85fb86708724275103b81ec4cf1ac1d08f465368acfc8da7ab545bdae/numpy-2.3.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4", size = 6628559, upload-time = "2025-11-16T22:49:57.371Z" }, + { url = "https://files.pythonhosted.org/packages/74/78/fcd41e5a0ce4f3f7b003da85825acddae6d7ecb60cf25194741b036ca7d6/numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d", size = 14250702, upload-time = "2025-11-16T22:49:59.632Z" }, + { url = "https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28", size = 16606086, upload-time = "2025-11-16T22:50:02.127Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c5/5ad26fbfbe2012e190cc7d5003e4d874b88bb18861d0829edc140a713021/numpy-2.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b", size = 16025985, upload-time = "2025-11-16T22:50:04.536Z" }, + { url = "https://files.pythonhosted.org/packages/d2/fa/dd48e225c46c819288148d9d060b047fd2a6fb1eb37eae25112ee4cb4453/numpy-2.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c", size = 18542976, upload-time = "2025-11-16T22:50:07.557Z" }, + { url = "https://files.pythonhosted.org/packages/05/79/ccbd23a75862d95af03d28b5c6901a1b7da4803181513d52f3b86ed9446e/numpy-2.3.5-cp312-cp312-win32.whl", hash = "sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952", size = 6285274, upload-time = "2025-11-16T22:50:10.746Z" }, + { url = "https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa", size = 12782922, upload-time = "2025-11-16T22:50:12.811Z" }, + { url = "https://files.pythonhosted.org/packages/78/a6/aae5cc2ca78c45e64b9ef22f089141d661516856cf7c8a54ba434576900d/numpy-2.3.5-cp312-cp312-win_arm64.whl", hash = "sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013", size = 10194667, upload-time = "2025-11-16T22:50:16.16Z" }, + { url = "https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff", size = 16728251, upload-time = "2025-11-16T22:50:19.013Z" }, + { url = "https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188", size = 12254652, upload-time = "2025-11-16T22:50:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/78/da/8c7738060ca9c31b30e9301ee0cf6c5ffdbf889d9593285a1cead337f9a5/numpy-2.3.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0", size = 5083172, upload-time = "2025-11-16T22:50:24.562Z" }, + { url = "https://files.pythonhosted.org/packages/a4/b4/ee5bb2537fb9430fd2ef30a616c3672b991a4129bb1c7dcc42aa0abbe5d7/numpy-2.3.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903", size = 6622990, upload-time = "2025-11-16T22:50:26.47Z" }, + { url = "https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d", size = 14248902, upload-time = "2025-11-16T22:50:28.861Z" }, + { url = "https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017", size = 16597430, upload-time = "2025-11-16T22:50:31.56Z" }, + { url = "https://files.pythonhosted.org/packages/2a/51/c1e29be863588db58175175f057286900b4b3327a1351e706d5e0f8dd679/numpy-2.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf", size = 16024551, upload-time = "2025-11-16T22:50:34.242Z" }, + { url = "https://files.pythonhosted.org/packages/83/68/8236589d4dbb87253d28259d04d9b814ec0ecce7cb1c7fed29729f4c3a78/numpy-2.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce", size = 18533275, upload-time = "2025-11-16T22:50:37.651Z" }, + { url = "https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl", hash = "sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size = 6277637, upload-time = "2025-11-16T22:50:40.11Z" }, + { url = "https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size = 12779090, upload-time = "2025-11-16T22:50:42.503Z" }, + { url = "https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl", hash = "sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size = 10194710, upload-time = "2025-11-16T22:50:44.971Z" }, + { url = "https://files.pythonhosted.org/packages/13/cb/71744144e13389d577f867f745b7df2d8489463654a918eea2eeb166dfc9/numpy-2.3.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd", size = 16827292, upload-time = "2025-11-16T22:50:47.715Z" }, + { url = "https://files.pythonhosted.org/packages/71/80/ba9dc6f2a4398e7f42b708a7fdc841bb638d353be255655498edbf9a15a8/numpy-2.3.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f", size = 12378897, upload-time = "2025-11-16T22:50:51.327Z" }, + { url = "https://files.pythonhosted.org/packages/2e/6d/db2151b9f64264bcceccd51741aa39b50150de9b602d98ecfe7e0c4bff39/numpy-2.3.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a", size = 5207391, upload-time = "2025-11-16T22:50:54.542Z" }, + { url = "https://files.pythonhosted.org/packages/80/ae/429bacace5ccad48a14c4ae5332f6aa8ab9f69524193511d60ccdfdc65fa/numpy-2.3.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139", size = 6721275, upload-time = "2025-11-16T22:50:56.794Z" }, + { url = "https://files.pythonhosted.org/packages/74/5b/1919abf32d8722646a38cd527bc3771eb229a32724ee6ba340ead9b92249/numpy-2.3.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e", size = 14306855, upload-time = "2025-11-16T22:50:59.208Z" }, + { url = "https://files.pythonhosted.org/packages/a5/87/6831980559434973bebc30cd9c1f21e541a0f2b0c280d43d3afd909b66d0/numpy-2.3.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9", size = 16657359, upload-time = "2025-11-16T22:51:01.991Z" }, + { url = "https://files.pythonhosted.org/packages/dd/91/c797f544491ee99fd00495f12ebb7802c440c1915811d72ac5b4479a3356/numpy-2.3.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946", size = 16093374, upload-time = "2025-11-16T22:51:05.291Z" }, + { url = "https://files.pythonhosted.org/packages/74/a6/54da03253afcbe7a72785ec4da9c69fb7a17710141ff9ac5fcb2e32dbe64/numpy-2.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1", size = 18594587, upload-time = "2025-11-16T22:51:08.585Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/aff53abbdd41b0ecca94285f325aff42357c6b5abc482a3fcb4994290b18/numpy-2.3.5-cp313-cp313t-win32.whl", hash = "sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3", size = 6405940, upload-time = "2025-11-16T22:51:11.541Z" }, + { url = "https://files.pythonhosted.org/packages/d5/81/50613fec9d4de5480de18d4f8ef59ad7e344d497edbef3cfd80f24f98461/numpy-2.3.5-cp313-cp313t-win_amd64.whl", hash = "sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234", size = 12920341, upload-time = "2025-11-16T22:51:14.312Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ab/08fd63b9a74303947f34f0bd7c5903b9c5532c2d287bead5bdf4c556c486/numpy-2.3.5-cp313-cp313t-win_arm64.whl", hash = "sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7", size = 10262507, upload-time = "2025-11-16T22:51:16.846Z" }, + { url = "https://files.pythonhosted.org/packages/ba/97/1a914559c19e32d6b2e233cf9a6a114e67c856d35b1d6babca571a3e880f/numpy-2.3.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82", size = 16735706, upload-time = "2025-11-16T22:51:19.558Z" }, + { url = "https://files.pythonhosted.org/packages/57/d4/51233b1c1b13ecd796311216ae417796b88b0616cfd8a33ae4536330748a/numpy-2.3.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0", size = 12264507, upload-time = "2025-11-16T22:51:22.492Z" }, + { url = "https://files.pythonhosted.org/packages/45/98/2fe46c5c2675b8306d0b4a3ec3494273e93e1226a490f766e84298576956/numpy-2.3.5-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63", size = 5093049, upload-time = "2025-11-16T22:51:25.171Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0e/0698378989bb0ac5f1660c81c78ab1fe5476c1a521ca9ee9d0710ce54099/numpy-2.3.5-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9", size = 6626603, upload-time = "2025-11-16T22:51:27Z" }, + { url = "https://files.pythonhosted.org/packages/5e/a6/9ca0eecc489640615642a6cbc0ca9e10df70df38c4d43f5a928ff18d8827/numpy-2.3.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b", size = 14262696, upload-time = "2025-11-16T22:51:29.402Z" }, + { url = "https://files.pythonhosted.org/packages/c8/f6/07ec185b90ec9d7217a00eeeed7383b73d7e709dae2a9a021b051542a708/numpy-2.3.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520", size = 16597350, upload-time = "2025-11-16T22:51:32.167Z" }, + { url = "https://files.pythonhosted.org/packages/75/37/164071d1dde6a1a84c9b8e5b414fa127981bad47adf3a6b7e23917e52190/numpy-2.3.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c", size = 16040190, upload-time = "2025-11-16T22:51:35.403Z" }, + { url = "https://files.pythonhosted.org/packages/08/3c/f18b82a406b04859eb026d204e4e1773eb41c5be58410f41ffa511d114ae/numpy-2.3.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8", size = 18536749, upload-time = "2025-11-16T22:51:39.698Z" }, + { url = "https://files.pythonhosted.org/packages/40/79/f82f572bf44cf0023a2fe8588768e23e1592585020d638999f15158609e1/numpy-2.3.5-cp314-cp314-win32.whl", hash = "sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248", size = 6335432, upload-time = "2025-11-16T22:51:42.476Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2e/235b4d96619931192c91660805e5e49242389742a7a82c27665021db690c/numpy-2.3.5-cp314-cp314-win_amd64.whl", hash = "sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e", size = 12919388, upload-time = "2025-11-16T22:51:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/07/2b/29fd75ce45d22a39c61aad74f3d718e7ab67ccf839ca8b60866054eb15f8/numpy-2.3.5-cp314-cp314-win_arm64.whl", hash = "sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2", size = 10476651, upload-time = "2025-11-16T22:51:47.749Z" }, + { url = "https://files.pythonhosted.org/packages/17/e1/f6a721234ebd4d87084cfa68d081bcba2f5cfe1974f7de4e0e8b9b2a2ba1/numpy-2.3.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41", size = 16834503, upload-time = "2025-11-16T22:51:50.443Z" }, + { url = "https://files.pythonhosted.org/packages/5c/1c/baf7ffdc3af9c356e1c135e57ab7cf8d247931b9554f55c467efe2c69eff/numpy-2.3.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad", size = 12381612, upload-time = "2025-11-16T22:51:53.609Z" }, + { url = "https://files.pythonhosted.org/packages/74/91/f7f0295151407ddc9ba34e699013c32c3c91944f9b35fcf9281163dc1468/numpy-2.3.5-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39", size = 5210042, upload-time = "2025-11-16T22:51:56.213Z" }, + { url = "https://files.pythonhosted.org/packages/2e/3b/78aebf345104ec50dd50a4d06ddeb46a9ff5261c33bcc58b1c4f12f85ec2/numpy-2.3.5-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20", size = 6724502, upload-time = "2025-11-16T22:51:58.584Z" }, + { url = "https://files.pythonhosted.org/packages/02/c6/7c34b528740512e57ef1b7c8337ab0b4f0bddf34c723b8996c675bc2bc91/numpy-2.3.5-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52", size = 14308962, upload-time = "2025-11-16T22:52:01.698Z" }, + { url = "https://files.pythonhosted.org/packages/80/35/09d433c5262bc32d725bafc619e095b6a6651caf94027a03da624146f655/numpy-2.3.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b", size = 16655054, upload-time = "2025-11-16T22:52:04.267Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ab/6a7b259703c09a88804fa2430b43d6457b692378f6b74b356155283566ac/numpy-2.3.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3", size = 16091613, upload-time = "2025-11-16T22:52:08.651Z" }, + { url = "https://files.pythonhosted.org/packages/c2/88/330da2071e8771e60d1038166ff9d73f29da37b01ec3eb43cb1427464e10/numpy-2.3.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227", size = 18591147, upload-time = "2025-11-16T22:52:11.453Z" }, + { url = "https://files.pythonhosted.org/packages/51/41/851c4b4082402d9ea860c3626db5d5df47164a712cb23b54be028b184c1c/numpy-2.3.5-cp314-cp314t-win32.whl", hash = "sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5", size = 6479806, upload-time = "2025-11-16T22:52:14.641Z" }, + { url = "https://files.pythonhosted.org/packages/90/30/d48bde1dfd93332fa557cff1972fbc039e055a52021fbef4c2c4b1eefd17/numpy-2.3.5-cp314-cp314t-win_amd64.whl", hash = "sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf", size = 13105760, upload-time = "2025-11-16T22:52:17.975Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fd/4b5eb0b3e888d86aee4d198c23acec7d214baaf17ea93c1adec94c9518b9/numpy-2.3.5-cp314-cp314t-win_arm64.whl", hash = "sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42", size = 10545459, upload-time = "2025-11-16T22:52:20.55Z" }, + { url = "https://files.pythonhosted.org/packages/c6/65/f9dea8e109371ade9c782b4e4756a82edf9d3366bca495d84d79859a0b79/numpy-2.3.5-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310", size = 16910689, upload-time = "2025-11-16T22:52:23.247Z" }, + { url = "https://files.pythonhosted.org/packages/00/4f/edb00032a8fb92ec0a679d3830368355da91a69cab6f3e9c21b64d0bb986/numpy-2.3.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c", size = 12457053, upload-time = "2025-11-16T22:52:26.367Z" }, + { url = "https://files.pythonhosted.org/packages/16/a4/e8a53b5abd500a63836a29ebe145fc1ab1f2eefe1cfe59276020373ae0aa/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18", size = 5285635, upload-time = "2025-11-16T22:52:29.266Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2f/37eeb9014d9c8b3e9c55bc599c68263ca44fdbc12a93e45a21d1d56df737/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff", size = 6801770, upload-time = "2025-11-16T22:52:31.421Z" }, + { url = "https://files.pythonhosted.org/packages/7d/e4/68d2f474df2cb671b2b6c2986a02e520671295647dad82484cde80ca427b/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb", size = 14391768, upload-time = "2025-11-16T22:52:33.593Z" }, + { url = "https://files.pythonhosted.org/packages/b8/50/94ccd8a2b141cb50651fddd4f6a48874acb3c91c8f0842b08a6afc4b0b21/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7", size = 16729263, upload-time = "2025-11-16T22:52:36.369Z" }, + { url = "https://files.pythonhosted.org/packages/2d/ee/346fa473e666fe14c52fcdd19ec2424157290a032d4c41f98127bfb31ac7/numpy-2.3.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425", size = 12967213, upload-time = "2025-11-16T22:52:39.38Z" }, ] [[package]] From 2903b2653b3f5e0402789a556a10f42f9b47ee7c Mon Sep 17 00:00:00 2001 From: Mert <101130780+mertalev@users.noreply.github.com> Date: Tue, 7 Apr 2026 15:58:03 -0400 Subject: [PATCH 132/156] fix(server): library import batch size (#27595) * lower batch size * update test --- server/src/decorators.ts | 15 ++++++++------- server/src/repositories/asset.repository.ts | 6 ++++-- server/src/services/library.service.spec.ts | 2 +- server/src/services/library.service.ts | 8 +------- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/server/src/decorators.ts b/server/src/decorators.ts index 695adb4a36..a5c5bf38db 100644 --- a/server/src/decorators.ts +++ b/server/src/decorators.ts @@ -73,7 +73,8 @@ export function Chunked( const originalMethod = descriptor.value; const parameterIndex = options.paramIndex ?? 0; const chunkSize = options.chunkSize || DATABASE_PARAMETER_CHUNK_SIZE; - descriptor.value = async function (...arguments_: any[]) { + const mergeFn = options.mergeFn; + descriptor.value = function (...arguments_: any[]) { const argument = arguments_[parameterIndex]; // Early return if argument length is less than or equal to the chunk size. @@ -81,27 +82,27 @@ export function Chunked( (Array.isArray(argument) && argument.length <= chunkSize) || (argument instanceof Set && argument.size <= chunkSize) ) { - return await originalMethod.apply(this, arguments_); + return originalMethod.apply(this, arguments_); } return Promise.all( - chunks(argument, chunkSize).map(async (chunk) => { - return await Reflect.apply(originalMethod, this, [ + chunks(argument, chunkSize).map((chunk) => { + return Reflect.apply(originalMethod, this, [ ...arguments_.slice(0, parameterIndex), chunk, ...arguments_.slice(parameterIndex + 1), ]); }), - ).then((results) => (options.mergeFn ? options.mergeFn(results) : results)); + ).then((results) => (mergeFn ? mergeFn(results) : results)); }; }; } -export function ChunkedArray(options?: { paramIndex?: number }): MethodDecorator { +export function ChunkedArray(options?: { paramIndex?: number; chunkSize?: number }): MethodDecorator { return Chunked({ ...options, mergeFn: _.flatten }); } -export function ChunkedSet(options?: { paramIndex?: number }): MethodDecorator { +export function ChunkedSet(options?: { paramIndex?: number; chunkSize?: number }): MethodDecorator { return Chunked({ ...options, mergeFn: (args: Set[]) => setUnion(...args) }); } diff --git a/server/src/repositories/asset.repository.ts b/server/src/repositories/asset.repository.ts index 2e1d02ef28..5876b934e5 100644 --- a/server/src/repositories/asset.repository.ts +++ b/server/src/repositories/asset.repository.ts @@ -380,8 +380,10 @@ export class AssetRepository { return this.db.insertInto('asset').values(asset).returningAll().executeTakeFirstOrThrow(); } - createAll(assets: Insertable[]) { - return this.db.insertInto('asset').values(assets).returningAll().execute(); + @ChunkedArray({ chunkSize: 4000 }) + async createAll(assets: Insertable[]) { + const ids = await this.db.insertInto('asset').values(assets).returning('id').execute(); + return ids.map(({ id }) => id); } @GenerateSql({ params: [DummyValue.UUID, { year: 2000, day: 1, month: 1 }] }) diff --git a/server/src/services/library.service.spec.ts b/server/src/services/library.service.spec.ts index d0c2d0a785..9a2ec00815 100644 --- a/server/src/services/library.service.spec.ts +++ b/server/src/services/library.service.spec.ts @@ -560,7 +560,7 @@ describe(LibraryService.name, () => { paths: ['/data/user1/photo.jpg'], }; - mocks.asset.createAll.mockResolvedValue([asset]); + mocks.asset.createAll.mockResolvedValue([asset.id]); mocks.library.get.mockResolvedValue(library); await expect(sut.handleSyncFiles(mockLibraryJob)).resolves.toBe(JobStatus.Success); diff --git a/server/src/services/library.service.ts b/server/src/services/library.service.ts index 9f2d69bab5..ce3c9ee662 100644 --- a/server/src/services/library.service.ts +++ b/server/src/services/library.service.ts @@ -266,13 +266,7 @@ export class LibraryService extends BaseService { ), ); - const assetIds: string[] = []; - - for (let i = 0; i < assetImports.length; i += 5000) { - // Chunk the imports to avoid the postgres limit of max parameters at once - const chunk = assetImports.slice(i, i + 5000); - await this.assetRepository.createAll(chunk).then((assets) => assetIds.push(...assets.map((asset) => asset.id))); - } + const assetIds = await this.assetRepository.createAll(assetImports); const progressMessage = job.progressCounter && job.totalAssets From b03a649e744d92d0a05507790b0bcf88c01a884e Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 20:22:28 +0000 Subject: [PATCH 133/156] chore: version v2.7.1 --- cli/package.json | 2 +- docs/static/archived-versions.json | 4 ++-- e2e/package.json | 2 +- i18n/package.json | 2 +- machine-learning/pyproject.toml | 2 +- machine-learning/uv.lock | 2 +- mobile/android/fastlane/Fastfile | 2 +- mobile/ios/Runner/Info.plist | 2 +- mobile/openapi/README.md | 2 +- mobile/pubspec.yaml | 2 +- open-api/immich-openapi-specs.json | 2 +- open-api/typescript-sdk/package.json | 2 +- open-api/typescript-sdk/src/fetch-client.ts | 2 +- package.json | 2 +- server/package.json | 2 +- server/tsconfig.build.tsbuildinfo | 1 + web/package.json | 2 +- 17 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 server/tsconfig.build.tsbuildinfo diff --git a/cli/package.json b/cli/package.json index efbdcec97c..f7d81da5e6 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@immich/cli", - "version": "2.7.0", + "version": "2.7.1", "description": "Command Line Interface (CLI) for Immich", "type": "module", "exports": "./dist/index.js", diff --git a/docs/static/archived-versions.json b/docs/static/archived-versions.json index fb6c473c82..fb85bee8b8 100644 --- a/docs/static/archived-versions.json +++ b/docs/static/archived-versions.json @@ -1,7 +1,7 @@ [ { - "label": "v2.7.0", - "url": "https://docs.v2.7.0.archive.immich.app" + "label": "v2.7.1", + "url": "https://docs.v2.7.1.archive.immich.app" }, { "label": "v2.6.3", diff --git a/e2e/package.json b/e2e/package.json index aa559dd9b8..81476e1cc4 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "immich-e2e", - "version": "2.7.0", + "version": "2.7.1", "description": "", "main": "index.js", "type": "module", diff --git a/i18n/package.json b/i18n/package.json index 56f8877087..13829ae953 100644 --- a/i18n/package.json +++ b/i18n/package.json @@ -1,6 +1,6 @@ { "name": "immich-i18n", - "version": "2.7.0", + "version": "2.7.1", "private": true, "scripts": { "format": "prettier --cache --check .", diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index dc18d68169..ae289c47e2 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "immich-ml" -version = "2.7.0" +version = "2.7.1" description = "" authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }] requires-python = ">=3.11,<4.0" diff --git a/machine-learning/uv.lock b/machine-learning/uv.lock index 59cf60b71c..406b304a72 100644 --- a/machine-learning/uv.lock +++ b/machine-learning/uv.lock @@ -898,7 +898,7 @@ wheels = [ [[package]] name = "immich-ml" -version = "2.7.0" +version = "2.7.1" source = { editable = "." } dependencies = [ { name = "aiocache" }, diff --git a/mobile/android/fastlane/Fastfile b/mobile/android/fastlane/Fastfile index 152dbee96d..53100f2ca7 100644 --- a/mobile/android/fastlane/Fastfile +++ b/mobile/android/fastlane/Fastfile @@ -36,7 +36,7 @@ platform :android do build_type: 'Release', properties: { "android.injected.version.code" => 3042, - "android.injected.version.name" => "2.7.0", + "android.injected.version.name" => "2.7.1", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') diff --git a/mobile/ios/Runner/Info.plist b/mobile/ios/Runner/Info.plist index c77aedee8a..50dc1b4958 100644 --- a/mobile/ios/Runner/Info.plist +++ b/mobile/ios/Runner/Info.plist @@ -80,7 +80,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.7.0 + 2.7.1 CFBundleSignature ???? CFBundleURLTypes diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index f192470b10..503f6c566f 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -3,7 +3,7 @@ Immich API This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 2.7.0 +- API version: 2.7.1 - Generator version: 7.8.0 - Build package: org.openapitools.codegen.languages.DartClientCodegen diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 44714e6522..29dc770106 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -2,7 +2,7 @@ name: immich_mobile description: Immich - selfhosted backup media file on mobile phone publish_to: 'none' -version: 2.7.0+3042 +version: 2.7.1+3042 environment: sdk: '>=3.8.0 <4.0.0' diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 0533e13fa3..01f852c812 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -15225,7 +15225,7 @@ "info": { "title": "Immich", "description": "Immich API", - "version": "2.7.0", + "version": "2.7.1", "contact": {} }, "tags": [ diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index d1c7b902e0..7dc24983e1 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@immich/sdk", - "version": "2.7.0", + "version": "2.7.1", "description": "Auto-generated TypeScript SDK for the Immich API", "type": "module", "main": "./build/index.js", diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index 431e724ea3..04c9df3dfa 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -1,6 +1,6 @@ /** * Immich - * 2.7.0 + * 2.7.1 * DO NOT MODIFY - This file has been generated using oazapfts. * See https://www.npmjs.com/package/oazapfts */ diff --git a/package.json b/package.json index 3f0913f5e8..bf22de0da9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "immich-monorepo", - "version": "2.7.0", + "version": "2.7.1", "description": "Monorepo for Immich", "private": true, "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be", diff --git a/server/package.json b/server/package.json index 02ca904dbe..6cb8b0a227 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "immich", - "version": "2.7.0", + "version": "2.7.1", "description": "", "author": "", "private": true, diff --git a/server/tsconfig.build.tsbuildinfo b/server/tsconfig.build.tsbuildinfo new file mode 100644 index 0000000000..99479b0ed1 --- /dev/null +++ b/server/tsconfig.build.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es5.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.dom.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2023.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2025.float16.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/.pnpm/reflect-metadata@0.2.2/node_modules/reflect-metadata/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/bind.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/abstract.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/controllers/controller-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/controllers/controller.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/arguments-host.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/exception-filter.interface.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subscription.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subscriber.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Operator.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Observable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/types.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/auditTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferCount.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferToggle.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferWhen.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/catchError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatestAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatest.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatestWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatMap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatMapTo.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/count.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/debounceTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/defaultIfEmpty.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/delayWhen.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinctUntilChanged.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinctUntilKeyChanged.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/elementAt.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/endWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/every.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaustAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaustMap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/find.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/findIndex.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/first.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subject.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/groupBy.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/ignoreElements.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/isEmpty.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/last.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/map.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mapTo.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Notification.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/max.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeMap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/flatMap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeMapTo.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeScan.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/min.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/ConnectableObservable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/observeOn.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/onErrorResumeNextWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishBehavior.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishLast.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishReplay.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/race.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/raceWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/repeatWhen.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/retryWhen.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/refCount.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sampleTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sequenceEqual.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/share.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/shareReplay.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/single.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipLast.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipUntil.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipWhile.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/startWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/subscribeOn.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchMap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchMapTo.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchScan.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/take.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeLast.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeUntil.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeWhile.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throttleTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throwIfEmpty.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeInterval.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeoutWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/toArray.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/window.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowCount.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowToggle.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowWhen.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/withLatestFrom.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zipAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zipWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/operators/index.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/Action.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Scheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/TestMessage.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/SubscriptionLog.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/SubscriptionLoggable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/ColdObservable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/HotObservable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsyncScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/timerHandle.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsyncAction.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/VirtualTimeScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/TestScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/testing/index.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/dom/animationFrames.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/BehaviorSubject.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/ReplaySubject.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/AsyncSubject.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsapScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/QueueScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AnimationFrameScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/animationFrame.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/identity.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/noop.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/isObservable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/lastValueFrom.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/firstValueFrom.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/ArgumentOutOfRangeError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/EmptyError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/NotFoundError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/ObjectUnsubscribedError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/SequenceError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/UnsubscriptionError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/bindCallback.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/bindNodeCallback.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/AnyCatcher.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/combineLatest.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/forkJoin.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/from.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/fromEvent.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/fromEventPattern.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/never.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/of.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/onErrorResumeNext.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/race.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/range.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/throwError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/using.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/config.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/ws-exception-filter.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/validation-error.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/execution-context.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/can-activate.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/custom-route-param-factory.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/nest-interceptor.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/paramtype.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/type.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/pipe-transform.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/request-method.enum.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/http-status.enum.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/shutdown-signal.enum.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/version-type.enum.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/version-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/middleware-configuration.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/middleware-consumer.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/middleware-config-proxy.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/nest-middleware.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/global-prefix-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/before-application-shutdown.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-application-bootstrap.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-application-shutdown.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-destroy.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-init.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/http-exception-body.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/http-redirect-response.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/cors-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/https-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/services/logger.service.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application-context-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/http-server.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/message-event.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/raw-body-request.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/injectable.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/microservices/nest-hybrid-application-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/forward-reference.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/scope-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/injection-token.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/optional-factory-dependency.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/provider.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/module-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/dynamic-module.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/introspection-result.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/shutdown-hooks-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application-context.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/websockets/web-socket-adapter.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-microservice.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/catch.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/controller.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/dependencies.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/exception-filters.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/inject.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/injectable.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/optional.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/set-metadata.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/use-guards.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/use-interceptors.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/use-pipes.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/apply-decorators.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/version.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/modules/global.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/modules/module.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/modules/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/request-mapping.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/route-params.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/http-code.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/create-route-param-metadata.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/render.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/header.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/redirect.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/constants.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/sse.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/intrinsic.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/http.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/bad-gateway.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/bad-request.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/conflict.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/forbidden.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/gateway-timeout.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/gone.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/http-version-not-supported.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/im-a-teapot.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/internal-server-error.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/method-not-allowed.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/misdirected.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/not-acceptable.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/not-found.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/not-implemented.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/payload-too-large.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/precondition-failed.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/request-timeout.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/service-unavailable.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/unauthorized.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/unprocessable-entity.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/unsupported-media-type.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/services/console-logger.service.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/services/utils/filter-log-levels.util.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/services/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/interfaces/streamable-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/interfaces/streamable-handler-response.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/streamable-file.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/constants.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-async-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-cls.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-host.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/configurable-module.builder.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/default-value.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/interfaces/file.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/file-validator-context.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/file-validator.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/file-type.validator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/max-file-size.validator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/utils/http-error-by-code.util.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/parse-file-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/parse-file.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/parse-file-pipe.builder.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/class-transform-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/transformer-package.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/validator-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/validator-package.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/validation.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-array.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-bool.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-date.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-enum.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-float.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-int.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-uuid.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/serializer/class-serializer.interfaces.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/serializer/class-serializer.interceptor.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/serializer/decorators/serialize-options.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/serializer/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/serializer/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/utils/forward-ref.util.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/utils/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/adapters/http-adapter.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/globals.typedarray.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/buffer.buffer.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/globals.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/crypto.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/events.d.ts","../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/utility.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/header.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/readable.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/fetch.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/formdata.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/connector.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client-stats.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/errors.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/dispatcher.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-dispatcher.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-origin.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool-stats.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/handlers.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/balanced-pool.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/h2c-client.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-interceptor.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-call-history.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-client.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-pool.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/snapshot-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-errors.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/proxy-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-handler.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/api.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache-interceptor.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/interceptors.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/util.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cookies.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/patch.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/websocket.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/eventsource.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/content-type.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/index.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/navigator.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/storage.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/streams.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/assert.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/assert/strict.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/async_hooks.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/buffer.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/child_process.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/cluster.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/console.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/constants.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/crypto.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/dgram.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/dns.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/dns/promises.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/domain.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/events.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/fs.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/fs/promises.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/http.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/http2.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/https.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/inspector.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/inspector.generated.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/module.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/net.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/os.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/path.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/perf_hooks.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/process.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/punycode.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/querystring.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/readline.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/readline/promises.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/repl.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/sea.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/sqlite.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/stream.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/stream/promises.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/stream/consumers.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/stream/web.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/string_decoder.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/test.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/timers.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/timers/promises.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/tls.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/trace_events.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/tty.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/url.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/util.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/v8.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/vm.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/wasi.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/worker_threads.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/zlib.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/index.d.ts","../node_modules/.pnpm/@types+send@1.2.1/node_modules/@types/send/index.d.ts","../node_modules/.pnpm/@types+qs@6.14.0/node_modules/@types/qs/index.d.ts","../node_modules/.pnpm/@types+range-parser@1.2.7/node_modules/@types/range-parser/index.d.ts","../node_modules/.pnpm/@types+express-serve-static-core@5.1.0/node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/.pnpm/@types+http-errors@2.0.5/node_modules/@types/http-errors/index.d.ts","../node_modules/.pnpm/@types+serve-static@2.2.0/node_modules/@types/serve-static/index.d.ts","../node_modules/.pnpm/@types+connect@3.4.38/node_modules/@types/connect/index.d.ts","../node_modules/.pnpm/@types+body-parser@1.19.6/node_modules/@types/body-parser/index.d.ts","../node_modules/.pnpm/@types+express@5.0.6/node_modules/@types/express/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/interfaces/nest-express-body-parser-options.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/interfaces/nest-express-body-parser.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/interfaces/serve-static-options.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/adapters/express-adapter.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/adapters/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/interfaces/nest-express-application.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interfaces/multer-options.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/any-files.interceptor.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/file-fields.interceptor.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/file.interceptor.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/files.interceptor.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/no-files.interceptor.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interfaces/files-upload-module.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/multer.module.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/index.d.ts","../node_modules/.pnpm/@types+compression@1.8.1/node_modules/@types/compression/index.d.ts","../node_modules/.pnpm/@types+cookie-parser@1.4.10_@types+express@5.0.6/node_modules/@types/cookie-parser/index.d.ts","../node_modules/.pnpm/helmet@8.1.0/node_modules/helmet/index.d.cts","../node_modules/.pnpm/sirv@3.0.2/node_modules/sirv/index.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/zone.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/settings.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/_util.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/misc.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/duration.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/interval.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/datetime.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/info.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/luxon.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/index.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/inc.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/semver.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/parse.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/valid.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/clean.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/diff.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/major.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/minor.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/patch.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/sort.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/rsort.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/gt.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/lt.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/eq.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/neq.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/gte.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/lte.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/cmp.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/coerce.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/comparator.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/range.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/valid.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/outside.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/subset.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/index.d.ts","./src/enum.ts","./src/constants.ts","../node_modules/.pnpm/cookie@1.1.1/node_modules/cookie/dist/index.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/types.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/general/decrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/general/encrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/compact/verify.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/flattened/verify.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/general/verify.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/verify.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/decrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/produce.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/compact/sign.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/flattened/sign.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/general/sign.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/sign.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/encrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwk/thumbprint.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwk/embedded.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwks/local.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwks/remote.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/unsecured.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/key/export.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/key/import.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/util/decode_protected_header.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/util/decode_jwt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/util/errors.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/key/generate_key_pair.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/key/generate_secret.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/util/base64url.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/util/runtime.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/index.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/identifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/check-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/default-value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/generated-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/schemable-identifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/insert-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/delete-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/update-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/type-error.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/merge-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/type-utils.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/references-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/column-definition-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/add-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/rename-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/raw-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/alter-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/foreign-key-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/primary-key-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/add-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/modify-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/add-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/rename-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/alter-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/where-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/create-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/create-schema-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/create-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/value-list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/create-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/from-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/group-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/group-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/having-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/on-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/join-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/limit-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/offset-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/collate-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/order-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/order-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/alias-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/select-all-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/reference-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/simple-reference-expression-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/selection-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/common-table-expression-name-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/common-table-expression-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/with-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/select-modifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/operation-node-source.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/expression/expression.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/explainable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/explain-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/set-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/fetch-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/top-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/select-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/create-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-schema-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/output-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/returning-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/when-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/merge-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/column-update-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/on-conflict-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/on-duplicate-key-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/or-action-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/insert-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/update-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/using-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/delete-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/refresh-materialized-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/query-id.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-compiler/compiled-query.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-compiler/query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/database-connection.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/database-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/dialect-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/kysely-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-executor/query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/compilable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/default-value-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/column-definition-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/data-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/data-type-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/foreign-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-column-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-table-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/select-query-builder-expression.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/binary-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/operator-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/value-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/column-type.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/binary-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/join-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dynamic/dynamic-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/table-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/join-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dynamic/dynamic-reference-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/select-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/collate-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/order-by-item-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/order-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/group-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/where-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/no-result-error.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/having-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/set-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/streamable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/and-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/or-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/parens-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/expression/expression-wrapper.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/order-by-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/select-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/coalesce-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/partition-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/partition-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/over-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/aggregate-function-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/partition-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/over-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/aggregate-function-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/function-module.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/case-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/case-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/json-path-leg-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/json-path-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/json-operator-chain-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/json-reference-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/json-path-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/tuple-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/select-from-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/expression/expression-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/expression-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/reference-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/primary-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/check-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/create-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/create-schema-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/create-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/drop-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/drop-schema-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/drop-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-executor/query-executor-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/raw-builder/raw-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/create-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/drop-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/create-type-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/drop-type-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/refresh-materialized-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/schema.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dynamic/dynamic.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/primitive-value-list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/values-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/insert-values-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/update-set-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/returning-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/returning-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/output-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/update-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/delete-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/cte-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/with-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/delete-from-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/update-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/merge-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/merge-into-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-creator.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/log.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/savepoint-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/provide-controlled-connection.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/kysely.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/raw-builder/sql.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-executor/query-executor-base.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-executor/default-query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-executor/noop-query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/default-insert-value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/unary-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/function-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/tuple-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/matched-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/cast-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/default-connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/single-connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/dummy-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/migration/migrator.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/migration/file-migration-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/infer-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/log-once.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/unary-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/index.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-basic.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-bearer.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/open-api-spec.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/types/swagger-enum.type.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-body.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-consumes.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-cookie.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-default-getter.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-exclude-endpoint.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-exclude-controller.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-extra-models.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-header.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-hide-property.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-link.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-oauth2.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-operation.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/enum-schema-attributes.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-param.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-produces.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/schema-object-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-property.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-query.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-response.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-security.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-use-tags.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/callback-object.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-callbacks.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-extension.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-schema.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/swagger-ui-options.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/swagger-custom-options.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/swagger-document-options.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/document-builder.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/swagger-module.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/type-helpers/intersection-type.helper.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/type-helpers/omit-type.helper.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/type-helpers/partial-type.helper.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/type-helpers/pick-type.helper.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/type-helpers/index.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/utils/get-schema-path.util.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/utils/index.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/index.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/identifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/check-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/default-value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/generated-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/schemable-identifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/insert-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/delete-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/update-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/type-error.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/merge-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/type-utils.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/references-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/column-definition-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/add-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/rename-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/raw-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/alter-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/foreign-key-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/primary-key-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/add-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/modify-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/add-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/rename-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/alter-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/where-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/create-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/create-schema-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/create-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/value-list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/create-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/from-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/group-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/group-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/having-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/on-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/join-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/limit-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/offset-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/collate-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/order-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/order-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/alias-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/select-all-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/reference-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/simple-reference-expression-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/selection-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/common-table-expression-name-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/common-table-expression-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/with-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/select-modifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/operation-node-source.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/expression/expression.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/explainable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/explain-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/set-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/fetch-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/top-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/select-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/create-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-schema-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/output-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/returning-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/when-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/merge-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/column-update-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/on-conflict-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/on-duplicate-key-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/or-action-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/insert-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/update-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/using-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/delete-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/refresh-materialized-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/query-id.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-compiler/compiled-query.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-compiler/query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/database-connection.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/database-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/kysely-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-executor/query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/compilable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/default-value-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/column-definition-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/data-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/data-type-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/foreign-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-column-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-table-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-table-drop-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/select-query-builder-expression.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/binary-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/operator-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/value-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/column-type.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/binary-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/join-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dynamic/dynamic-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/table-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/join-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dynamic/dynamic-reference-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/select-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/collate-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/order-by-item-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/order-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/group-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/where-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/no-result-error.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/having-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/set-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/streamable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/and-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/or-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/parens-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/expression/expression-wrapper.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/order-by-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/select-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/coalesce-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/partition-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/partition-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/over-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/aggregate-function-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/partition-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/over-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/aggregate-function-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/function-module.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/case-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/case-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/json-path-leg-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/json-path-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/json-operator-chain-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/json-reference-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/json-path-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/tuple-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/select-from-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/expression/expression-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/expression-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/reference-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/unique-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/primary-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/check-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/create-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/create-schema-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/create-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/drop-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/drop-schema-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/drop-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-executor/query-executor-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/raw-builder/raw-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/create-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/drop-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/create-type-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/drop-type-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/refresh-materialized-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/schema.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dynamic/dynamic.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/primitive-value-list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/values-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/insert-values-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/update-set-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/returning-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/returning-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/output-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/delete-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/cte-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/with-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/delete-from-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/update-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/merge-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/merge-into-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-creator.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/log.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/savepoint-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/provide-controlled-connection.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/kysely.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/raw-builder/sql.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-executor/query-executor-base.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-executor/default-query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-executor/noop-query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/default-insert-value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/unary-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/function-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/tuple-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/matched-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/cast-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/default-connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/single-connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/dummy-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/migration/migrator.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/migration/file-migration-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/camel-case/camel-case-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/infer-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/log-once.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/unary-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/index.d.ts","../node_modules/.pnpm/postgres@3.4.8/node_modules/postgres/types/index.d.ts","../node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/index.d.ts","../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/messages.d.ts","../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/serializer.d.ts","../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/parser.d.ts","../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/index.d.ts","../node_modules/.pnpm/@types+pg@8.20.0/node_modules/@types/pg/lib/type-overrides.d.ts","../node_modules/.pnpm/@types+pg@8.20.0/node_modules/@types/pg/index.d.ts","../node_modules/.pnpm/pg-connection-string@2.12.0/node_modules/pg-connection-string/index.d.ts","../node_modules/.pnpm/@immich+sql-tools@0.3.2/node_modules/@immich/sql-tools/dist/index.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/common.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/array.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/collection.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/date.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/function.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/lang.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/math.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/number.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/object.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/seq.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/string.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/util.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/adapters/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/edge.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/entrypoint.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/extras.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/node.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/settlement-signal.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/injector.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/serialized-graph-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/serialized-graph-json.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/serialized-graph.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/compiler.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/modules-container.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/container.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/instance-links-host.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/abstract-instance-resolver.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/module-ref.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/module.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/instance-wrapper.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/interfaces/exclude-route-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/application-config.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/constants.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/discovery/discovery-module.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/discovery/discovery-service.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/discovery/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/http-adapter-host.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/base-exception-filter.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/context-id-factory.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/exception-filter-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/exceptions-handler.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/router-proxy.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/context-creator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/base-exception-filter-context.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/external-exception-filter.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/external-exceptions-handler.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/external-exception-filter-context.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/guards/constants.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/execution-context-host.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/guards/guards-consumer.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/guards/guards-context-creator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/guards/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/interceptors/interceptors-consumer.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/interceptors/interceptors-context-creator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/interceptors/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/route-paramtypes.enum.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/pipes/params-token-factory.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/pipes/pipes-consumer.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/pipes/pipes-context-creator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/pipes/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/context-utils.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/inquirer/inquirer-constants.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/inquirer/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/interfaces/module-definition.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/interfaces/module-override.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/graph-inspector.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/metadata-scanner.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/scanner.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/instance-loader.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader-options.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/interfaces/external-handler-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/interfaces/params-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/external-context-creator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/initialize-on-preview.allowlist.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/partial-graph.host.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/middleware/route-info-path-extractor.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/middleware/routes-mapper.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/middleware/builder.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/middleware/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/nest-application-context.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/nest-application.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/microservices/nest-microservice-options.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/nest-factory.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/repl/repl.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/repl/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/interfaces/routes.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/request/request-constants.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/request/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/router-module.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/services/reflector.service.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/services/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/index.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/expose-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/exclude-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/transform-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/type-discriminator-descriptor.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/type-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/exclude-metadata.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/expose-metadata.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/enums/transformation-type.enum.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/enums/index.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/target-map.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/class-transformer-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/transform-fn-params.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/transform-metadata.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/type-metadata.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/class-constructor.type.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/type-help-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/index.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/ClassTransformer.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/exclude.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/expose.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform-instance-to-instance.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform-instance-to-plain.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform-plain-to-instance.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/type.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/index.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/index.d.ts","../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/commons.d.ts","../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/encodePacket.d.ts","../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/decodePacket.d.ts","../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/index.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/parser-v3/index.d.ts","../node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/transport.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/socket.d.ts","../node_modules/.pnpm/@types+cors@2.8.19/node_modules/@types/cors/index.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/contrib/types.cookie.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/server.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/transports/polling.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/transports/websocket.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/transports/webtransport.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/transports/index.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/userver.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/engine.io.d.ts","../node_modules/.pnpm/@socket.io+component-emitter@3.1.2/node_modules/@socket.io/component-emitter/lib/cjs/index.d.ts","../node_modules/.pnpm/socket.io-parser@4.2.5/node_modules/socket.io-parser/build/cjs/index.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/typed-events.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/client.d.ts","../node_modules/.pnpm/socket.io-adapter@2.5.6/node_modules/socket.io-adapter/dist/in-memory-adapter.d.ts","../node_modules/.pnpm/socket.io-adapter@2.5.6/node_modules/socket.io-adapter/dist/cluster-adapter.d.ts","../node_modules/.pnpm/socket.io-adapter@2.5.6/node_modules/socket.io-adapter/dist/index.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/socket-types.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/broadcast-operator.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/socket.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/namespace.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/index.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/enums/cron-expression.enum.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/enums/index.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/errors.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/constants.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/job.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/types/utils.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/types/cron.types.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/time.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/index.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/decorators/cron.decorator.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/decorators/interval.decorator.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/decorators/timeout.decorator.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/interfaces/schedule-module-options.interface.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/schedule.module.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/scheduler.registry.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/index.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/index.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/ValidationError.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/ValidatorOptions.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation-schema/ValidationSchema.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/container.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/ValidationArguments.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/ValidationOptions.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/Allow.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsDefined.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsOptional.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/Validate.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/ValidatorConstraintInterface.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/ValidateBy.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/ValidateIf.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/ValidateNested.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/ValidatePromise.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsLatLong.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsLatitude.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsLongitude.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/Equals.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/NotEquals.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsEmpty.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsNotEmpty.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsIn.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsNotIn.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/number/IsDivisibleBy.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/number/IsPositive.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/number/IsNegative.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/number/Max.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/number/Min.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/date/MinDate.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/date/MaxDate.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/Contains.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/NotContains.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isBoolean.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isEmail.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isFQDN.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isIBAN.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isISO31661Alpha2.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isISO4217.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isISO6391.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isTaxID.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isURL.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/index.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsAlpha.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsAlphanumeric.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsDecimal.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsAscii.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBase64.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsByteLength.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsCreditCard.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsCurrency.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsEmail.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsFQDN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsFullWidth.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsHalfWidth.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsVariableWidth.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsHexColor.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsHexadecimal.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMacAddress.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsIP.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsPort.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISBN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISIN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISO8601.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsJSON.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsJWT.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsLowercase.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMobilePhone.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISO31661Alpha2.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISO31661Alpha3.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISO31661Numeric.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMongoId.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMultibyte.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsSurrogatePair.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsUrl.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsUUID.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsFirebasePushId.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsUppercase.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/Length.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/MaxLength.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/MinLength.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/Matches.d.ts","../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/types.d.cts","../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/max/index.d.cts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsPhoneNumber.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMilitaryTime.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsHash.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISSN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsDateString.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBooleanString.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsNumberString.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBase32.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBIC.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBtcAddress.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsDataURI.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsEAN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsEthereumAddress.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsHSL.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsIBAN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsIdentityCard.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISRC.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsLocale.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMagnetURI.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMimeType.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsOctal.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsPassportNumber.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsPostalCode.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsRFC3339.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsRgbColor.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsSemVer.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsStrongPassword.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsTimeZone.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBase58.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/is-tax-id.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/is-iso4217-currency-code.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/isISO6391.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsBoolean.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsDate.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsNumber.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsEnum.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsInt.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsString.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsArray.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsObject.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayContains.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayNotContains.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayNotEmpty.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayMinSize.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayMaxSize.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayUnique.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/object/IsNotEmptyObject.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/object/IsInstance.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/decorators.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/ValidationTypes.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/Validator.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/register-decorator.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/metadata/ValidationMetadataArgs.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/metadata/ValidationMetadata.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/metadata/ConstraintMetadata.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/metadata/MetadataStorage.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/index.d.ts","../node_modules/.pnpm/sanitize-filename@1.6.4/node_modules/sanitize-filename/index.d.ts","./src/validation.ts","./src/dtos/asset-ids.response.dto.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/helpers/postgres.d.ts","../node_modules/.pnpm/nestjs-kysely@3.1.2_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15_26157e33908bb534807be2ebb8756d45/node_modules/nestjs-kysely/dist/index.d.cts","./src/dtos/auth.dto.ts","./src/schema/enums.ts","./src/schema/functions.ts","./src/schema/tables/user.table.ts","./src/schema/tables/library.table.ts","./src/schema/tables/stack.table.ts","../node_modules/.pnpm/kysely-postgres-js@3.0.0_kysely@0.28.14_postgres@3.4.8/node_modules/kysely-postgres-js/dist/index.d.cts","./src/dtos/editing.dto.ts","../node_modules/.pnpm/@types+async-lock@1.4.2/node_modules/@types/async-lock/index.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/bull.messages.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/bull.tokens.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/errors/missing-shared-bull-config.error.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/errors/index.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/helpers/create-conditional-dep-holder.helper.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/helpers/index.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/utils/get-queue-token.util.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/utils/index.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/async-fifo-queue.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/backoff-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/keep-jobs.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/parent-options.d.ts","../node_modules/.pnpm/cron-parser@4.9.0/node_modules/cron-parser/types/common.d.ts","../node_modules/.pnpm/cron-parser@4.9.0/node_modules/cron-parser/types/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/repeat-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/base-job-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/deduplication-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/job-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/job-progress.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/parent.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/job-json.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/job-json-sandbox.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/minimal-job.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/backoff-strategy.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/backoffs.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/repeat-strategy.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/advanced-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/parent-command.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/child-message.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/types.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/Command.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/ScanStream.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/utils/RedisCommander.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/transaction.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/utils/Commander.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/AbstractConnector.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/ConnectorConstructor.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/SentinelConnector/types.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/SentinelConnector/index.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/StandaloneConnector.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/redis/RedisOptions.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/cluster/util.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/cluster/ClusterOptions.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/cluster/index.d.ts","../node_modules/.pnpm/denque@2.1.0/node_modules/denque/index.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/SubscriptionSet.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/DataHandler.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/Redis.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/Pipeline.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/connection.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/database-type.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/finished-status.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/job-scheduler-template-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/job-type.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/redis-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/child-command.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/error-code.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/metrics-time.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/telemetry-attributes.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/telemetry.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/queue-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/flow-job.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/ioredis-events.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/job-scheduler-json.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/lock-manager-worker-context.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/metrics-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/metrics.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue-keys.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/script-queue-context.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/minimal-queue.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/parent-message.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/queue-meta.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/rate-limiter-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/redis-streams.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/repeatable-job.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/repeatable-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/retry-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/sandboxed-job.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/sandboxed-job-processor.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/sandboxed-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/worker-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/receiver.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/child.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/child-pool.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/child-processor.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/delayed-error.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/rate-limit-error.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/unrecoverable-error.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/waiting-children-error.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/waiting-error.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/scripts.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/redis-connection.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue-base.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue-events.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/job.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/flow-producer.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/job-scheduler.d.ts","../node_modules/.pnpm/node-abort-controller@3.1.1/node_modules/node-abort-controller/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/lock-manager.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue-events-producer.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue-getters.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/repeat.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/sandbox.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/processor.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/worker.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/utils/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/utils/create-scripts.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/bull.types.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/bull-processor.interfaces.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/partial-this-parameter.type.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/register-flow-options.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/register-queue-options.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/shared-bull-config.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/bull.module.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/inject-flow-producer.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/inject-queue.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/on-queue-event.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/on-worker-event.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/worker-options.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/processor.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/queue-event-options.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/queue-events-listener.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/bull-metadata.accessor.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/hosts/queue-events-host.class.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/hosts/worker-host.class.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/hosts/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/instrument/processor-decorator.service.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/queue-options.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/bull.explorer.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/bull.registrar.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/instrument/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/get-flow-producer-token.util.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/get-flow-producer-options-token.util.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/get-queue-options-token.util.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/get-shared-config-token.util.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/index.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/types.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/Command.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/ScanStream.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/utils/RedisCommander.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/transaction.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/utils/Commander.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/AbstractConnector.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/ConnectorConstructor.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/SentinelConnector/types.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/SentinelConnector/index.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/StandaloneConnector.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/redis/RedisOptions.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/cluster/util.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/cluster/ClusterOptions.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/cluster/index.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/SubscriptionSet.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/DataHandler.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/Redis.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/Pipeline.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/index.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/types/terminal.type.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/types/recursive-key-of.type.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/types/type-if-type.type.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls.service.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/plugin/cls-plugin.interface.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls.options.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-initializers/cls.guard.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-initializers/cls.interceptor.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-initializers/cls.middleware.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-initializers/use-cls.decorator.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-initializers/utils/context-cls-store-map.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-service-manager.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls.constants.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/proxy-provider/proxy-provider.interfaces.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-module/cls.module.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/inject-cls.decorator.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/proxy-provider/injectable-proxy.decorator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/errors/exceptions/runtime.exception.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/errors/exceptions/unknown-dependencies.exception.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/proxy-provider/proxy-provider.exceptions.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/utils/copy-method-metadata.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/internal/symbol.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/types.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/utils.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/common/Exception.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/common/Time.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/common/Attributes.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context/types.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context/context.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/context.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag/types.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag/consoleLogger.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/diag.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/ObservableResult.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/Metric.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/Meter.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/NoopMeter.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/MeterProvider.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/metrics.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/propagation/TextMapPropagator.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/context-helpers.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/propagation.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/attributes.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/trace_state.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/span_context.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/link.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/status.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/span.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/span_kind.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/SpanOptions.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/tracer.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/tracer_options.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/tracer_provider.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/ProxyTracerProvider.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/SamplingResult.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/Sampler.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/trace_flags.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/internal/utils.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/spancontext-utils.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/invalid-span-constants.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/context-utils.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/trace.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context-api.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag-api.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics-api.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/propagation-api.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace-api.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/index.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/interfaces/opentelemetry-options.interface.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/interfaces/metric-options.interface.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/interfaces/index.d.ts","./src/dtos/env.dto.ts","./src/utils/set.ts","./src/repositories/config.repository.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/services/utils/is-log-level-enabled.util.d.ts","./src/repositories/logging.repository.ts","./src/repositories/database.repository.ts","./src/schema/tables/asset-exif.table.ts","./src/utils/pagination.ts","./src/repositories/search.repository.ts","./src/utils/database.ts","./src/schema/tables/asset.table.ts","./src/schema/tables/album.table.ts","./src/schema/tables/album-asset.table.ts","./src/schema/tables/activity.table.ts","./src/schema/tables/album-asset-audit.table.ts","./src/schema/tables/album-audit.table.ts","./src/schema/tables/album-user-audit.table.ts","./src/schema/tables/album-user.table.ts","./src/schema/tables/api-key.table.ts","./src/schema/tables/asset-audit.table.ts","./src/schema/tables/asset-edit-audit.table.ts","./src/schema/tables/asset-edit.table.ts","./src/schema/tables/asset-face-audit.table.ts","./src/schema/tables/person.table.ts","./src/schema/tables/asset-face.table.ts","./src/schema/tables/asset-file.table.ts","./src/schema/tables/asset-job-status.table.ts","./src/schema/tables/asset-metadata-audit.table.ts","./src/schema/tables/asset-metadata.table.ts","./src/schema/tables/asset-ocr.table.ts","./src/schema/tables/audit.table.ts","./src/schema/tables/face-search.table.ts","./src/schema/tables/geodata-places.table.ts","./src/schema/tables/memory.table.ts","./src/schema/tables/memory-asset-audit.table.ts","./src/schema/tables/memory-asset.table.ts","./src/schema/tables/memory-audit.table.ts","./src/schema/tables/move.table.ts","./src/schema/tables/natural-earth-countries.table.ts","./src/schema/tables/notification.table.ts","./src/schema/tables/ocr-search.table.ts","./src/schema/tables/partner-audit.table.ts","./src/schema/tables/partner.table.ts","./src/schema/tables/person-audit.table.ts","./src/types/plugin-schema.types.ts","./src/schema/tables/plugin.table.ts","./src/schema/tables/session.table.ts","./src/schema/tables/shared-link.table.ts","./src/schema/tables/shared-link-asset.table.ts","./src/schema/tables/smart-search.table.ts","./src/schema/tables/stack-audit.table.ts","./src/schema/tables/sync-checkpoint.table.ts","./src/schema/tables/system-metadata.table.ts","./src/schema/tables/tag.table.ts","./src/schema/tables/tag-asset.table.ts","./src/schema/tables/tag-closure.table.ts","./src/schema/tables/user-audit.table.ts","./src/schema/tables/user-metadata-audit.table.ts","./src/schema/tables/user-metadata.table.ts","./src/schema/tables/version-history.table.ts","./src/schema/tables/workflow.table.ts","./src/schema/index.ts","../node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/lib/constants.d.ts","../node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/lib/parse.d.ts","../node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/lib/scan.d.ts","../node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/lib/picomatch.d.ts","../node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/index.d.ts","./src/dtos/sync.dto.ts","./src/utils/misc.ts","./src/repositories/asset.repository.ts","./src/dtos/asset.dto.ts","./src/dtos/asset-media.dto.ts","./src/dtos/maintenance.dto.ts","./src/types.ts","./src/config.ts","./src/repositories/event.repository.ts","./src/decorators.ts","./src/utils/date.ts","./src/dtos/exif.dto.ts","./src/dtos/ocr.dto.ts","../node_modules/.pnpm/transformation-matrix@3.1.0/node_modules/transformation-matrix/src/transformation-matrix.d.ts","./src/utils/transform.ts","./src/dtos/person.dto.ts","./src/dtos/tag.dto.ts","./src/dtos/user.dto.ts","../node_modules/.pnpm/oauth4webapi@3.8.5/node_modules/oauth4webapi/build/index.d.ts","../node_modules/.pnpm/openid-client@6.8.2/node_modules/openid-client/build/index.d.ts","./src/repositories/oauth.repository.ts","./src/repositories/access.repository.ts","./src/repositories/activity.repository.ts","./src/repositories/album-user.repository.ts","./src/dtos/album.dto.ts","./src/repositories/album.repository.ts","./src/repositories/api-key.repository.ts","../node_modules/.pnpm/@socket.io+redis-adapter@8.3.0_socket.io-adapter@2.5.6/node_modules/@socket.io/redis-adapter/dist/sharded-adapter.d.ts","../node_modules/.pnpm/@socket.io+redis-adapter@8.3.0_socket.io-adapter@2.5.6/node_modules/@socket.io/redis-adapter/dist/index.d.ts","./src/repositories/app.repository.ts","./src/repositories/asset-edit.repository.ts","./src/utils/mime-types.ts","./src/repositories/asset-job.repository.ts","./src/repositories/audit.repository.ts","./src/repositories/cron.repository.ts","../node_modules/.pnpm/@types+bcrypt@6.0.0/node_modules/@types/bcrypt/index.d.ts","../node_modules/.pnpm/@types+ms@2.1.0/node_modules/@types/ms/index.d.ts","../node_modules/.pnpm/@types+jsonwebtoken@9.0.10/node_modules/@types/jsonwebtoken/index.d.ts","./src/repositories/crypto.repository.ts","./src/repositories/download.repository.ts","./src/repositories/duplicate.repository.ts","../node_modules/.pnpm/prettier@3.8.1/node_modules/prettier/doc.d.ts","../node_modules/.pnpm/prettier@3.8.1/node_modules/prettier/index.d.ts","../node_modules/.pnpm/@react-email+render@1.4.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@react-email/render/dist/node/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/dkim/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/xoauth2/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/mailer/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/mime-node/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/shared/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/json-transport/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/ses-transport/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/stream-transport/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/index.d.ts","../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/global.d.ts","../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/index.d.ts","../node_modules/.pnpm/@react-email+body@0.1.0_react@19.2.4/node_modules/@react-email/body/dist/index.d.ts","../node_modules/.pnpm/@react-email+button@0.2.0_react@19.2.4/node_modules/@react-email/button/dist/index.d.ts","../node_modules/.pnpm/@types+prismjs@1.26.5/node_modules/@types/prismjs/index.d.ts","../node_modules/.pnpm/@react-email+code-block@0.1.0_react@19.2.4/node_modules/@react-email/code-block/dist/index.d.ts","../node_modules/.pnpm/@react-email+code-inline@0.0.5_react@19.2.4/node_modules/@react-email/code-inline/dist/index.d.ts","../node_modules/.pnpm/@react-email+column@0.0.13_react@19.2.4/node_modules/@react-email/column/dist/index.d.ts","../node_modules/.pnpm/@react-email+container@0.0.15_react@19.2.4/node_modules/@react-email/container/dist/index.d.ts","../node_modules/.pnpm/@react-email+font@0.0.9_react@19.2.4/node_modules/@react-email/font/dist/index.d.ts","../node_modules/.pnpm/@react-email+head@0.0.12_react@19.2.4/node_modules/@react-email/head/dist/index.d.ts","../node_modules/.pnpm/@react-email+heading@0.0.15_react@19.2.4/node_modules/@react-email/heading/dist/index.d.ts","../node_modules/.pnpm/@react-email+hr@0.0.11_react@19.2.4/node_modules/@react-email/hr/dist/index.d.ts","../node_modules/.pnpm/@react-email+html@0.0.11_react@19.2.4/node_modules/@react-email/html/dist/index.d.ts","../node_modules/.pnpm/@react-email+img@0.0.11_react@19.2.4/node_modules/@react-email/img/dist/index.d.ts","../node_modules/.pnpm/@react-email+link@0.0.12_react@19.2.4/node_modules/@react-email/link/dist/index.d.ts","../node_modules/.pnpm/@react-email+markdown@0.0.16_react@19.2.4/node_modules/@react-email/markdown/dist/index.d.ts","../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/jsx-runtime.d.ts","../node_modules/.pnpm/@react-email+preview@0.0.13_react@19.2.4/node_modules/@react-email/preview/dist/index.d.ts","../node_modules/.pnpm/@react-email+row@0.0.12_react@19.2.4/node_modules/@react-email/row/dist/index.d.ts","../node_modules/.pnpm/@react-email+section@0.0.16_react@19.2.4/node_modules/@react-email/section/dist/index.d.ts","../node_modules/.pnpm/source-map-js@1.2.1/node_modules/source-map-js/source-map.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/previous-map.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/input.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/css-syntax-error.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/declaration.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/root.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/warning.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/lazy-result.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/no-work-result.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/processor.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/result.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/document.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/rule.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/node.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/comment.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/container.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/at-rule.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/list.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/postcss.d.ts","../node_modules/.pnpm/@react-email+tailwind@1.2.2_react@19.2.4/node_modules/@react-email/tailwind/dist/tailwindcss/generated/corePluginList.d.ts","../node_modules/.pnpm/@react-email+tailwind@1.2.2_react@19.2.4/node_modules/@react-email/tailwind/dist/tailwindcss/generated/colors.d.ts","../node_modules/.pnpm/@react-email+tailwind@1.2.2_react@19.2.4/node_modules/@react-email/tailwind/dist/tailwindcss/config.d.ts","../node_modules/.pnpm/@react-email+tailwind@1.2.2_react@19.2.4/node_modules/@react-email/tailwind/dist/tailwindcss/index.d.ts","../node_modules/.pnpm/@react-email+tailwind@1.2.2_react@19.2.4/node_modules/@react-email/tailwind/dist/index.d.ts","../node_modules/.pnpm/@react-email+text@0.1.5_react@19.2.4/node_modules/@react-email/text/dist/index.d.ts","../node_modules/.pnpm/@react-email+components@0.5.7_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@react-email/components/dist/index.d.ts","./src/emails/components/button.component.tsx","./src/emails/components/footer.template.tsx","./src/emails/components/immich.layout.tsx","./src/utils/replace-template-tags.ts","./src/emails/album-invite.email.tsx","./src/emails/album-update.email.tsx","./src/emails/test.email.tsx","./src/emails/welcome.email.tsx","./src/repositories/email.repository.ts","./src/dtos/queue.dto.ts","./src/repositories/job.repository.ts","./src/dtos/library.dto.ts","./src/repositories/library.repository.ts","./src/dtos/model-config.dto.ts","./src/repositories/machine-learning.repository.ts","../node_modules/.pnpm/i18n-iso-countries@7.14.0/node_modules/i18n-iso-countries/index.d.ts","./src/repositories/system-metadata.repository.ts","./src/repositories/map.repository.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Args.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Logger.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchClusterOptions.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchProcessOptions.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/InternalBatchProcessOptions.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/WhyNotHealthy.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/HealthCheckStrategy.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Parser.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Task.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/ProcessHealthMonitor.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchProcess.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchClusterEmitter.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchClusterStats.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/ChildProcessFactory.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/CombinedBatchProcessOptions.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Deferred.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/FindFlushThresholds.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Pids.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchCluster.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Maybe.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/GeoTz.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/BinaryField.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ContainerDirectoryItem.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifDate.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifDateTime.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifTime.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifToolTask.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ErrorsAndWarnings.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/StrEnum.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifToolVendoredTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/GeolocationTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ICCProfileTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ImageDataHashTag.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/IPTCApplicationRecordTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/MWGTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ResourceEvent.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Struct.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Version.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Tags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifToolOptions.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/BinaryExtractionTask.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/PreviewTag.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/JSON.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/RawTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ReadRawTask.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ReadTask.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Defined.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ShortcutTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/WriteTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/WriteTask.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/AsyncRetry.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/CapturedAtTagNames.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Omit.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/DefaultExifToolOptions.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/DefaultExiftoolArgs.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/DefaultMaxProcs.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExiftoolPath.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Lazy.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Settings.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/TagDescriptions.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Timezones.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifTool.d.ts","../node_modules/.pnpm/@types+fluent-ffmpeg@2.1.28/node_modules/@types/fluent-ffmpeg/index.d.ts","../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/index.d.ts","../node_modules/.pnpm/thumbhash@0.1.1/node_modules/thumbhash/thumbhash.d.ts","./src/repositories/media.repository.ts","./src/dtos/memory.dto.ts","./src/repositories/memory.repository.ts","../node_modules/.pnpm/geo-tz@8.1.6/node_modules/geo-tz/dist/find.d.ts","../node_modules/.pnpm/geo-tz@8.1.6/node_modules/geo-tz/dist/find-1970.d.ts","./src/repositories/metadata.repository.ts","./src/repositories/move.repository.ts","./src/dtos/notification.dto.ts","./src/repositories/notification.repository.ts","./src/repositories/ocr.repository.ts","./src/repositories/partner.repository.ts","./src/repositories/person.repository.ts","./src/dtos/plugin-manifest.dto.ts","./src/repositories/plugin.repository.ts","./src/repositories/process.repository.ts","./src/repositories/server-info.repository.ts","./src/repositories/session.repository.ts","./src/repositories/shared-link-asset.repository.ts","./src/repositories/shared-link.repository.ts","./src/repositories/stack.repository.ts","../node_modules/.pnpm/@types+readdir-glob@1.1.5/node_modules/@types/readdir-glob/index.d.ts","../node_modules/.pnpm/@types+archiver@7.0.0/node_modules/@types/archiver/index.d.ts","../node_modules/.pnpm/readdirp@4.1.2/node_modules/readdirp/index.d.ts","../node_modules/.pnpm/chokidar@4.0.3/node_modules/chokidar/handler.d.ts","../node_modules/.pnpm/chokidar@4.0.3/node_modules/chokidar/index.d.ts","../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/types/index.d.ts","../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts","../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/settings.d.ts","../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/async.d.ts","../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/index.d.ts","../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/types/index.d.ts","../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts","../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/settings.d.ts","../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/async.d.ts","../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/index.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/types/index.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/settings.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/reader.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/async.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/async.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/index.d.ts","../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/types/index.d.ts","../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/settings.d.ts","../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/managers/tasks.d.ts","../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/index.d.ts","./src/repositories/storage.repository.ts","./src/repositories/sync-checkpoint.repository.ts","./src/repositories/sync.repository.ts","./src/repositories/tag.repository.ts","../node_modules/.pnpm/@opentelemetry+context-async-hooks@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/context-async-hooks/build/src/AbstractAsyncHooksContextManager.d.ts","../node_modules/.pnpm/@opentelemetry+context-async-hooks@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/context-async-hooks/build/src/AsyncHooksContextManager.d.ts","../node_modules/.pnpm/@opentelemetry+context-async-hooks@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/context-async-hooks/build/src/AsyncLocalStorageContextManager.d.ts","../node_modules/.pnpm/@opentelemetry+context-async-hooks@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/context-async-hooks/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationTemporality.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/baggage/propagation/W3CBaggagePropagator.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/anchored-clock.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/attributes.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/types.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/global-error-handler.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/logging-error-handler.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/time.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/timer-util.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/ExportResult.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/baggage/utils.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/platform/node/environment.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/globalThis.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/platform/node/sdk-info.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/platform/node/index.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/platform/index.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/propagation/composite.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/trace/W3CTraceContextPropagator.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/trace/rpc-metadata.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/trace/suppress-tracing.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/trace/TraceState.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/utils/merge.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/utils/timeout.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/utils/url.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/utils/callback.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/utils/configuration.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/internal/exporter.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/config.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/Resource.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detect-resources.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/EnvDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/HostDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/OSDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/ProcessDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/ServiceInstanceIdDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/index.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/index.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/NoopDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/index.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/ResourceImpl.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/default-service-name.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricData.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/utils.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/AttributesProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/Predicate.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/InstrumentSelector.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/MeterSelector.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Drop.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Histogram.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/Buckets.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/ExponentialHistogram.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/LastValue.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Sum.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/Aggregation.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/AggregationOption.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/View.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/InstrumentDescriptor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationSelector.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricProducer.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/CardinalitySelector.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReader.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/InMemoryMetricExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/ConsoleMetricExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/MeterProvider.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+exporter-prometheus@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-prometheus/build/src/export/types.d.ts","../node_modules/.pnpm/@opentelemetry+exporter-prometheus@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-prometheus/build/src/PrometheusExporter.d.ts","../node_modules/.pnpm/@opentelemetry+exporter-prometheus@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-prometheus/build/src/PrometheusSerializer.d.ts","../node_modules/.pnpm/@opentelemetry+exporter-prometheus@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-prometheus/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/types/AnyValue.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/types/LogRecord.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/types/Logger.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/types/LoggerOptions.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/types/LoggerProvider.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/NoopLogger.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/api/logs.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/types_internal.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/autoLoader.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/shimmer.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/instrumentation.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/platform/node/instrumentation.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/platform/node/normalize.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/platform/node/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/platform/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/instrumentationNodeModuleDefinition.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/instrumentationNodeModuleFile.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/utils.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/semconvStability.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-http@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-http/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-http@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-http/build/src/http.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-http@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-http/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-ioredis@0.61.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-ioredis/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-ioredis@0.61.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-ioredis/build/src/instrumentation.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-ioredis@0.61.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-ioredis/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-nestjs-core@0.59.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/instrumentation.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-nestjs-core@0.59.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/enums/AttributeNames.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-nestjs-core@0.59.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/index.d.ts","../node_modules/.pnpm/@types+pg@8.15.6/node_modules/@types/pg/lib/type-overrides.d.ts","../node_modules/.pnpm/@types+pg@8.15.6/node_modules/@types/pg/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-pg@0.65.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-pg/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-pg@0.65.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-pg/build/src/instrumentation.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-pg@0.65.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-pg/build/src/enums/AttributeNames.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-pg@0.65.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-pg/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/SdkLogRecord.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/LogRecordProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/LoggerProvider.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/ReadableLogRecord.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/LogRecordExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/ConsoleLogRecordExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/SimpleLogRecordProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/InMemoryLogRecordExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/BatchLogRecordProcessorBase.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/platform/node/export/BatchLogRecordProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/platform/node/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/platform/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/config/LoggerConfigurators.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/IdGenerator.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/Sampler.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/TimedEvent.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/ReadableSpan.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/Span.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/SpanProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/BasicTracerProvider.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/SpanExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/BatchSpanProcessorBase.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/export/BatchSpanProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/RandomIdGenerator.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/ConsoleSpanExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/InMemorySpanExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/SimpleSpanProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/NoopSpanProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/AlwaysOffSampler.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/AlwaysOnSampler.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/ParentBasedSampler.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/TraceIdRatioBasedSampler.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-node@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-node/build/src/config.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-node@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-node/build/src/NodeTracerProvider.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-node@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-node/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-node@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-node/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-node@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-node/build/src/sdk.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/commonModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/tracerProviderModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/loggerProviderModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/resourceModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/meterProviderModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/configModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/IConfigFactory.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/ConfigFactory.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-node@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-node/build/src/start.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-node@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-node/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/trace/SemanticAttributes.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/trace/index.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/resource/SemanticResourceAttributes.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/resource/index.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/stable_attributes.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/stable_metrics.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/stable_events.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/index.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/opentelemetry.module.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/tracing/decorators/span.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/tracing/trace.service.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/metrics/metric.service.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/metrics/injector.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/metrics/decorators/common.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/metrics/decorators/param.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/metrics/decorators/index.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/opentelemetry.constants.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/index.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/opentelemetry.utils.d.ts","./src/repositories/telemetry.repository.ts","./src/repositories/trash.repository.ts","./src/repositories/user.repository.ts","./src/repositories/version-history.repository.ts","./src/repositories/view-repository.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/adapters/ws-adapter.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/adapters/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/connected-socket.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/gateway-server.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/message-body.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/gateway-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/hooks/on-gateway-connection.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/hooks/on-gateway-disconnect.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/hooks/on-gateway-init.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/hooks/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/server-and-event-streams-host.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/web-socket-server.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/ws-response.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/socket-gateway.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/subscribe-message.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/ack.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/errors/ws-exception.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/errors/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/exceptions/base-ws-exception-filter.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/exceptions/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/nest-gateway.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/gateway-metadata-explorer.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/index.d.ts","./src/dtos/system-config.dto.ts","./src/dtos/server.dto.ts","./src/repositories/websocket.repository.ts","./src/repositories/workflow.repository.ts","./src/utils/access.ts","../node_modules/.pnpm/@types+js-yaml@4.0.9/node_modules/@types/js-yaml/index.d.ts","./src/utils/config.ts","./src/services/base.service.ts","./src/utils/bytes.ts","../node_modules/.pnpm/ua-parser-js@2.0.9/node_modules/ua-parser-js/src/enums/ua-parser-enums.d.ts","../node_modules/.pnpm/ua-parser-js@2.0.9/node_modules/ua-parser-js/src/main/ua-parser.d.ts","./src/utils/request.ts","./src/services/auth.service.ts","./src/middleware/auth.guard.ts","./src/utils/asset.util.ts","./src/dtos/asset-response.dto.ts","./src/database.ts","./src/cores/storage.core.ts","./src/maintenance/maintenance-health.repository.ts","./src/maintenance/maintenance-websocket.repository.ts","../node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/commonjs/Tokenizer.d.ts","../node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/commonjs/Parser.d.ts","../node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/index.d.ts","../node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/node.d.ts","../node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/index.d.ts","../node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/index.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/stringify.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/traversal.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/manipulation.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/querying.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/legacy.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/helpers.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/feeds.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/index.d.ts","../node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/commonjs/index.d.ts","../node_modules/.pnpm/@types+sanitize-html@2.16.1/node_modules/@types/sanitize-html/index.d.ts","./src/dtos/shared-link.dto.ts","./src/services/shared-link.service.ts","./src/services/version.service.ts","./src/services/api.service.ts","./src/dtos/database-backup.dto.ts","./src/utils/database-backups.ts","./src/utils/file.ts","./src/services/database-backup.service.ts","./src/dtos/license.dto.ts","./src/services/server.service.ts","./src/utils/maintenance.ts","./src/maintenance/maintenance-worker.service.ts","../node_modules/.pnpm/@nestjs+platform-socket.io@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class_677923e29882da76fecabd68445c1688/node_modules/@nestjs/platform-socket.io/adapters/io-adapter.d.ts","../node_modules/.pnpm/@nestjs+platform-socket.io@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class_677923e29882da76fecabd68445c1688/node_modules/@nestjs/platform-socket.io/adapters/index.d.ts","../node_modules/.pnpm/@nestjs+platform-socket.io@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class_677923e29882da76fecabd68445c1688/node_modules/@nestjs/platform-socket.io/index.d.ts","./src/middleware/websocket.adapter.ts","./src/app.common.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/cli-utility.service.d.ts","../node_modules/.pnpm/@golevelup+nestjs-discovery@5.0.0_@nestjs+common@11.1.17_class-transformer@0.5.1_class-_b64f441b37f14204d37cbe5294c8e242/node_modules/@golevelup/nestjs-discovery/lib/discovery.interfaces.d.ts","../node_modules/.pnpm/@golevelup+nestjs-discovery@5.0.0_@nestjs+common@11.1.17_class-transformer@0.5.1_class-_b64f441b37f14204d37cbe5294c8e242/node_modules/@golevelup/nestjs-discovery/lib/discovery.module.d.ts","../node_modules/.pnpm/@golevelup+nestjs-discovery@5.0.0_@nestjs+common@11.1.17_class-transformer@0.5.1_class-_b64f441b37f14204d37cbe5294c8e242/node_modules/@golevelup/nestjs-discovery/lib/discovery.service.d.ts","../node_modules/.pnpm/@golevelup+nestjs-discovery@5.0.0_@nestjs+common@11.1.17_class-transformer@0.5.1_class-_b64f441b37f14204d37cbe5294c8e242/node_modules/@golevelup/nestjs-discovery/lib/index.d.ts","../node_modules/.pnpm/commander@11.1.0/node_modules/commander/typings/index.d.ts","../node_modules/.pnpm/@types+through@0.0.33/node_modules/@types/through/index.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/objects/choice.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/objects/separator.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/objects/choices.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/utils/screen-manager.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/base.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/utils/paginator.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/checkbox.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/confirm.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/editor.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/expand.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/input.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/list.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/number.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/password.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/rawlist.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/ui/baseUI.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/ui/bottom-bar.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/ui/prompt.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/utils/events.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/utils/readline.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/index.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command-runner.interface.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command.decorators.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/completion.factory.interface.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command-factory.interface.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command.factory.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/completion.factory.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command-runner.module.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command-runner.service.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/constants.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/inquirer.service.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/request-module.decorator.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/index.d.ts","./src/services/cli.service.ts","./src/commands/grant-admin.ts","./src/commands/list-users.command.ts","./src/commands/maintenance-mode.ts","./src/commands/media-location.command.ts","./src/commands/oauth-login.ts","./src/commands/password-login.ts","./src/commands/reset-admin-password.command.ts","./src/commands/schema-check.ts","./src/commands/version.command.ts","./src/commands/index.ts","./src/dtos/activity.dto.ts","./src/services/activity.service.ts","./src/controllers/activity.controller.ts","./src/dtos/user-preferences.dto.ts","./src/utils/preferences.ts","./src/services/album.service.ts","./src/controllers/album.controller.ts","./src/dtos/api-key.dto.ts","./src/services/api-key.service.ts","./src/controllers/api-key.controller.ts","./src/utils/object.ts","./src/services/system-config.service.ts","./src/controllers/app.controller.ts","./src/dtos/asset-media-response.dto.ts","./src/services/asset-media.service.ts","./src/middleware/asset-upload.interceptor.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/multer/multer.utils.d.ts","../node_modules/.pnpm/@types+multer@2.1.0/node_modules/@types/multer/index.d.ts","./src/middleware/file-upload.interceptor.ts","./src/controllers/asset-media.controller.ts","./src/services/asset.service.ts","./src/controllers/asset.controller.ts","./src/services/auth-admin.service.ts","./src/controllers/auth-admin.controller.ts","./src/utils/response.ts","./src/controllers/auth.controller.ts","./src/services/maintenance.service.ts","./src/controllers/database-backup.controller.ts","./src/dtos/download.dto.ts","./src/services/download.service.ts","./src/controllers/download.controller.ts","./src/dtos/duplicate.dto.ts","./src/utils/duplicate.ts","./src/services/duplicate.service.ts","./src/controllers/duplicate.controller.ts","./src/services/person.service.ts","./src/controllers/face.controller.ts","./src/dtos/job.dto.ts","./src/dtos/queue-legacy.dto.ts","./src/services/job.service.ts","./src/services/queue.service.ts","./src/controllers/job.controller.ts","./src/services/library.service.ts","./src/controllers/library.controller.ts","./src/controllers/maintenance.controller.ts","./src/dtos/map.dto.ts","./src/services/map.service.ts","./src/controllers/map.controller.ts","./src/services/memory.service.ts","./src/controllers/memory.controller.ts","./src/services/notification-admin.service.ts","./src/controllers/notification-admin.controller.ts","./src/services/notification.service.ts","./src/controllers/notification.controller.ts","./src/controllers/oauth.controller.ts","./src/dtos/partner.dto.ts","./src/services/partner.service.ts","./src/controllers/partner.controller.ts","./src/controllers/person.controller.ts","./src/dtos/plugin.dto.ts","../node_modules/.pnpm/@extism+extism@2.0.0-rc13/node_modules/@extism/extism/dist/cjs/call-context.d.ts","../node_modules/.pnpm/@extism+extism@2.0.0-rc13/node_modules/@extism/extism/dist/cjs/interfaces.d.ts","../node_modules/.pnpm/@extism+extism@2.0.0-rc13/node_modules/@extism/extism/dist/cjs/polyfills/deno-capabilities.d.ts","../node_modules/.pnpm/@extism+extism@2.0.0-rc13/node_modules/@extism/extism/dist/cjs/mod.d.ts","./src/plugins.ts","./src/services/plugin-host.functions.ts","./src/services/plugin.service.ts","./src/controllers/plugin.controller.ts","./src/controllers/queue.controller.ts","./src/dtos/search.dto.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/bi-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/bit-set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/bit-vector.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/bk-tree.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/bloom-filter.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/utils/types.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/circular-buffer.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/default-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/default-weak-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fixed-deque.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fibonacci-heap.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fixed-reverse-heap.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fixed-stack.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fuzzy-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fuzzy-multi-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/hashed-array-tree.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/heap.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/inverted-index.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/kd-tree.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/linked-list.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/lru-cache.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/lru-cache-with-delete.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/lru-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/lru-map-with-delete.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/multi-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/multi-set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/passjoin-index.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/queue.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/sparse-queue-set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/sparse-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/sparse-set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/stack.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/static-disjoint-set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/static-interval-tree.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/suffix-array.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/symspell.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/trie.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/trie-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/vector.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/vp-tree.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/index.d.ts","./src/services/search.service.ts","./src/controllers/search.controller.ts","./src/dtos/system-metadata.dto.ts","./src/services/system-metadata.service.ts","./src/controllers/server.controller.ts","./src/dtos/session.dto.ts","./src/services/session.service.ts","./src/controllers/session.controller.ts","./src/controllers/shared-link.controller.ts","./src/dtos/stack.dto.ts","./src/services/stack.service.ts","./src/controllers/stack.controller.ts","./src/utils/logger.ts","./src/middleware/global-exception.filter.ts","./src/utils/sync.ts","./src/services/sync.service.ts","./src/controllers/sync.controller.ts","../node_modules/.pnpm/handlebars@4.7.9/node_modules/handlebars/types/index.d.ts","./src/services/storage-template.service.ts","./src/controllers/system-config.controller.ts","./src/controllers/system-metadata.controller.ts","./src/utils/tag.ts","./src/services/tag.service.ts","./src/controllers/tag.controller.ts","./src/dtos/bbox.dto.ts","./src/utils/bbox.ts","./src/dtos/time-bucket.dto.ts","./src/services/timeline.service.ts","./src/controllers/timeline.controller.ts","./src/dtos/trash.dto.ts","./src/services/trash.service.ts","./src/controllers/trash.controller.ts","./src/services/user-admin.service.ts","./src/controllers/user-admin.controller.ts","./src/dtos/onboarding.dto.ts","./src/dtos/user-profile.dto.ts","./src/services/user.service.ts","./src/controllers/user.controller.ts","./src/services/view.service.ts","./src/controllers/view.controller.ts","./src/dtos/workflow.dto.ts","./src/services/workflow.service.ts","./src/controllers/workflow.controller.ts","./src/controllers/index.ts","./src/maintenance/maintenance-auth.guard.ts","./src/maintenance/maintenance-worker.controller.ts","./src/middleware/error.interceptor.ts","./src/middleware/logging.interceptor.ts","./src/repositories/index.ts","./src/services/audit.service.ts","./src/services/database.service.ts","./src/utils/editor.ts","./src/utils/media.ts","./src/services/media.service.ts","./src/utils/tasks.ts","./src/services/metadata.service.ts","./src/services/ocr.service.ts","./src/services/smart-info.service.ts","./src/services/storage.service.ts","./src/services/telemetry.service.ts","./src/services/index.ts","./src/utils/fetch.ts","./src/app.module.ts","./src/main.ts","./src/bin/sync-open-api.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/interfaces/mock-factory.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/interfaces/override-by-factory-options.interface.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/interfaces/override-module.interface.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/testing-module.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/testing-module.builder.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/interfaces/override-by.interface.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/test.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/index.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/formatter/Params.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/lexer/regexFactory.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/lexer/token.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/lexer/TokenizerOptions.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/FormatOptions.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/parser/ast.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/formatter/Indentation.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/formatter/Layout.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/formatter/ExpressionFormatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/lexer/Tokenizer.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/dialect.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/bigquery/bigquery.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/clickhouse/clickhouse.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/db2/db2.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/db2i/db2i.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/duckdb/duckdb.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/hive/hive.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/mariadb/mariadb.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/mysql/mysql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/tidb/tidb.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/n1ql/n1ql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/plsql/plsql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/postgresql/postgresql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/redshift/redshift.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/spark/spark.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/sqlite/sqlite.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/sql/sql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/trino/trino.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/transactsql/transactsql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/singlestoredb/singlestoredb.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/snowflake/snowflake.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/allDialects.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/sqlFormatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/expandPhrases.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/validateConfig.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/index.d.ts","./src/bin/sync-sql.ts","./src/emails/components/futo.layout.tsx","./src/emails/license.email.tsx","./src/schema/migrations/1744910873969-InitialMigration.ts","./src/schema/migrations/1744991379464-AddNotificationsTable.ts","./src/schema/migrations/1745244781846-AddUserAvatarColorColumn.ts","./src/schema/migrations/1745902563899-AddAssetVisibilityColumn.ts","./src/schema/migrations/1746636476623-DropExtraIndexes.ts","./src/schema/migrations/1746768490606-AddUserPincode.ts","./src/schema/migrations/1746844028242-AddLockedVisibilityEnum.ts","./src/schema/migrations/1746987967923-AddPinExpiresAtColumn.ts","./src/schema/migrations/1747329504572-AddNewSessionColumns.ts","./src/schema/migrations/1747338664832-SessionRename.ts","./src/schema/migrations/1747664684909-AddAlbumAuditTables.ts","./src/schema/migrations/1749067526135-UserOnboardingDefault.ts","./src/schema/migrations/1750107668827-PartnerCreateId.ts","./src/schema/migrations/1750189909087-AddAlbumUserCreateFields.ts","./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts","./src/schema/migrations/1750676477029-AlbumAssetUpdateId.ts","./src/schema/migrations/1750694237564-AlbumAssetAuditTable.ts","./src/schema/migrations/1750780093818-AddAlbumToAssetDeleteTrigger.ts","./src/schema/migrations/1751035357937-MemorySyncChanges.ts","./src/schema/migrations/1751304834247-StackSyncChanges.ts","./src/schema/migrations/1751924596408-AddOverrides.ts","./src/schema/migrations/1752004072340-UpdateIndexOverrides.ts","./src/schema/migrations/1752152941084-PeopleAuditTable.ts","./src/schema/migrations/1752161055253-RenameGeodataPKConstraint.ts","./src/schema/migrations/1752161055254-AddActivityAssetFk.ts","./src/schema/migrations/1752169992364-AddIsPendingSyncReset.ts","./src/schema/migrations/1752250924342-UserMetadataSync.ts","./src/schema/migrations/1752267649968-StandardizeNames.ts","./src/schema/migrations/1752759108283-ConvertToAbsolutePaths.ts","./src/schema/migrations/1753104909784-AssetFaceUpdateIdAndAuditTable.ts","./src/schema/migrations/1753464178233-RenameApiKeyPermissions.ts","./src/schema/migrations/1753471866748-AddSharedLinkSlug.ts","./src/schema/migrations/1753800911775-ProfileImageCheckpointRemoval.ts","./src/schema/migrations/1754389095885-ResetAlbumAssetSync.ts","./src/schema/migrations/1756318797207-AssetMetadataTables.ts","./src/schema/migrations/1758705774125-CreateAssetOCRTable.ts","./src/schema/migrations/1758705789125-CreateOCRSearchTable.ts","./src/schema/migrations/1758705804128-UpsertOcrAssetJobStatus.ts","./src/schema/migrations/1761078763279-AddAppVersionColumnToSession.ts","./src/schema/migrations/1761755618862-FixColumnNames.ts","./src/schema/migrations/1762297277677-AddPluginAndWorkflowTables.ts","./src/schema/migrations/1764483051488-OCRBigramsForCJK.ts","./src/schema/migrations/1764698859174-SidecarInAssetFile.ts","./src/schema/migrations/1764705680041-ChangeWorkflowTableColumnsName.ts","./src/schema/migrations/1764957138636-AddLockedPropertiesToAssetExif.ts","./src/schema/migrations/1768336661963-AddAssetWidthHeight.ts","./src/schema/migrations/1768336671610-CreateAssetEditTable.ts","./src/schema/migrations/1768336694315-CreateIsVisibleColumns.ts","./src/schema/migrations/1768587436457-AddEditCountToAsset.ts","./src/schema/migrations/1768757482271-SwitchToIsEdited.ts","./src/schema/migrations/1768828334807-AddIsEditedToAssetFile.ts","./src/schema/migrations/1768847456553-AddTagsToExif.ts","./src/schema/migrations/1769105700133-AddAssetEditSequence.ts","./src/schema/migrations/1769441657564-AddIsProgressiveColumn.ts","./src/schema/migrations/1769635093204-DropThumbnailJobStatusColumns.ts","./src/schema/migrations/1771478781948-PeopleSearchIndex.ts","./src/schema/migrations/1771535611395-ConvertRating0ToNull.ts","./src/schema/migrations/1771639515206-AddIsTransparentColumn.ts","./src/schema/migrations/1771873044511-ChangesTokensToBuffers.ts","./src/schema/migrations/1771873813973-AssetEditSync.ts","./src/schema/migrations/1772121424533-AddAssetExifGistEarthcoord.ts","./src/schema/migrations/1772129818245-FixStupidWhiteSpace.ts","./src/schema/migrations/1772609167000-UpdateOpusCodecName.ts","./src/schema/migrations/1773242919341-EncodedVideoAssetFiles.ts","./src/schema/migrations/1773956345315-DuplicateSharedLinkAssets.ts","./src/schema/migrations/1774393726320-AssetFaceSyncReset.ts","./src/schema/migrations/1774548649115-AddChecksumAlgorithm.ts.ts","./src/schema/migrations/1775165531374-AddPersonNameTrigramIndex.ts","./src/workers/api.ts","./src/workers/maintenance.ts","./src/workers/microservices.ts","../node_modules/.pnpm/@vitest+pretty-format@3.2.4/node_modules/@vitest/pretty-format/dist/index.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/types.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/helpers.d.ts","../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/index-8b61d5bc.d.ts","../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/node.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/index.d.ts","../node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/tasks.d-CkscK4of.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/diff.d.ts","../node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/types.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/error.d.ts","../node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/index.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/PropertySymbol.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/enums/BrowserErrorCaptureEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/enums/BrowserNavigationCrossOriginPolicyEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/IEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/EventPhaseEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/Event.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/IEventListenerOptions.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/TEventListenerFunction.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/TEventListenerObject.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/TEventListener.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/IConsole.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/async-task-manager/AsyncTaskManager.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/NodeTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/NodeDocumentPositionEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/NodeList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/mutation-observer/MutationTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/mutation-observer/MutationRecord.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/mutation-observer/IMutationObserverInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/mutation-observer/IMutationListener.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedQuerySelectorAllResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedQuerySelectorResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/query-selector/ISelectorMatch.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedMatchesResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedElementsByTagNameResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedElementByTagNameResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/declaration/property-manager/ICSSStyleDeclarationPropertyValue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/declaration/property-manager/CSSStyleDeclarationPropertyManager.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedComputedStyleResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedElementByIdResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/CSSRuleTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/utilities/CSSParser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/CSSRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSGroupingRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSConditionRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSMediaRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/MediaList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/CSSStyleSheet.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/declaration/CSSStyleDeclaration.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMStringMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/attr/Attr.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-element/HTMLElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-style-element/HTMLStyleElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/element/HTMLCollection.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-input-element/HTMLInputElementSelectionModeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/file/Blob.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/file/File.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-input-element/FileList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-meter-element/HTMLMeterElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-output-element/HTMLOutputElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-progress-element/HTMLProgressElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-option-element/HTMLOptionElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-select-element/HTMLOptionsCollection.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-select-element/HTMLSelectElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-label-element/HTMLLabelElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-data-list-element/HTMLDataListElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-input-element/HTMLInputElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-object-element/HTMLObjectElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/validity-state/ValidityState.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-button-element/HTMLButtonElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-field-set-element/HTMLFieldSetElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-form-element/THTMLFormControlElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-form-element/RadioNodeList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-form-element/HTMLFormControlsCollection.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-form-element/HTMLFormElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/child-node/IChildNode.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/child-node/INonDocumentTypeChildNode.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/character-data/CharacterData.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/text/Text.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-slot-element/HTMLSlotElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/IDOMRectInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMRectReadOnly.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMRect.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/IDOMPointInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMPointReadOnly.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMPoint.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/IDOMMatrixCompatibleObject.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/TDOMMatrixInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/TDOMMatrix2DArray.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/TDOMMatrix3DArray.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/IDOMMatrixJSON.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/DOMMatrixReadOnly.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/DOMMatrix.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGStringList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGMatrix.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGTransformTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGTransform.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGTransformList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedTransformList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-graphics-element/SVGGraphicsElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGRect.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGPoint.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGLengthTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGLength.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAngleTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAngle.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGNumber.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedRect.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGPreserveAspectRatioMeetOrSliceEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGPreserveAspectRatioAlignEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGPreserveAspectRatio.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedPreserveAspectRatio.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedLength.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMTokenList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-hyperlink-element/IHTMLHyperlinkElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-area-element/HTMLAreaElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TimeRanges.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/RemotePlayback.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/IMediaTrackCapabilities.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/IMediaTrackSettings.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/MediaStreamTrack.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IMediaQueryListEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/MediaStreamTrackEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/MediaStream.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TextTrackCue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TextTrackCueList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TextTrackKindEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TextTrack.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TextTrackList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/HTMLMediaElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-audio-element/HTMLAudioElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-base-element/HTMLBaseElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-body-element/HTMLBodyElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-br-element/HTMLBRElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-canvas-element/ImageBitmap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-canvas-element/OffscreenCanvas.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-canvas-element/HTMLCanvasElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-d-list-element/HTMLDListElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-data-element/HTMLDataElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-details-element/HTMLDetailsElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-dialog-element/HTMLDialogElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-div-element/HTMLDivElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-embed-element/HTMLEmbedElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-head-element/HTMLHeadElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-heading-element/HTMLHeadingElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-hr-element/HTMLHRElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-html-element/HTMLHtmlElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/location/Location.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/CrossOriginBrowserWindow.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-image-element/HTMLImageElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-legend-element/HTMLLegendElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-li-element/HTMLLIElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-link-element/HTMLLinkElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-map-element/HTMLMapElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-menu-element/HTMLMenuElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-meta-element/HTMLMetaElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-mod-element/HTMLModElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-o-list-element/HTMLOListElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-opt-group-element/HTMLOptGroupElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-paragraph-element/HTMLParagraphElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-param-element/HTMLParamElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-picture-element/HTMLPictureElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-pre-element/HTMLPreElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-quote-element/HTMLQuoteElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestReferrerPolicy.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-script-element/HTMLScriptElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-source-element/HTMLSourceElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-span-element/HTMLSpanElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-caption-element/HTMLTableCaptionElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-cell-element/HTMLTableCellElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-col-element/HTMLTableColElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-row-element/HTMLTableRowElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-section-element/HTMLTableSectionElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-element/HTMLTableElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-animation-element/SVGAnimationElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-animate-element/SVGAnimateElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-animate-motion-element/SVGAnimateMotionElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-animate-transform-element/SVGAnimateTransformElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedNumber.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-geometry-element/SVGGeometryElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-circle-element/SVGCircleElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedEnumeration.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-clip-path-element/SVGClipPathElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-defs-element/SVGDefsElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-desc-element/SVGDescElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-ellipse-element/SVGEllipseElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedString.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-blend-element/SVGFEBlendElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGNumberList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedNumberList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-color-matrix-element/SVGFEColorMatrixElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-component-transfer-element/SVGFEComponentTransferElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-composite-element/SVGFECompositeElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedBoolean.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedInteger.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-convolve-matrix-element/SVGFEConvolveMatrixElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-diffuse-lighting-element/SVGFEDiffuseLightingElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-displacement-map-element/SVGFEDisplacementMapElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-distant-light-element/SVGFEDistantLightElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-drop-shadow-element/SVGFEDropShadowElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-flood-element/SVGFEFloodElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-component-transfer-function-element/SVGComponentTransferFunctionElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-func-a-element/SVGFEFuncAElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-func-b-element/SVGFEFuncBElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-func-g-element/SVGFEFuncGElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-func-r-element/SVGFEFuncRElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-gaussian-blur-element/SVGFEGaussianBlurElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-image-element/SVGFEImageElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-merge-element/SVGFEMergeElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-merge-node-element/SVGFEMergeNodeElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-morphology-element/SVGFEMorphologyElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-offset-element/SVGFEOffsetElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-point-light-element/SVGFEPointLightElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-specular-lighting-element/SVGFESpecularLightingElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-spot-light-element/SVGFESpotLightElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-tile-element/SVGFETileElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-turbulence-element/SVGFETurbulenceElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-filter-element/SVGFilterElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-foreign-object-element/SVGForeignObjectElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-g-element/SVGGElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-image-element/SVGImageElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-line-element/SVGLineElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-gradient-element/SVGGradientElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-linear-gradient-element/SVGLinearGradientElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedAngle.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-marker-element/SVGMarkerElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-mask-element/SVGMaskElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-metadata-element/SVGMetadataElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-m-path-element/SVGMPathElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-path-element/SVGPathElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-pattern-element/SVGPatternElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGPointList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-polygon-element/SVGPolygonElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-polyline-element/SVGPolylineElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-radial-gradient-element/SVGRadialGradientElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-rect-element/SVGRectElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-script-element/SVGScriptElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-set-element/SVGSetElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-stop-element/SVGStopElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-switch-element/SVGSwitchElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-symbol-element/SVGSymbolElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-text-content-element/SVGTextContentElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGLengthList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedLengthList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-text-positioning-element/SVGTextPositioningElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-text-element/SVGTextElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-text-path-element/SVGTextPathElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-title-element/SVGTitleElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-t-span-element/SVGTSpanElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-use-element/SVGUseElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-view-element/SVGViewElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/config/ISVGElementTagNameMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document-fragment/DocumentFragment.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/shadow-root/ShadowRoot.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-template-element/HTMLTemplateElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-time-element/HTMLTimeElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-title-element/HTMLTitleElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-track-element/HTMLTrackElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-u-list-element/HTMLUListElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-video-element/HTMLVideoElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/config/IHTMLElementTagNameMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-svg-element/SVGSVGElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-element/SVGElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-style-element/SVGStyleElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/Node.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMRectList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/element/NamedNodeMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/parent-node/IParentNode.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/IScrollToOptions.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/element/Element.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/tree-walker/TNodeFilter.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/tree-walker/NodeIterator.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/tree-walker/TreeWalker.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document-type/DocumentType.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom-implementation/DOMImplementation.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/comment/Comment.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document/DocumentReadyStateEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/range/RangeHowEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/range/IRangeBoundaryPoint.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/range/Range.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/selection/Selection.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/processing-instruction/ProcessingInstruction.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document/VisibilityStateEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/Headers.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/THeadersInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/IResponseInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/form-data/FormData.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TResponseBody.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/CachedResponseStateEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/ICachedResponse.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/Response.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/preload/PreloadEntry.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document/Document.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowserPageViewport.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/IVirtualConsoleLogGroup.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/enums/VirtualConsoleLogLevelEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/enums/VirtualConsoleLogTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/IVirtualConsoleLogEntry.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/IVirtualConsolePrinter.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/VirtualConsolePrinter.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/url/URL.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/cookie/enums/CookieSameSiteEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/cookie/ICookie.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/cookie/IOptionalCookie.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/cookie/ICookieContainer.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/ICacheableRequest.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/ICacheableResponse.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/IResponseCacheFileSystem.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/IResponseCache.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/utilities/BrowserExceptionObserver.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/preflight/ICachedPreflightResponse.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/preflight/ICacheablePreflightRequest.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/preflight/ICacheablePreflightResponse.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/preflight/IPreflightResponseCache.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IECMAScriptModuleImport.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IECMAScriptModuleCachedResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowserContext.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IReloadOptions.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IGoToOptions.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IOptionalBrowserPageViewport.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowserPage.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/history/HistoryScrollRestorationEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/history/IHistoryItem.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/history/HistoryItemList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowserFrame.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/clipboard/ClipboardItem.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/clipboard/Clipboard.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/CSSUnitValue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/CSS.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSContainerRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSFontFaceRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSKeyframeRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSKeyframesRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/style-property-map/CSSKeywordValue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/style-property-map/CSSStyleValue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/style-property-map/StylePropertyMapReadOnly.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/style-property-map/StylePropertyMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSStyleRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSSupportsRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/custom-element/ICustomElementDefinition.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/custom-element/CustomElementRegistry.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom-parser/DOMParser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/DataTransferItem.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/DataTransferItemList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/DataTransfer.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/MessagePort.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/ITouchInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/Touch.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/IUIEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/UIEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IAnimationEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/AnimationEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IClipboardEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ClipboardEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ICustomEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/CustomEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IErrorEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ErrorEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IFocusEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/FocusEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IHashChangeEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/HashChangeEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IInputEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/InputEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IKeyboardEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/KeyboardEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IMediaQueryListInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/MediaQueryListEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IMessageEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/MessageEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IMouseEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/MouseEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IPointerEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/PointerEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IProgressEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ProgressEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/storage/Storage.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IStorageEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/StorageEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ISubmitEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/SubmitEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ITouchEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/TouchEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IWheelEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/WheelEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/exception/DOMException.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/AbortController.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestInfo.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/file/FileReader.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/history/History.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/intersection-observer/IntersectionObserverEntry.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/intersection-observer/IIntersectionObserverInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/intersection-observer/IntersectionObserver.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/match-media/MediaQueryList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/mutation-observer/MutationObserver.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/navigator/Plugin.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/navigator/MimeType.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/navigator/MimeTypeArray.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/navigator/PluginArray.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/permissions/PermissionStatus.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/permissions/Permissions.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/navigator/Navigator.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document/DocumentReadyStateManager.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-audio-element/Audio.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-document/HTMLDocument.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-image-element/Image.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/VTTRegion.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/VTTCue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-unknown-element/HTMLUnknownElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/xml-document/XMLDocument.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/resize-observer/ResizeObserver.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/screen/Screen.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/screen/ScreenDetailed.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/screen/ScreenDetails.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-http-request/XMLHttpRequestEventTarget.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-http-request/XMLHttpRequestReadyStateEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-http-request/XMLHttpRequestUpload.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-http-request/XMLHttpResponseTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestBody.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-http-request/XMLHttpRequest.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-serializer/XMLSerializer.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/INodeJSGlobal.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-canvas-element/CanvasCaptureMediaStreamTrack.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGUnitTypes.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/custom-element/CustomElementReactionStack.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IModule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IModuleImportMapRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IModuleImportMapScope.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IModuleImportMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSScopeRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IPopStateEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/PopStateEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ICloseEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/CloseEvent.d.ts","../node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.mts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/web-socket/WebSocket.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/BrowserWindow.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/EventTarget.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/AbortSignal.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestMode.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestCredentials.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestRedirect.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/IRequestInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/Request.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/ISyncResponse.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/IFetchInterceptor.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/IVirtualServer.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/IFetchRequestHeaders.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/IOptionalTimerLoopsLimit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IResolveNodeModules.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowserSettings.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/BrowserFrame.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/BrowserPage.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/BrowserContext.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IOptionalBrowserSettings.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/Browser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/detached-browser/DetachedBrowserFrame.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/detached-browser/DetachedBrowserPage.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/detached-browser/DetachedBrowserContext.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/detached-browser/DetachedBrowser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/VirtualConsole.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/html-serializer/HTMLSerializer.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/tree-walker/NodeFilter.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/DetachedWindowAPI.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/Window.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/GlobalWindow.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-parser/XMLParser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/index.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/optional-types.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/environment.d.cL3nLXbE.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/hmrPayload.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/customEvent.d.ts","../node_modules/.pnpm/@types+estree@1.0.8/node_modules/@types/estree/index.d.ts","../node_modules/.pnpm/rollup@4.55.1/node_modules/rollup/dist/rollup.d.ts","../node_modules/.pnpm/rollup@4.55.1/node_modules/rollup/dist/parseAst.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/hot.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/dist/node/module-runner.d.ts","../node_modules/.pnpm/esbuild@0.27.4/node_modules/esbuild/lib/main.d.ts","../node_modules/.pnpm/@jridgewell+trace-mapping@0.3.31/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts","../node_modules/.pnpm/@jridgewell+trace-mapping@0.3.31/node_modules/@jridgewell/trace-mapping/types/types.d.mts","../node_modules/.pnpm/@jridgewell+trace-mapping@0.3.31/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts","../node_modules/.pnpm/@jridgewell+trace-mapping@0.3.31/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts","../node_modules/.pnpm/@jridgewell+gen-mapping@0.3.13/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts","../node_modules/.pnpm/@jridgewell+gen-mapping@0.3.13/node_modules/@jridgewell/gen-mapping/types/types.d.mts","../node_modules/.pnpm/@jridgewell+gen-mapping@0.3.13/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts","../node_modules/.pnpm/@jridgewell+source-map@0.3.11/node_modules/@jridgewell/source-map/types/source-map.d.mts","../node_modules/.pnpm/terser@5.44.1/node_modules/terser/tools/terser.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/internal/terserOptions.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/postcss.d.mts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/deprecations.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/util/promise_or.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/importer.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/logger/source_location.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/logger/source_span.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/logger/index.d.ts","../node_modules/.pnpm/immutable@5.1.4/node_modules/immutable/dist/immutable.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/boolean.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/calculation.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/color.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/function.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/list.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/map.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/mixin.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/number.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/string.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/argument_list.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/index.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/options.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/compile.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/exception.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/exception.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/plugin_this.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/function.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/importer.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/options.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/render.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/index.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/internal/cssPreprocessorOptions.d.ts","../node_modules/.pnpm/lightningcss@1.32.0/node_modules/lightningcss/node/ast.d.ts","../node_modules/.pnpm/lightningcss@1.32.0/node_modules/lightningcss/node/targets.d.ts","../node_modules/.pnpm/lightningcss@1.32.0/node_modules/lightningcss/node/index.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/internal/lightningcssOptions.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/importGlob.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/metadata.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/dist/node/index.d.ts","../node_modules/.pnpm/@vitest+mocker@3.2.4_vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass_7f029439c4befb3b8e460811a6536e17/node_modules/@vitest/mocker/dist/registry.d-D765pazg.d.ts","../node_modules/.pnpm/@vitest+mocker@3.2.4_vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass_7f029439c4befb3b8e460811a6536e17/node_modules/@vitest/mocker/dist/types.d-D_aRZRdy.d.ts","../node_modules/.pnpm/@vitest+mocker@3.2.4_vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass_7f029439c4befb3b8e460811a6536e17/node_modules/@vitest/mocker/dist/index.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/source-map.d.ts","../node_modules/.pnpm/vite-node@3.2.4_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite-node/dist/trace-mapping.d-DLVdEqOp.d.ts","../node_modules/.pnpm/vite-node@3.2.4_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite-node/dist/index.d-DGmxD2U7.d.ts","../node_modules/.pnpm/vite-node@3.2.4_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite-node/dist/index.d.ts","../node_modules/.pnpm/@vitest+snapshot@3.2.4/node_modules/@vitest/snapshot/dist/environment.d-DHdQ1Csl.d.ts","../node_modules/.pnpm/@vitest+snapshot@3.2.4/node_modules/@vitest/snapshot/dist/rawSnapshot.d-lFsMJFUd.d.ts","../node_modules/.pnpm/@vitest+snapshot@3.2.4/node_modules/@vitest/snapshot/dist/index.d.ts","../node_modules/.pnpm/@vitest+snapshot@3.2.4/node_modules/@vitest/snapshot/dist/environment.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/config.d.D2ROskhv.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/worker.d.1GmBbd7G.d.ts","../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/utils.d.ts","../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/benchmark.d.BwvBVTda.d.ts","../node_modules/.pnpm/vite-node@3.2.4_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite-node/dist/client.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/coverage.d.S9RMNXIe.d.ts","../node_modules/.pnpm/@vitest+snapshot@3.2.4/node_modules/@vitest/snapshot/dist/manager.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/reporters.d.BFLkQcL6.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/worker.d.CKwWzBSj.d.ts","../node_modules/.pnpm/@vitest+spy@3.2.4/node_modules/@vitest/spy/dist/index.d.ts","../node_modules/.pnpm/@vitest+expect@3.2.4/node_modules/@vitest/expect/dist/index.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/global.d.MAmajcmJ.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/vite.d.CMLlLIFP.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/mocker.d.BE_2ls6u.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/suite.d.FvehnV49.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/index.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/globals.d.ts"],"fileIdsList":[[421,476,493,494,1857,2469],[421,476,493,494,1857,2468],[421,476,493,494,1857,2468,2469,2470],[417,421,476,493,494,1857],[421,476,493,494,1857],[421,476,493,494,1304,1857,2358],[421,476,493,494,1857,2358,2359,2360],[421,476,493,494,1190,1191,1199,1857],[421,476,493,494,1857,3192,3194],[421,476,493,494,1857,3193],[421,476,493,494,1857,3192,3195],[421,476,493,494,1857,3190,3192],[421,476,493,494,1857,3189,3190,3191],[421,476,493,494,1857,3189,3192],[421,476,493,494,1536,1857],[417,421,476,493,494,1536,1857],[421,476,493,494,1538,1857],[421,476,493,494,1534,1535,1537,1539,1541,1857],[421,476,493,494,1540,1857],[417,421,476,493,494,1304,1663,1667,1857],[417,421,476,493,494,1231,1232,1304,1650,1663,1667,1668,1671,1672,1673,1857],[417,421,476,493,494,1655,1657,1857],[417,421,476,493,494,1304,1674,1857],[421,476,493,494,519,1650,1652,1857],[421,476,493,494,1659,1660,1661,1662,1664,1666,1857],[421,476,493,494,1650,1857],[417,421,476,493,494,1663,1857],[421,476,493,494,1665,1857],[421,476,493,494,1669,1670,1857],[417,421,476,493,494,1650,1857],[421,476,493,494,1542,1651,1657,1658,1667,1671,1675,1676,1681,1857],[421,476,493,494,1672,1857],[421,476,493,494,1650,1651,1857],[421,476,493,494,1652,1654,1655,1656,1857],[421,476,493,494,1650,1653,1857],[417,421,476,493,494,1650,1653,1857],[417,421,476,493,494,1650,1651,1653,1857],[421,476,493,494,1677,1678,1679,1680,1857],[317,421,476,493,494,1857],[66,318,319,320,321,322,323,324,325,326,327,328,329,330,421,476,493,494,1857],[269,303,421,476,493,494,1857],[276,421,476,493,494,1857],[266,317,417,421,476,493,494,1857],[335,336,337,338,339,340,341,343,421,476,493,494,1857],[271,421,476,493,494,1857],[317,417,421,476,493,494,1857],[271,342,421,476,493,494,1857],[331,334,344,421,476,493,494,1857],[332,333,421,476,493,494,1857],[307,421,476,493,494,1857],[271,272,273,274,421,476,493,494,1857],[347,421,476,493,494,1857],[289,346,421,476,493,494,1857],[346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,421,476,493,494,1857],[376,421,476,493,494,1857],[373,374,421,476,493,494,1857],[372,375,421,476,493,494,508,1857],[65,275,317,345,369,372,377,384,409,414,416,421,476,493,494,1857],[71,269,421,476,493,494,1857],[70,421,476,493,494,1857],[71,261,262,421,476,493,494,1243,1248,1857],[261,269,421,476,493,494,1857],[70,260,421,476,493,494,1857],[269,397,421,476,493,494,1857],[263,399,421,476,493,494,1857],[260,264,421,476,493,494,1857],[264,421,476,493,494,1857],[70,317,421,476,493,494,1857],[268,269,421,476,493,494,1857],[281,421,476,493,494,1857],[283,284,285,286,287,421,476,493,494,1857],[275,421,476,493,494,1857],[275,276,295,421,476,493,494,1857],[289,290,296,297,298,421,476,493,494,1857],[67,68,69,70,71,261,262,263,264,265,266,267,268,269,270,276,281,282,288,295,299,300,301,303,311,312,313,314,315,316,421,476,493,494,1857],[294,421,476,493,494,1857],[277,278,279,280,421,476,493,494,1857],[269,277,278,421,476,493,494,1857],[269,275,276,421,476,493,494,1857],[269,279,421,476,493,494,1857],[269,307,421,476,493,494,1857],[302,304,305,306,307,308,309,310,421,476,493,494,1857],[67,269,421,476,493,494,1857],[303,421,476,493,494,1857],[67,269,302,306,308,421,476,493,494,1857],[278,421,476,493,494,1857],[304,421,476,493,494,1857],[269,303,304,305,421,476,493,494,1857],[293,421,476,493,494,1857],[269,273,293,294,311,312,421,476,493,494,1857],[291,292,294,421,476,493,494,1857],[265,267,276,282,296,313,314,317,421,476,493,494,1857],[71,260,265,267,270,313,314,421,476,493,494,1857],[274,421,476,493,494,1857],[260,421,476,493,494,1857],[293,317,378,382,421,476,493,494,1857],[382,383,421,476,493,494,1857],[317,378,421,476,493,494,1857],[317,378,379,421,476,493,494,1857],[379,380,421,476,493,494,1857],[379,380,381,421,476,493,494,1857],[270,421,476,493,494,1857],[387,388,389,421,476,493,494,1857],[387,421,476,493,494,1857],[389,390,391,393,394,395,421,476,493,494,1857],[386,421,476,493,494,1857],[389,392,421,476,493,494,1857],[389,390,391,393,394,421,476,493,494,1857],[270,387,389,393,421,476,493,494,1857],[385,396,401,402,403,404,405,406,407,408,421,476,493,494,1857],[270,317,401,421,476,493,494,1857],[270,392,421,476,493,494,1857],[270,392,417,421,476,493,494,1857],[263,269,270,392,397,398,399,400,421,476,493,494,1857],[260,317,397,398,410,421,476,493,494,1857],[317,397,421,476,493,494,1857],[412,421,476,493,494,1857],[345,410,421,476,493,494,1857],[410,411,413,421,476,493,494,1857],[293,421,476,493,494,520,1857],[293,370,371,421,476,493,494,1857],[302,421,476,493,494,1857],[275,317,421,476,493,494,1857],[415,421,476,493,494,1857],[295,317,417,421,476,493,494,1857],[418,421,476,493,494,1857],[317,417,421,476,493,494,1232,1233,1857],[342,421,476,493,494,1857],[417,421,476,493,494,1226,1231,1232,1857],[421,476,493,494,1236,1237,1857],[421,476,493,494,1220,1231,1721,1857],[71,317,421,476,493,494,1227,1232,1246,1857],[417,421,476,493,494,1214,1239,1857],[70,417,421,476,493,494,1240,1243,1857],[317,421,476,493,494,1227,1232,1234,1245,1247,1251,1857],[70,421,476,493,494,1249,1250,1857],[421,476,493,494,1240,1857],[260,317,417,421,476,493,494,1254,1857],[317,417,421,476,493,494,1227,1232,1234,1246,1857],[421,476,493,494,1253,1255,1256,1857],[317,421,476,493,494,1232,1857],[421,476,493,494,1232,1857],[317,417,421,476,493,494,1254,1857],[70,317,417,421,476,493,494,1857],[317,417,421,476,493,494,1226,1227,1232,1252,1254,1257,1260,1265,1266,1279,1280,1857],[260,418,421,476,493,494,1857],[421,476,493,494,1239,1242,1281,1857],[421,476,493,494,1266,1278,1857],[65,421,476,493,494,1214,1234,1235,1238,1241,1273,1278,1282,1285,1289,1290,1291,1293,1295,1301,1303,1857],[317,417,421,476,493,494,1220,1228,1231,1232,1857],[317,421,476,493,494,1224,1857],[294,317,342,417,421,476,493,494,1223,1224,1225,1226,1231,1232,1234,1304,1857],[421,476,493,494,1226,1227,1230,1232,1268,1277,1857],[317,417,421,476,493,494,1219,1231,1232,1857],[421,476,493,494,1267,1857],[417,421,476,493,494,1227,1232,1857],[417,421,476,493,494,1220,1227,1231,1272,1857],[317,342,417,421,476,493,494,1219,1231,1857],[417,421,476,493,494,1225,1226,1230,1270,1274,1275,1276,1857],[417,421,476,493,494,1220,1227,1228,1229,1231,1232,1857],[317,342,421,476,493,494,1227,1230,1232,1857],[260,421,476,493,494,1231,1857],[269,302,308,421,476,493,494,1857],[421,476,493,494,1216,1217,1218,1227,1231,1232,1271,1857],[421,476,493,494,1223,1272,1283,1284,1857],[342,417,421,476,493,494,1232,1857],[342,417,421,476,493,494,1857],[421,476,493,494,1215,1216,1217,1218,1221,1223,1857],[421,476,493,494,1220,1857],[421,476,493,494,1222,1223,1857],[417,421,476,493,494,1215,1216,1217,1218,1221,1222,1857],[421,476,493,494,1258,1259,1857],[317,421,476,493,494,1227,1232,1234,1246,1857],[421,476,493,494,1269,1857],[300,421,476,493,494,1857],[281,317,421,476,493,494,1286,1287,1857],[421,476,493,494,1288,1857],[317,421,476,493,494,1234,1857],[317,421,476,493,494,1227,1234,1857],[294,317,417,421,476,493,494,1220,1227,1228,1229,1231,1232,1857],[293,317,417,421,476,493,494,1214,1227,1234,1272,1290,1857],[294,295,417,418,421,476,493,494,1292,1857],[421,476,493,494,1262,1263,1264,1857],[417,421,476,493,494,1261,1857],[421,476,493,494,1294,1857],[417,421,476,493,494,505,1857],[421,476,493,494,1297,1299,1300,1857],[421,476,493,494,1296,1857],[421,476,493,494,1298,1857],[417,421,476,493,494,1226,1231,1297,1857],[421,476,493,494,1244,1857],[317,342,417,421,476,493,494,1227,1231,1232,1234,1269,1270,1272,1273,1857],[421,476,493,494,1302,1857],[291,295,317,417,418,421,476,490,492,493,494,535,536,537,538,1857],[421,476,493,494,539,1857],[421,476,493,494,540,542,553,1857],[421,476,493,494,536,537,541,1857],[291,417,421,476,490,492,493,494,535,536,537,538,1857],[421,476,490,493,494,1857],[421,476,493,494,549,551,552,1857],[417,421,476,493,494,543,1857],[421,476,493,494,544,545,546,547,548,1857],[317,421,476,493,494,543,1857],[421,476,493,494,550,1857],[417,421,476,493,494,550,1857],[421,476,493,494,1857,2352],[260,421,476,493,494,1360,1857,2303],[421,476,493,494,1857,2353],[421,476,493,494,1369,1857],[421,476,493,494,1370,1371,1372,1857],[421,476,493,494,1361,1857],[421,476,493,494,1362,1373,1374,1375,1376,1857],[417,421,476,493,494,1374,1857],[421,476,493,494,1377,1857],[417,421,476,493,494,898,899,1857],[421,476,493,494,921,1857],[421,476,493,494,898,899,1857],[421,476,493,494,898,1857],[417,421,476,493,494,898,899,912,1857],[417,421,476,493,494,912,915,1857],[417,421,476,493,494,898,1857],[421,476,493,494,915,1857],[421,476,493,494,896,897,900,901,902,903,904,905,906,907,908,909,910,911,913,914,916,917,918,919,920,922,923,924,1857],[421,476,493,494,898,918,929,1857],[65,421,476,493,494,925,929,930,931,936,938,1857],[421,476,493,494,898,927,928,1857],[417,421,476,493,494,898,912,1857],[421,476,493,494,898,926,1857],[296,417,421,476,493,494,929,1857],[421,476,493,494,932,933,934,935,1857],[421,476,493,494,937,1857],[421,476,493,494,1857,2588,2589,2591,2592],[421,476,493,494,1857,2585,2586,2590],[421,476,493,494,1857,2586,2589],[421,476,493,494,1269,1857,2589],[307,421,476,493,494,1857,2589],[294,417,421,476,493,494,1269,1273,1857,2587,2588,2591],[417,421,476,493,494,1227,1231,1234,1272,1292,1304,1857],[421,476,493,494,1857,2279],[260,317,417,421,476,493,494,1857],[421,476,493,494,1857,2281,2282,2283,2293,2294,2295],[421,476,493,494,1857,2292],[421,476,493,494,1857,2297],[421,476,493,494,1857,2299],[260,421,476,493,494,1273,1857,2301],[65,421,476,493,494,1857,2280,2292,2296,2298,2300,2302],[291,421,476,493,494,1857],[421,476,493,494,1857,2285,2286,2287],[421,476,493,494,1857,2284,2288,2289,2290,2291],[421,476,493,494,1857,2062,2063],[421,476,493,494,1857,2063,2064,2065,2066],[421,476,493,494,526,1857,2063,2065],[421,476,493,494,1857,2062,2064],[421,476,488,493,494,526,1857],[421,476,488,493,494,526,1857,2058],[421,476,493,494,1857,2058,2059,2060,2061],[421,476,493,494,1857,2058,2060],[421,476,493,494,1857,2059],[421,476,493,494,508,526,1857,2067,2068,2069,2072],[421,476,493,494,1857,2068,2069,2071],[421,476,487,493,494,526,1857,2067,2068,2069,2070],[421,476,493,494,1857,2069],[421,476,493,494,1857,2067,2068],[421,476,493,494,526,1857,2067],[421,476,493,494,1857,2165,2166],[421,476,493,494,1857,2166,2167,2168],[421,476,493,494,1857,2164,2165,2166,2167,2168,2169,2170],[421,476,493,494,1773,1857,2164],[421,476,493,494,1857,2165],[421,476,493,494,1773,1857],[421,476,493,494,1857,2166,2167],[421,476,493,494,1732,1857],[421,476,493,494,1735,1857],[421,476,493,494,1740,1742,1857],[421,476,493,494,1728,1732,1744,1745,1857],[421,476,493,494,1755,1758,1764,1766,1857],[421,476,493,494,1727,1732,1857],[421,476,493,494,1726,1857],[421,476,493,494,1727,1857],[421,476,493,494,1734,1857],[421,476,493,494,1737,1857],[421,476,493,494,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1767,1768,1769,1770,1771,1772,1857],[421,476,493,494,1743,1857],[421,476,493,494,1739,1857],[421,476,493,494,1740,1857],[421,476,493,494,1731,1732,1738,1857],[421,476,493,494,1739,1740,1857],[421,476,493,494,1746,1857],[421,476,493,494,1767,1857],[421,476,493,494,1732,1752,1754,1755,1756,1857],[421,476,493,494,1755,1756,1758,1857],[421,476,493,494,1732,1747,1750,1753,1760,1857],[421,476,493,494,1747,1748,1857],[421,476,493,494,1730,1747,1750,1753,1857],[421,476,493,494,1731,1857],[421,476,493,494,1732,1749,1752,1857],[421,476,493,494,1748,1857],[421,476,493,494,1749,1857],[421,476,493,494,1747,1749,1857],[421,476,493,494,1729,1730,1747,1749,1750,1751,1857],[421,476,493,494,1749,1752,1857],[421,476,493,494,1732,1752,1754,1857],[421,476,493,494,1755,1756,1857],[421,476,493,494,1857,2250],[421,476,493,494,1857,2249],[421,476,493,494,1857,2245,2246,2248,2249,2250,2251],[421,476,493,494,1857,2245,2246,2247,2248],[421,476,493,494,1857,2244],[421,476,493,494,1773,1857,2082],[421,476,493,494,1857,2083,2084],[421,476,493,494,1773,1857,2090],[421,476,493,494,1857,2090],[421,476,493,494,1857,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112],[421,476,493,494,1857,2095],[421,476,493,494,1857,2100],[421,476,493,494,1857,2097,2098,2099],[421,476,490,493,494,526,1857,2159,2160],[421,476,493,494,1857,2129,2159],[421,476,493,494,1857,2159],[421,476,493,494,1857,2160,2161,2162],[421,476,493,494,1857,2185,2186],[421,476,493,494,1857,2186,2187],[421,476,490,493,494,526,1773,1857,2185],[421,476,493,494,1857,2189,2190],[421,476,493,494,1857,2185,2189],[421,476,493,494,526,1773,1857,2185],[421,476,493,494,1857,2192,2193],[421,476,493,494,1857,2185],[421,476,493,494,1857,2197,2198,2199],[421,476,493,494,1857,2185,2197],[421,476,493,494,1773,1857,2185,2196],[421,476,493,494,1857,2173],[421,476,493,494,1857,2172,2173,2174,2180,2181,2182,2183,2184],[421,476,493,494,1773,1857,2171,2172],[421,476,493,494,1857,2172],[421,476,493,494,1857,2179],[421,476,493,494,1857,2177,2178],[421,476,493,494,1857,2172,2175,2176],[421,476,493,494,498,1857],[421,476,493,494,1773,1857,2171],[421,476,493,494,1773,1857,2114],[421,476,493,494,1857,2114,2116],[421,476,493,494,1857,2114],[421,476,493,494,1857,2115,2116],[421,476,493,494,1857,2114,2115],[421,476,493,494,1857,2118,2124,2125],[421,476,493,494,1857,2123],[421,476,493,494,1857,2119,2120,2121,2122],[421,476,493,494,1857,2114,2115,2116,2117,2126,2127,2128],[421,476,493,494,1773,1857,2115],[421,476,493,494,1773,1857,2201],[421,476,493,494,1857,2171,2203],[421,476,493,494,1857,2203],[421,476,493,494,1857,2201,2202,2203,2206],[421,476,493,494,1857,2113,2205,2206],[421,476,493,494,1857,2113,2205],[421,476,493,494,1773,1857,2113,2129,2171],[421,476,493,494,1857,2201,2202,2206],[421,476,493,494,1857,2201,2202,2203,2204,2205,2206,2207,2208,2209,2213,2214],[421,476,493,494,1857,2212],[421,476,493,494,1857,2203,2210],[421,476,493,494,1857,2211],[421,476,493,494,1857,2113,2129,2171,2202],[421,476,493,494,1773,1857,2130,2146],[421,476,493,494,1773,1857,2129,2146,2152,2154],[421,476,493,494,1773,1857,2086,2130,2131,2148],[421,476,493,494,1773,1857,2086,2130,2131,2138,2139,2147,2148],[421,476,493,494,1773,1857,2086,2130,2131,2147,2148],[421,476,493,494,1857,2136,2137,2140,2141,2142,2148],[421,476,493,494,1773,1857,2086,2130,2131,2147],[421,476,493,494,1857,2086,2130,2145],[421,476,493,494,1857,2130],[421,476,493,494,1857,2086,2113,2130,2149,2150],[421,476,493,494,1857,2086,2113,2130,2150],[421,476,493,494,1773,1857,2086,2113,2129,2148],[421,476,493,494,1857,2086,2113,2130,2145],[421,476,493,494,1857,2086,2130,2145,2149,2151,2152,2153],[421,476,493,494,1857,2150,2151,2154],[421,476,493,494,1857,2086,2130,2131,2132,2145,2146,2148,2149,2150,2151,2154,2155,2156,2157,2158],[421,476,493,494,1773,1857,2113],[421,476,493,494,1857,2131,2143,2147,2148],[421,476,493,494,1857,2144],[421,476,493,494,1857,2130,2133],[421,476,493,494,1857,2133],[421,476,493,494,1857,2130,2132,2134,2135,2144,2145],[421,476,493,494,1773,1857,2113,2129,2159,2215,2238,2241,2242,2243,2253],[421,476,493,494,1857,2159,2215,2242],[421,476,493,494,1857,2129,2242,2252],[421,476,493,494,1773,1857,2129,2159,2185,2215,2238],[421,476,493,494,1773,1857,2222],[421,476,493,494,1773,1857,2113,2129,2218,2219,2221,2222],[421,476,493,494,1773,1857,2219,2220],[421,476,493,494,1773,1857,2219,2220,2221,2222,2224],[421,476,493,494,1857,2113,2219,2224],[421,476,493,494,1773,1857,2219,2220,2221],[421,476,493,494,1773,1857,2113,2129,2218],[421,476,493,494,1773,1857,2219,2220,2221,2224],[421,476,493,494,1857,2113,2219],[421,476,493,494,1857,2216,2217,2218,2219,2220,2221,2222,2223,2224,2229,2230,2231,2232,2233,2234,2235,2236,2237],[421,476,493,494,1857,2228],[421,476,493,494,1857,2216],[421,476,493,494,1857,2222,2225],[421,476,493,494,1857,2226,2227],[421,476,493,494,1857,2217],[421,476,493,494,1773,1857,2217],[421,476,493,494,1773,1857,2129,2216,2217,2221],[421,476,493,494,1857,2238,2239],[421,476,493,494,1857,2238],[421,476,493,494,1857,2238,2239,2240],[421,476,493,494,1857,2256,2258,2259,2260,2261],[421,476,493,494,1857,2257],[421,476,493,494,1857,2255],[421,476,493,494,1857,1904],[421,476,493,494,1857,1904,1907],[421,476,493,494,1857,1887,1905,1906,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1921,1922,1923,1947,1948],[421,476,493,494,1857,1904,1920],[421,476,493,494,1857,1886],[421,476,493,494,1857,1904,1946],[421,476,493,494,1857,1943,1944],[421,476,493,494,1857,1942,1945],[421,476,493,494,1355,1857,1871],[421,476,493,494,1355,1857],[421,476,488,493,494,508,525,1857,2053],[421,476,493,494,526,1857],[421,476,490,493,494,526,533,1857],[421,476,493,494,1857,3249,3250],[421,476,493,494,525,535,1857],[421,476,490,493,494,526,1857],[421,476,493,494,535,1857],[421,476,487,490,493,494,526,527,528,529,1857],[421,476,493,494,530,532,534,1857],[421,476,487,493,494,508,526,1857],[260,421,476,493,494,503,1857,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383],[421,476,493,494,1857,2384],[421,476,493,494,1857,2364,2365,2384],[260,421,476,493,494,503,1857,2367,2384],[421,476,493,494,503,1857,2368,2369,2384],[421,476,493,494,503,1857,2368,2384],[260,421,476,493,494,503,1857,2368,2384],[421,476,493,494,503,1857,2374,2384],[421,476,493,494,503,1857,2384],[260,421,476,493,494,503,1857],[421,476,493,494,1857,2367],[421,476,493,494,503,1857],[421,476,481,493,494,526,1857,1880],[421,476,493,494,1201,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1205,1206,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1206,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1208,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1208,1209,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1857],[421,476,493,494,567,1857],[421,476,493,494,560,1857],[421,476,493,494,559,561,563,564,568,1857],[421,476,493,494,561,562,565,1857],[421,476,493,494,559,562,565,1857],[421,476,493,494,561,563,565,1857],[421,476,493,494,559,560,562,563,564,565,566,1857],[421,476,493,494,559,565,1857],[421,476,493,494,561,1857],[421,476,493,494,508,535,1857],[421,473,474,476,493,494,1857],[421,475,476,493,494,1857],[476,493,494,1857],[421,476,481,493,494,511,1857],[421,476,477,482,487,493,494,496,508,519,1857],[421,476,477,478,487,493,494,496,1857],[421,476,479,493,494,520,1857],[421,476,480,481,488,493,494,497,1857],[421,476,481,493,494,508,516,1857],[421,476,482,484,487,493,494,496,1857],[421,475,476,483,493,494,1857],[421,476,484,485,493,494,1857],[421,476,486,487,493,494,1857],[421,475,476,487,493,494,1857],[421,476,487,488,489,493,494,508,519,1857],[421,476,487,488,489,493,494,503,508,511,1857],[421,468,476,484,487,490,493,494,496,508,519,1857],[421,476,487,488,490,491,493,494,496,508,516,519,1857],[421,476,490,492,493,494,508,516,519,1857],[419,420,421,422,423,424,425,426,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,1857],[421,476,487,493,494,1857],[421,476,493,494,495,519,1857],[421,476,484,487,493,494,496,508,1857],[421,476,493,494,497,1857],[421,475,476,493,494,499,1857],[421,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,1857],[421,476,493,494,501,1857],[421,476,493,494,502,1857],[421,476,487,493,494,503,504,1857],[421,476,493,494,503,505,520,522,1857],[421,476,488,493,494,1857],[421,476,487,493,494,508,509,511,1857],[421,476,493,494,510,511,1857],[421,476,493,494,508,509,1857],[421,476,493,494,511,1857],[421,476,493,494,512,1857],[421,473,476,493,494,508,513,519,1857],[421,476,487,493,494,514,515,1857],[421,476,493,494,514,515,1857],[421,476,481,493,494,496,508,516,1857],[421,476,493,494,517,1857],[421,476,493,494,496,518,1857],[421,476,490,493,494,502,519,1857],[421,476,481,493,494,520,1857],[421,476,493,494,508,521,1857],[421,476,493,494,495,522,1857],[421,476,493,494,523,1857],[421,476,481,493,494,1857],[421,468,476,493,494,1857],[421,476,493,494,524,1857],[421,468,476,487,489,493,494,499,508,511,519,521,522,524,1857],[421,476,493,494,508,525,1857],[421,476,493,494,526,1857,1889,1891,1895,1896,1897,1898,1899,1900],[421,476,493,494,508,526,1857],[421,476,487,493,494,526,1857,1889,1891,1892,1894,1901],[421,476,487,493,494,496,508,519,526,1857,1888,1889,1890,1892,1893,1894,1901],[421,476,493,494,508,526,1857,1891,1892],[421,476,493,494,508,526,1857,1891],[421,476,493,494,526,1857,1889,1891,1892,1894,1901],[421,476,493,494,508,526,1857,1893],[421,476,487,493,494,496,508,516,526,1857,1890,1892,1894],[421,476,487,493,494,526,1857,1889,1891,1892,1893,1894,1901],[421,476,487,493,494,508,526,1857,1889,1890,1891,1892,1893,1894,1901],[421,476,487,493,494,508,526,1857,1889,1891,1892,1894,1901],[421,476,490,493,494,508,526,1857,1894],[421,476,487,493,494,508,516,526,1192,1193,1196,1857,2195,2196],[421,476,493,494,1857,2196],[421,476,487,493,494,508,516,526,1192,1193,1196,1197,1198,1857],[421,476,493,494,1198,1857],[421,476,493,494,1842,1857],[421,476,493,494,1839,1840,1841,1857],[421,476,493,494,1857,1902,1903],[421,476,487,488,493,494,526,1857],[421,476,493,494,1857,2338],[421,476,493,494,570,608,1857],[421,476,493,494,570,593,608,1857],[421,476,493,494,569,608,1857],[421,476,493,494,608,1857],[421,476,493,494,570,1857],[421,476,493,494,570,594,608,1857],[421,476,493,494,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,1857],[421,476,493,494,594,608,1857],[421,476,488,493,494,508,526,1857],[421,476,490,493,494,526,531,1857],[421,476,493,494,1412,1413,1414,1415,1416,1417,1418,1419,1420,1857],[421,476,487,490,492,493,494,496,508,516,519,525,526,1857],[421,476,493,494,1857,2708,2709,2712,3260],[421,476,493,494,1857,3236,3237],[421,476,493,494,1857,2709,2710,2712,2713,2714],[421,476,493,494,1857,2709],[421,476,493,494,1857,2709,2710,2712],[421,476,493,494,1857,2709,2710],[421,476,493,494,1857,3243],[421,476,493,494,1857,2704,3243,3244],[421,476,493,494,1857,2704,3243],[421,476,493,494,1857,2704,2711],[421,476,493,494,1857,2705],[421,476,493,494,1857,2704,2705,2706,2708],[421,476,493,494,1857,2704],[421,476,493,494,1857,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985],[421,476,493,494,1857,1968,1973,1976,1978],[421,476,493,494,1857,1969,1979],[421,476,493,494,1857,1979],[421,476,477,493,494,1857,1972,1973,1976,1977],[421,476,477,493,494,1857],[421,476,493,494,1857,1970,1972,1981],[421,476,477,493,494,1857,1969,1976],[421,476,493,494,1857,1972,1973,1977],[421,476,493,494,1857,1970,1971],[421,476,493,494,1857,1972,1973,1974,1976,1979],[421,476,493,494,1857,1972,1975],[421,476,493,494,1544,1557,1558,1857],[421,476,493,494,1621,1622,1857],[421,476,493,494,1591,1621,1857],[421,476,477,487,493,494,524,1621,1857],[421,476,493,494,1625,1626,1627,1628,1629,1857],[421,476,487,493,494,1585,1606,1621,1632,1635,1857],[421,476,493,494,1543,1559,1606,1622,1623,1624,1630,1631,1632,1633,1634,1635,1636,1637,1639,1640,1641,1642,1643,1644,1646,1857],[421,476,493,494,1591,1621,1632,1633,1635,1857],[421,476,493,494,1591,1621,1631,1634,1857],[421,476,493,494,1621,1638,1857],[421,476,487,493,494,1587,1597,1606,1621,1631,1632,1635,1857],[421,476,493,494,1621,1632,1633,1857],[421,476,493,494,1591,1621,1632,1633,1857],[421,476,493,494,1591,1621,1633,1635,1857],[421,476,493,494,1591,1621,1632,1635,1637,1641,1642,1857],[421,476,487,493,494,1591,1621,1857],[421,476,493,494,1623,1635,1857],[421,476,493,494,1585,1591,1621,1857],[421,476,493,494,519,1591,1621,1632,1633,1635,1637,1638,1639,1642,1645,1857],[421,476,493,494,1562,1593,1594,1595,1596,1857],[421,476,493,494,1591,1597,1621,1645,1647,1648,1649,1857],[421,476,493,494,1558,1560,1857],[421,476,493,494,1544,1545,1546,1549,1857],[421,476,493,494,1562,1857],[421,476,487,493,494,1585,1857],[421,476,493,494,1591,1599,1857],[421,476,493,494,1544,1546,1549,1550,1554,1555,1557,1561,1563,1586,1592,1598,1599,1600,1601,1602,1603,1604,1605,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1857],[421,476,493,494,1552,1553,1554,1857],[421,476,493,494,1591,1857],[421,476,493,494,1598,1857],[421,476,493,494,1546,1552,1553,1554,1555,1556,1857],[421,476,493,494,1586,1596,1598,1607,1857],[421,476,493,494,1555,1593,1857],[421,476,493,494,1552,1857],[421,476,493,494,1550,1561,1592,1598,1857],[421,476,493,494,1585,1857],[421,476,493,494,1548,1857],[421,476,493,494,1616,1857],[421,476,493,494,1557,1591,1857],[421,476,477,493,494,524,1857],[421,476,493,494,1586,1587,1599,1606,1857],[421,476,493,494,1597,1857],[421,476,493,494,1545,1561,1598,1599,1604,1611,1618,1857],[421,476,493,494,1557,1857],[421,476,493,494,1545,1551,1552,1553,1556,1558,1560,1587,1588,1589,1590,1857],[421,476,493,494,1555,1857],[421,476,493,494,1550,1551,1857],[421,476,493,494,1588,1857],[421,476,493,494,1635,1857],[421,476,493,494,1549,1857],[421,476,493,494,1621,1631,1857],[421,476,487,493,494,1585,1591,1597,1621,1638,1857],[421,476,488,493,494,1857,2055,2057],[421,476,487,488,493,494,1857,2055,2056],[421,476,493,494,1321,1857],[421,476,493,494,1323,1324,1325,1326,1327,1328,1329,1857],[421,476,493,494,1312,1857],[421,476,493,494,1313,1321,1322,1330,1857],[421,476,493,494,1314,1857],[421,476,493,494,1308,1857],[421,476,493,494,1305,1306,1307,1308,1309,1310,1311,1314,1315,1316,1317,1318,1319,1320,1857],[421,476,493,494,1313,1315,1857],[421,476,493,494,1316,1321,1857],[421,476,493,494,1383,1857],[421,476,493,494,1384,1857],[421,476,493,494,1383,1384,1389,1857],[421,476,493,494,1385,1386,1387,1388,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1857],[421,476,493,494,1384,1421,1857],[421,476,493,494,1384,1415,1857],[421,476,493,494,1384,1462,1857],[421,476,493,494,1379,1380,1381,1382,1383,1384,1389,1511,1512,1513,1514,1518,1857],[421,476,493,494,1389,1857],[421,476,493,494,1381,1516,1517,1857],[421,476,493,494,1383,1515,1857],[421,476,493,494,1384,1389,1857],[421,476,493,494,1379,1380,1857],[421,476,493,494,1547,1857],[421,476,493,494,568,1365,1367,1368,1857],[421,476,493,494,568,1367,1368,1857],[421,476,493,494,568,1363,1367,1857],[421,476,477,493,494,568,1364,1365,1366,1857],[421,476,493,494,1857,2328],[421,476,493,494,1857,2327],[421,476,493,494,1857,2326],[421,476,493,494,1857,2328,2330,2331,2332,2333,2334,2335,2336],[421,476,493,494,1857,2326,2328],[421,476,493,494,1857,2328,2329],[421,476,493,494,1332,1857],[421,476,493,494,1332,1333,1334,1857],[421,476,490,493,494,1335,1338,1339,1342,1346,1347,1857],[421,476,487,490,493,494,508,1337,1338,1339,1340,1341,1857],[421,476,487,490,493,494,1335,1338,1342,1857],[421,476,487,490,493,494,1335,1336,1337,1857],[421,476,493,494,1338,1343,1344,1345,1857],[421,476,493,494,1335,1338,1857],[421,476,493,494,1335,1337,1338,1857],[421,476,493,494,1338,1857],[421,476,493,494,1338,1342,1857],[421,476,493,494,1857,1987,1994,2007],[421,476,493,494,1857,1987],[421,476,493,494,1857,1986,2006,2007,2020],[421,476,493,494,1857,1994],[421,476,493,494,568,1857,1987],[421,476,493,494,1857,1986,1987,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028],[421,476,493,494,1857,1986,1987,1988,2006],[421,476,493,494,1857,1986,2007],[421,476,493,494,1857,1995,1996],[421,476,493,494,1857,1986],[421,476,493,494,1857,1996],[421,476,493,494,1857,1991,1992,1993,1996],[421,476,493,494,1857,1995,2010],[421,476,493,494,1857,1994,2011],[421,476,493,494,1857,1987,1988,1994,2006],[421,476,493,494,1857,1991,1992],[421,476,493,494,1857,2029],[421,476,493,494,1857,1989,1990,1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005],[421,476,493,494,568,1857,1987,2006,2007,2019],[421,476,493,494,1857,1991,1992,2003],[421,476,493,494,1857,1991,1992,1995,2003,2005,2006,2014,2015],[421,476,493,494,1857,1994,2007,2016],[421,476,493,494,1857,3266,3267],[421,476,493,494,1857,3266,3267,3268,3269],[421,476,493,494,1857,3266,3268],[421,476,493,494,1857,3266],[421,476,493,494,526,1857,2074,2075,2076],[421,476,493,494,1857,2074,2075],[421,476,493,494,1857,2074],[421,476,493,494,526,1857,2073],[421,476,493,494,1857,2036],[421,476,493,494,1857,3034],[421,476,493,494,1857,2716,2726,3018,3019,3160,3162,3163,3164],[421,476,493,494,1857,2716,3013,3017,3023,3025,3026,3162,3165],[421,476,493,494,522,1857,2716,2727,2856,2999,3001,3027,3028,3033,3034,3146,3162],[421,476,493,494,522,1857,2726,2999,3002,3008,3027,3028,3029,3030,3161,3163],[421,476,493,494,1857,2716,2726,3018,3019,3034,3146,3160,3164,3167,3168],[421,476,493,494,1857,2716,3013,3017,3023,3025,3026,3167,3169],[421,476,493,494,522,1857,2716,2727,2856,2999,3001,3027,3028,3033,3034,3146,3167],[421,476,493,494,522,1857,2726,2999,3002,3008,3027,3028,3029,3030,3166,3168],[421,476,493,494,1857,2716,2726,3018,3026,3030,3160],[421,476,493,494,1857,2716,3013,3017,3019,3023,3025,3030],[421,476,493,494,522,1857,2716,2727,2856,2999,3001,3027,3028,3030,3033,3146],[421,476,493,494,522,1857,2726,2999,3002,3008,3026,3027,3028,3029,3034],[421,476,493,494,1857,2717,2718,3002,3146,3155,3156,3157,3158,3159],[421,476,493,494,1857,2873,3027],[421,476,493,494,1857,2717,2718,3029,3146,3155,3156,3157,3158,3159],[421,476,493,494,1857,2993,3146],[421,476,493,494,1857,3146],[421,476,493,494,1857,3035,3146],[421,476,493,494,1857,2761],[421,476,493,494,1857,2757,2758,2764,2765,2766,2767,2769,2770,2771,2772,2773,2774,2776,2777,2781,2786,2822,2823,2838,2839,2840,2841,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2874,2875,2876,2877,2878,2879,2880,2881,2882,2963,2964,2965,2966,2967,2968],[421,476,493,494,1857,2884,2885,2886,2889,2891,2892,2893,2894,2896,2899,2900,2901,2904,2905,2906,2907,2908,2909,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2932,2934,2935,2936,2937,2938,2939,2941,2942,2943,2944,2945,2946,2947,2948,2949,2954,2955,2956,2957,2958,2959,2970,2972],[421,476,493,494,1857,3003,3004,3005],[421,476,493,494,1857,2721,3004,3006],[421,476,493,494,1857,2726,3007],[421,476,493,494,1857,2721,3004,3006,3007],[421,476,493,494,1857,3010],[421,476,493,494,1857,3009,3011,3012],[421,476,493,494,1857,3037],[421,476,493,494,1857,2716,2746,2747,2753,3146],[421,476,493,494,1857,2716,2748,2752,3146],[421,476,493,494,1857,2716,2751],[421,476,493,494,1857,2716,2748,2978,3146],[421,476,493,494,1857,2742],[421,476,493,494,1857,2716,2749],[421,476,493,494,1857,2716,2746,2750],[421,476,493,494,1857,2716,2746,2748,2754],[421,476,493,494,1857,2716,2748],[421,476,493,494,1857,2716,2746,2748,3041],[421,476,493,494,1857,2716,2746,2750,2752],[421,476,493,494,1857,2716,2746,2749],[421,476,493,494,1857,2716,2746,2749,2754,3046],[421,476,493,494,1857,2754],[421,476,493,494,1857,3045],[421,476,493,494,1857,2716,2754,3043,3044],[421,476,493,494,1857,2748,2753],[421,476,493,494,1857,2978,3146],[421,476,493,494,1857,2716,2757,2973,3049,3146],[421,476,493,494,1857,2757],[421,476,493,494,1857,2982,3001],[421,476,493,494,1857,2716,3001,3146],[421,476,493,494,1857,2791],[421,476,493,494,1857,2716,2790],[421,476,493,494,1857,2787,2788],[421,476,493,494,1857,2789],[421,476,493,494,1857,2716,2787],[421,476,493,494,1857,2978],[421,476,493,494,1857,2716,2978],[421,476,493,494,1857,2793,2794,2798],[421,476,493,494,1857,2716,2790,2792,2793,2794,2795,2796,2797],[421,476,493,494,1857,2793],[421,476,493,494,1857,2762,3053],[421,476,493,494,1857,2762],[421,476,493,494,1857,2762,3052],[421,476,493,494,1857,2716,2719,2720,3147],[421,476,493,494,1857,2716,2721,2722,2725,3146],[421,476,493,494,1857,3148],[421,476,493,494,1857,3147],[421,476,493,494,1857,2719,3146],[421,476,493,494,1857,2723,2724],[421,476,493,494,1857,2721],[421,476,493,494,1857,3056,3147],[421,476,493,494,1857,2721,3058,3146],[421,476,493,494,1857,2721,3060],[421,476,493,494,1857,2721,3054,3062],[421,476,493,494,1857,2721,3142],[421,476,493,494,1857,2716,2721,3064],[421,476,493,494,1857,3059,3066],[421,476,493,494,1857,3059,3068,3147],[421,476,493,494,1857,2721,3070],[421,476,493,494,1857,2719],[421,476,493,494,1857,2719,3054],[421,476,493,494,1857,3058,3147],[421,476,493,494,1857,3054,3058],[421,476,493,494,1857,3058],[421,476,493,494,1857,2719,2828],[421,476,493,494,1857,2719,3055,3146],[421,476,493,494,1857,3080,3083],[421,476,493,494,1857,2719,3086],[421,476,493,494,1857,2719,2757],[421,476,493,494,1857,3057,3058],[421,476,493,494,1857,3054,3059,3072],[421,476,493,494,1857,3059,3074],[421,476,493,494,1857,2721,3076],[421,476,493,494,1857,2721,2828,2829],[421,476,493,494,1857,2721,3055,3078,3146],[421,476,493,494,1857,3059,3080,3147],[421,476,493,494,1857,3081,3082],[421,476,493,494,1857,2721,3140],[421,476,493,494,1857,2721,3084],[421,476,493,494,1857,2721,3086,3087],[421,476,493,494,1857,2721,2757,3089],[421,476,493,494,1857,3057,3059,3091],[421,476,493,494,1857,3059,3093],[421,476,493,494,1857,2716,3146,3148],[421,476,493,494,1857,2716,2721,3146,3147],[421,476,493,494,1857,2716,2993,3146],[421,476,493,494,511,519,1857,2716,2761,2873,2992,2995,3097,3146,3148,3149,3150,3151,3152],[421,476,493,494,511,1857,2716,2761,2992,2994,2995,2996,2998,3146],[421,476,493,494,1857,2992],[421,476,493,494,1857,3020,3021,3022],[421,476,493,494,1857,2716,2992,2997],[421,476,493,494,1857,2998,3014,3015,3016],[421,476,493,494,1857,2999],[421,476,493,494,1857,2999,3146,3153,3154],[421,476,493,494,1857,2873,2993,3009,3128,3148,3149,3150,3151],[421,476,493,494,1857,2993],[421,476,493,494,1857,2992,3177],[421,476,493,494,511,519,1857,2761,2995],[421,476,493,494,1857,3009,3153],[421,476,493,494,511,1857,2716],[421,476,493,494,1857,2761,3085,3147],[421,476,493,494,1857,2716,2761,2762,2773,2776,2781,3146],[421,476,493,494,1857,2716,3031,3034,3146],[421,476,493,494,1857,3032],[421,476,493,494,1857,2995,3031],[421,476,493,494,1857,2962,2973],[421,476,493,494,519,1857,2716,2717,2718,2719,2720,2721,2725,2726,2732,2748,2749,2750,2751,2752,2753,2754,2756,2757,2758,2759,2761,2762,2763,2764,2765,2766,2767,2769,2770,2771,2772,2773,2774,2776,2777,2780,2781,2785,2786,2788,2789,2806,2822,2823,2825,2828,2831,2832,2833,2835,2836,2837,2838,2839,2840,2841,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2874,2875,2876,2877,2878,2879,2880,2881,2882,2961,2962,2963,2964,2965,2966,2967,2968,2970,2971,2973,2978,2980,2981,2982,2984,2988,2989,2990,2992,2995,2999,3001,3004,3005,3008,3009,3010,3011,3012,3019,3026,3030,3034,3035,3036,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3050,3051,3052,3053,3054,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3080,3081,3083,3084,3085,3086,3089,3090,3091,3092,3093,3094,3095,3096,3098,3099,3100,3102,3104,3109,3110,3114,3115,3117,3118,3119,3120,3121,3122,3123,3130,3139,3141,3145,3146,3147,3148,3153,3154,3155,3156,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176],[421,476,493,494,1857,2978,3100,3101],[421,476,493,494,1857,2789,2973],[421,476,493,494,1857,2716,3034],[421,476,493,494,1857,2721,2725,3146,3147],[421,476,493,494,1857,3024],[421,476,493,494,1857,3136,3137],[421,476,493,494,1857,3136],[421,476,493,494,1857,2732,2733],[421,476,493,494,1857,2716,2732,2733,2973,3146],[421,476,493,494,1857,2731,2973],[421,476,493,494,1857,3105],[421,476,493,494,1857,3106],[421,476,493,494,1857,2761,2995,3036,3107,3108,3110,3146],[421,476,493,494,1857,2716,2728,2973,2978],[421,476,493,494,1857,2716,2782,2783,2973,2978],[421,476,493,494,1857,2973],[421,476,493,494,1857,2973,2978],[421,476,493,494,1857,2716,2728,2784],[421,476,493,494,1857,2716,2728,2730,2759,2960,2969,2973,2978],[421,476,493,494,1857,2716,2728,2973],[421,476,493,494,1857,2716,2721,2728,2730,2744,2753,2756,2757,2759,2781,2785,2822,2840,2851,2854,2855,2874,2945,2960,2961,2969,2971,2973,2978,2979,2980,2981,2982,2983,2984,2985,2988,2989,2990,2991,3000,3146],[421,476,493,494,1857,2716,2721,2728,2730,2754,2756,2759,2782,2783,2789,2820,2960,2962,2969,2973,2974,2975,2976,2977],[421,476,493,494,1857,2716,2756,2978],[421,476,493,494,1857,2716,2721,2757,2820,2821],[421,476,493,494,1857,2716,2838],[421,476,493,494,1857,2837],[421,476,493,494,1857,2716,2757],[421,476,493,494,1857,2721,2757],[421,476,493,494,1857,2716,2721,2730,2757,2771,2775,2781],[421,476,493,494,1857,2716,2828,2844],[421,476,493,494,1857,2721,2757,2761,2831,2843],[421,476,493,494,1857,2761,2842],[421,476,493,494,1857,2716,2757,2759,2767],[421,476,493,494,1857,2716,2721,2756,2757],[421,476,493,494,1857,2716,2721,2757],[421,476,493,494,1857,2716,2973,3001],[421,476,493,494,1857,2716,2721,2754,2755,2756,2978],[421,476,493,494,1857,2716,2757,2759,2769,2770,2773,2776,2781],[421,476,493,494,1857,2716,2759,2778,2779,2781],[421,476,493,494,1857,2716,2721,2757,2773,2776,2778,2779,2780],[421,476,493,494,1857,2730,2778],[421,476,493,494,1857,2765,2769,2770,2773,2774,2776,2777],[421,476,493,494,1857,2716,2721,2756,2757,2820,2856,3001,3146],[421,476,493,494,1857,2716,2858],[421,476,493,494,1857,2716,2721,2730,2757,2760,2763,2771,2772,2775,2781],[421,476,493,494,1857,2716,2721,2757,2764,2765,2766,2769,2770,2773,2776,2781],[421,476,493,494,1857,2757,2781],[421,476,493,494,1857,2716,2721,2753,2756,2757,2820],[421,476,493,494,1857,2716,2757,2759,2823],[421,476,493,494,1857,2716,2721,2757,2820,2824,2825,2831,2834,2835,2836],[421,476,493,494,1857,2716,2828,2830,3147],[421,476,493,494,1857,2716,2721,2826,2827,3147],[421,476,493,494,1857,2716,3147],[421,476,493,494,1857,2716,2721,2832,2833,2834,3147],[421,476,493,494,1857,2716,2721,2835,3147],[421,476,493,494,1857,2832],[421,476,493,494,1857,2716,2835,3147],[421,476,493,494,1857,2832,2961,3116],[421,476,493,494,1857,2730,2757,2771],[421,476,493,494,1857,2716,2757,2775,2781,3001,3146],[421,476,493,494,1857,2716,2756,2757,2769,2781],[421,476,493,494,1857,2716,2730,2757,2771,2775,2781],[421,476,493,494,1857,2716,2721,2756,2757,2820,2873],[421,476,493,494,1857,2716,2759,2767,2769],[421,476,493,494,1857,2716,2721,2730,2757,2759,2767,2768,2771,2775,2781,3146],[421,476,493,494,1857,2716,2721,2756,2757,2785,2973,2978],[421,476,493,494,1857,2716,2753,2757],[421,476,493,494,1857,2716,2757,2759,2877,2880,2881],[421,476,493,494,1857,2716,2757,2759,2878],[421,476,493,494,1857,2757,2880],[421,476,493,494,1857,2716,2757,2961,2962,2973],[421,476,493,494,1857,2716,2721,2730,2757,2760,2771,2775,2781],[421,476,493,494,1857,2721,2757,2835],[421,476,493,494,1857,2735,2743],[421,476,493,494,1857,2735,2978],[421,476,493,494,1857,2735,2738],[421,476,493,494,1857,2730,2735,2978],[421,476,493,494,1857,2716,2728,2729,2730,2732,2734,2735,2736,2737,2739,2740,2741,2744,2745,2758,2769,2770,2781,2786,2972,2978,3001,3147],[421,476,493,494,1857,2716,2973],[421,476,493,494,1857,2730,2759,2960,2969,2973,2978],[421,476,493,494,1857,2716,2721,2753,2757,2961,2971,2978],[421,476,493,494,1857,2883],[421,476,493,494,1857,2716,2721,2800,2971],[421,476,493,494,1857,2716,2819,2888],[421,476,493,494,1857,2716,2890,2971],[421,476,493,494,1857,2716,2887,2890,2898,2971],[421,476,493,494,1857,2806],[421,476,493,494,1857,2971],[421,476,493,494,1857,2716,2721,2754,2755,2970,2978],[421,476,493,494,1857,2716,2819,2890,2895,2971],[421,476,493,494,1857,2716,2819,2890,2895,2898,2971],[421,476,493,494,1857,2716,2819,2895,2971],[421,476,493,494,1857,2716,2819,2887,2890,2895,2898,2902,2903,2971],[421,476,493,494,1857,2716,2819,2887,2895,2971],[421,476,493,494,1857,2716,2819,2887,2890,2895,2971],[421,476,493,494,1857,2716,2887,2971],[421,476,493,494,1857,2910],[421,476,493,494,1857,2716,2818,2819,2895,2971],[421,476,493,494,1857,2716,2895,2971],[421,476,493,494,1857,2716,2819,2887,2890,2895,2903,2971],[421,476,493,494,1857,2716,2806,2819],[421,476,493,494,1857,2716,2806,2808,2887],[421,476,493,494,1857,2716,2805,2806,2890,2895],[421,476,493,494,1857,2716,2721,2789,2799,2800,2805,2971],[421,476,493,494,1857,2716,2806,2818,2819,2895],[421,476,493,494,1857,2716,2819,2931],[421,476,493,494,1857,2716,2812,2814,2818,2819,2890,2933,2971],[421,476,493,494,1857,2716,2819,2890,2971],[421,476,493,494,1857,2888],[421,476,493,494,1857,2716,2805,2819,2890,2895,2971],[421,476,493,494,1857,2716,2888,2940],[421,476,493,494,1857,2716,2806,2895],[421,476,493,494,1857,2716,2753,2971],[421,476,493,494,1857,2716,2721,2730,2759,2801,2803,2806,2807,2808,2810,2812,2813,2814,2818,2819,2960,2969,2971,2978],[421,476,493,494,1857,2953],[421,476,493,494,1857,2716,2806,2807,2808,2819,2890],[421,476,493,494,1857,2716,2819,2890,2895,2950],[421,476,493,494,1857,2716,2898,2950,2952],[421,476,493,494,1857,2716,2806,2819,2895],[421,476,493,494,1857,2716,2728,2758,2770,2784],[421,476,493,494,1857,2716,3001],[421,476,493,494,1857,2721,3147],[421,476,493,494,1857,3109,3146],[421,476,493,494,1857,2716,2789,2961,2973,2974,2986,2987,3001,3146],[421,476,493,494,1857,3121],[421,476,493,494,1857,2721,3122,3147],[421,476,493,494,1857,2973,2988,3001],[421,476,493,494,1857,2716],[421,476,493,494,1857,2716,2811,3146],[421,476,493,494,1857,2716,2812,3146],[421,476,493,494,1857,2716,3146],[421,476,493,494,1857,2716,2810,3146],[421,476,493,494,1857,2716,2951,3146],[421,476,493,494,1857,2716,2897,3146],[421,476,493,494,1857,2716,2817,3146],[421,476,493,494,1857,2716,2807,3146],[421,476,493,494,1857,2716,2804,3146],[421,476,493,494,1857,2716,2809,3146],[421,476,493,494,1857,2716,2799,3146],[421,476,493,494,1857,2716,2813,3146],[421,476,493,494,1857,2716,2808,3146],[421,476,493,494,1857,2716,2815,2816,3146],[421,476,493,494,1857,2716,2801,2802,3146],[421,476,493,494,1857,2716,2803,3146],[421,476,493,494,1857,2973,2979],[421,476,493,494,1857,2716,2973,2979],[421,476,493,494,519,1857,2716,2761,3146],[421,476,493,494,1857,2765,2769,2770,2773,2774,2776],[421,476,493,494,1857,2716,2761,3144,3147],[421,476,481,493,494,499,508,511,519,520,1857,2716,2721,2726,2730,2732,2748,2749,2750,2751,2752,2753,2754,2756,2757,2758,2759,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2779,2780,2781,2784,2785,2786,2788,2789,2792,2798,2799,2800,2801,2803,2804,2805,2806,2807,2808,2810,2812,2813,2814,2817,2818,2819,2822,2823,2824,2825,2828,2831,2832,2833,2835,2836,2837,2838,2839,2840,2841,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2951,2952,2953,2954,2955,2956,2957,2958,2959,2961,2962,2963,2964,2965,2966,2967,2968,2970,2971,2972,2973,2975,2977,2978,2980,2981,2982,2984,2988,2989,2990,2992,2995,2999,3001,3009,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3050,3051,3052,3053,3054,3055,3057,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3086,3088,3090,3092,3094,3095,3096,3097,3098,3099,3100,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3117,3118,3119,3120,3121,3122,3123,3124,3126,3129,3130,3131,3132,3133,3134,3135,3138,3139,3141,3143,3145,3147,3148,3152,3153],[421,476,493,494,1857,2716,2855,3146,3147],[421,476,493,494,1857,3008,3029,3034,3160],[421,476,493,494,1857,2716,3174],[421,476,493,494,1857,2726,3146,3164,3173],[421,476,493,494,1857,2716,2761,3001,3124,3125,3126,3127,3128,3146],[421,476,493,494,1857,2716,3085,3147],[421,476,493,494,1857,3124],[421,476,493,494,1857,3119,3146],[421,476,493,494,1857,2324],[421,476,493,494,1857,2324,2325,2326,2328,2337],[421,476,493,494,526,1683,1857],[421,476,487,493,494,526,1580,1683,1699,1857],[421,476,493,494,1684,1688,1698,1701,1857],[421,476,487,493,494,526,1580,1683,1684,1685,1687,1688,1695,1698,1700,1857],[421,476,493,494,1684,1857],[421,476,484,493,494,526,1688,1695,1696,1857],[421,476,487,493,494,526,1683,1684,1685,1687,1688,1696,1697,1701,1857],[421,476,484,493,494,526,1857],[421,476,493,494,1683,1857],[421,476,493,494,1689,1857],[421,476,493,494,1691,1857],[421,476,487,493,494,516,526,1683,1689,1691,1692,1697,1857],[421,476,493,494,1695,1857],[421,476,493,494,496,516,526,1683,1689,1857],[421,476,493,494,1683,1684,1685,1686,1689,1693,1694,1695,1696,1697,1698,1701,1702,1857],[421,476,493,494,1688,1690,1693,1694,1857],[421,476,493,494,1686,1857],[421,476,493,494,496,516,526,1857],[421,476,493,494,1683,1684,1686,1857],[421,476,493,494,526,1564,1857],[421,476,487,493,494,526,1564,1580,1581,1857],[421,476,493,494,1565,1569,1579,1583,1857],[421,476,487,493,494,526,1564,1565,1566,1568,1569,1576,1579,1580,1582,1857],[421,476,493,494,1565,1857],[421,476,484,493,494,526,1569,1576,1577,1857],[421,476,487,493,494,526,1564,1565,1566,1568,1569,1577,1578,1583,1857],[421,476,493,494,1564,1857],[421,476,493,494,1570,1857],[421,476,493,494,1572,1857],[421,476,487,493,494,516,526,1564,1570,1572,1573,1578,1857],[421,476,493,494,1576,1857],[421,476,493,494,496,516,526,1564,1570,1857],[421,476,493,494,1564,1565,1566,1567,1570,1574,1575,1576,1577,1578,1579,1583,1584,1857],[421,476,493,494,1569,1571,1574,1575,1857],[421,476,493,494,1567,1857],[421,476,493,494,1564,1565,1567,1857],[421,476,493,494,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,1857],[421,476,493,494,612,1857],[421,476,493,494,612,622,1857],[421,476,493,494,895,1857],[421,476,493,494,737,841,1857],[421,476,493,494,841,1857],[421,476,493,494,733,735,736,737,841,1857],[421,476,493,494,841,858,1857],[421,476,493,494,656,1857],[421,476,493,494,733,735,736,737,738,841,878,1857],[421,476,493,494,732,734,735,878,1857],[421,476,493,494,736,841,1857],[421,476,493,494,661,662,676,690,691,720,854,1857],[421,476,493,494,737,841,858,1857],[421,476,493,494,734,1857],[421,476,493,494,733,735,736,737,738,841,865,1857],[421,476,493,494,732,733,734,735,865,1857],[421,476,493,494,678,854,1857],[421,476,493,494,733,735,736,737,738,841,871,1857],[421,476,493,494,732,733,734,735,871,1857],[421,476,493,494,854,1857],[421,476,493,494,733,735,736,737,738,841,859,1857],[421,476,493,494,733,734,735,859,1857],[421,476,493,494,724,847,854,1857],[421,476,493,494,732,1857],[421,476,493,494,734,735,739,1857],[421,476,493,494,658,733,734,1857],[421,476,493,494,734,735,1857],[421,476,493,494,734,739,1857],[421,476,493,494,697,703,1857],[421,476,493,494,694,703,1857],[421,476,493,494,759,762,1857],[421,476,493,494,656,658,704,741,746,754,755,756,757,760,776,778,787,789,794,795,796,798,799,1857],[421,476,493,494,645,656,658,694,704,757,773,774,775,798,799,1857],[421,476,493,494,645,694,703,1857],[421,476,493,494,658,704,812,1857],[421,476,493,494,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,744,745,747,748,753,754,755,756,757,758,759,760,761,762,763,764,765,766,768,769,770,772,773,774,775,776,777,778,780,781,782,783,786,787,788,789,790,791,792,793,794,797,798,799,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,825,826,827,828,829,830,832,835,837,838,841,842,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,1857],[421,476,493,494,658,704,731,732,734,735,736,738,740,741,742,787,789,811,818,819,837,838,839,840,1857],[421,476,493,494,883,1857],[421,476,493,494,645,660,1857],[421,476,493,494,645,669,1857],[421,476,493,494,645,646,664,1857],[421,476,493,494,645,677,692,693,782,1857],[421,476,493,494,645,1857],[421,476,493,494,645,648,664,1857],[421,476,493,494,645,646,652,661,662,663,665,670,671,672,673,674,675,1857],[421,476,493,494,645,719,1857],[421,476,493,494,645,646,1857],[421,476,493,494,645,647,648,649,650,659,1857],[421,476,493,494,645,648,652,1857],[421,476,493,494,645,699,1857],[421,476,493,494,647,666,667,668,1857],[421,476,493,494,645,646,652,664,677,1857],[421,476,493,494,645,652,658,660,669,1857],[421,476,493,494,645,651,681,1857],[421,476,493,494,645,648,651,664,711,1857],[421,476,493,494,645,677,683,688,689,692,693,701,706,710,717,718,727,1857],[421,476,493,494,645,648,1857],[421,476,493,494,645,651,652,1857],[421,476,493,494,645,652,1857],[421,476,493,494,645,651,1857],[421,476,493,494,645,705,1857],[421,476,493,494,645,708,1857],[421,476,493,494,645,646,648,652,659,1857],[421,476,493,494,645,684,1857],[421,476,493,494,645,648,652,701,706,710,717,718,722,723,724,1857],[421,476,493,494,645,687,1857],[421,476,493,494,645,708,754,1857],[421,476,493,494,645,754,790,1857],[421,476,493,494,645,696,791,792,1857],[421,476,493,494,645,652,688,694,701,710,717,718,719,1857],[421,476,493,494,645,646,648,677,721,1857],[421,476,493,494,645,721,1857],[421,476,493,494,645,646,647,648,649,650,651,652,659,660,661,662,663,664,665,666,667,668,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,698,699,700,701,702,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,730,731,745,753,754,773,774,775,780,781,782,783,788,790,791,792,793,820,821,846,847,848,849,850,851,852,1857],[421,476,493,494,645,646,647,648,649,650,651,652,659,660,661,662,663,664,665,666,667,668,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,698,699,700,701,702,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,730,745,753,754,773,774,775,780,781,782,783,788,790,791,792,793,820,821,846,847,848,849,850,851,852,1857],[421,476,493,494,645,691,1857],[421,476,493,494,645,692,1857],[421,476,493,494,645,692,693,780,781,1857],[421,476,493,494,645,697,1857],[421,476,493,494,645,780,1857],[421,476,493,494,645,646,648,1857],[421,476,493,494,645,677,688,692,693,698,704,705,706,710,711,717,718,720,725,726,728,1857],[421,476,493,494,645,648,652,695,1857],[421,476,493,494,645,648,652,658,1857],[421,476,493,494,645,698,1857],[421,476,493,494,645,677,683,684,685,686,688,689,690,692,693,698,701,702,706,707,709,710,1857],[421,476,493,494,645,652,694,695,697,1857],[421,476,493,494,648,696,1857],[421,476,493,494,645,677,683,688,689,693,701,706,710,717,718,721,1857],[421,476,493,494,645,681,820,1857],[421,476,493,494,645,700,1857],[421,476,493,494,645,703,704,753,754,755,756,799,1857],[421,476,493,494,799,1857],[421,476,493,494,645,704,745,1857],[421,476,493,494,645,704,1857],[421,476,493,494,654,658,760,830,1857],[421,476,493,494,645,694,704,752,797,1857],[421,476,493,494,684,797,799,1857],[421,476,493,494,648,755,756,797,821,1857],[421,476,493,494,658,688,758,760,1857],[421,476,493,494,657,658,760,835,1857],[421,476,493,494,692,704,762,765,798,799,1857],[421,476,493,494,762,780,799,1857],[421,476,493,494,645,648,658,694,696,697,704,752,754,756,762,766,793,798,1857],[421,476,493,494,653,654,655,657,763,1857],[421,476,493,494,664,1857],[421,476,493,494,658,760,778,1857],[421,476,493,494,658,698,704,756,762,778,797,798,1857],[421,476,493,494,704,707,797,1857],[421,476,493,494,645,652,658,694,704,759,798,1857],[421,476,493,494,658,755,799,1857],[421,476,493,494,754,798,799,848,1857],[421,476,493,494,655,658,760,829,1857],[421,476,493,494,658,721,755,756,797,799,1857],[421,476,493,494,645,704,708,752,798,1857],[421,476,493,494,658,700,704,828,829,830,831,837,1857],[421,476,493,494,658,733,734,740,1857],[421,476,493,494,658,733,734,740,889,1857],[421,476,493,494,681,753,754,820,1857],[421,476,493,494,658,731,733,734,1857],[421,476,493,494,658,694,704,757,766,777,783,785,798,799,1857],[421,476,493,494,656,704,755,757,776,788,799,1857],[421,476,493,494,700,703,1857],[421,476,493,494,654,656,658,703,704,705,728,729,731,732,740,741,742,755,757,760,761,763,766,768,769,772,777,798,799,824,825,827,1857],[421,476,493,494,656,658,704,752,756,776,779,786,799,1857],[421,476,493,494,757,799,1857],[421,476,493,494,653,656,658,703,704,705,725,729,731,732,740,741,742,756,763,769,772,798,822,823,824,825,826,827,1857],[421,476,493,494,658,688,703,757,798,799,1857],[421,476,493,494,645,694,704,791,793,1857],[421,476,493,494,657,658,703,704,720,729,731,732,741,742,755,757,760,761,763,769,798,799,822,823,824,825,827,829,1857],[421,476,493,494,729,1857],[421,476,493,494,658,703,704,722,756,757,768,798,799,823,1857],[421,476,493,494,704,766,1857],[421,476,493,494,692,703,764,1857],[421,476,493,494,658,797,798,824,1857],[421,476,493,494,703,704,766,777,782,784,1857],[421,476,493,494,756,763,824,1857],[421,476,493,494,704,711,1857],[421,476,493,494,656,658,704,705,709,710,711,729,731,732,740,741,742,752,755,756,757,760,761,763,766,767,768,769,770,771,772,776,777,798,799,1857],[421,476,493,494,655,656,658,703,704,705,726,729,731,732,740,741,742,755,757,760,761,763,766,768,769,772,777,798,799,823,824,825,827,1857],[421,476,493,494,658,757,798,799,1857],[421,476,493,494,731,733,1857],[421,476,493,494,645,646,647,648,649,650,651,652,659,660,661,662,663,664,665,666,667,668,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,698,699,700,701,702,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,730,731,732,733,745,753,754,773,774,775,780,781,782,783,788,790,791,792,793,820,821,846,847,848,849,850,851,852,853,1857],[421,476,493,494,664,673,676,678,679,680,682,712,713,714,715,716,720,729,730,731,732,1857],[421,476,493,494,653,701,740,741,760,763,778,796,828,831,832,833,834,836,1857],[421,476,493,494,731,732,733,734,737,739,740,843,1857],[421,476,493,494,732,737,740,843,1857],[421,476,493,494,731,732,733,734,737,739,740,741,1857],[421,476,493,494,741,1857],[421,476,493,494,731,732,733,734,737,739,740,1857],[421,476,493,494,664,704,731,732,734,740,811,1857],[421,476,493,494,812,1857],[421,476,493,494,665,703,743,746,1857],[421,476,493,494,659,676,703,731,732,741,742,747,1857],[421,476,493,494,676,678,703,704,731,732,741,742,799,1857],[421,476,493,494,676,703,704,731,732,741,742,744,746,747,748,749,750,751,800,801,802,803,1857],[421,476,493,494,676,703,731,732,741,742,1857],[421,476,493,494,647,703,1857],[421,476,493,494,659,660,703,704,743,1857],[421,476,493,494,658,678,703,704,731,732,741,742,757,797,799,1857],[421,476,493,494,679,703,731,732,741,742,1857],[421,476,493,494,680,703,704,731,732,741,742,744,746,747,801,802,803,1857],[421,476,493,494,682,703,731,732,741,742,1857],[421,476,493,494,703,712,731,732,741,742,778,812,1857],[421,476,493,494,673,703,731,732,741,742,1857],[421,476,493,494,703,713,731,732,741,742,1857],[421,476,493,494,703,714,731,732,741,742,1857],[421,476,493,494,703,715,731,732,741,742,1857],[421,476,493,494,703,716,731,732,741,742,1857],[421,476,493,494,659,666,703,1857],[421,476,493,494,667,703,1857],[421,476,493,494,703,730,731,732,741,742,1857],[421,476,493,494,740,741,804,805,806,807,808,809,810,813,814,815,816,817,1857],[421,476,493,494,668,703,1857],[421,476,493,494,658,1857],[421,476,493,494,704,1857],[421,476,493,494,653,654,655,657,658,732,742,1857],[421,476,493,494,658,732,1857],[421,476,493,494,653,654,655,656,657,1857],[421,476,493,494,1032,1136,1857],[421,476,493,494,1136,1857],[421,476,493,494,1028,1030,1031,1032,1136,1857],[421,476,493,494,1136,1153,1857],[421,476,493,494,951,1857],[421,476,493,494,1028,1030,1031,1032,1033,1136,1173,1857],[421,476,493,494,1027,1029,1030,1173,1857],[421,476,493,494,1031,1136,1857],[421,476,493,494,956,957,971,985,986,1015,1149,1857],[421,476,493,494,1032,1136,1153,1857],[421,476,493,494,1029,1857],[421,476,493,494,1028,1030,1031,1032,1033,1136,1160,1857],[421,476,493,494,1027,1028,1029,1030,1160,1857],[421,476,493,494,973,1149,1857],[421,476,493,494,1028,1030,1031,1032,1033,1136,1166,1857],[421,476,493,494,1027,1028,1029,1030,1166,1857],[421,476,493,494,1149,1857],[421,476,493,494,1028,1030,1031,1032,1033,1136,1154,1857],[421,476,493,494,1028,1029,1030,1154,1857],[421,476,493,494,1019,1142,1149,1857],[421,476,493,494,1027,1857],[421,476,493,494,1029,1030,1034,1857],[421,476,493,494,953,1028,1029,1857],[421,476,493,494,1029,1030,1857],[421,476,493,494,1029,1034,1857],[421,476,493,494,992,998,1857],[421,476,493,494,989,998,1857],[421,476,493,494,1054,1057,1857],[421,476,493,494,951,953,999,1036,1041,1049,1050,1051,1052,1055,1071,1073,1082,1084,1089,1090,1091,1093,1094,1857],[421,476,493,494,940,951,953,989,999,1052,1068,1069,1070,1093,1094,1857],[421,476,493,494,940,989,998,1857],[421,476,493,494,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1039,1040,1042,1043,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1063,1064,1065,1067,1068,1069,1070,1071,1072,1073,1075,1076,1077,1078,1081,1082,1083,1084,1085,1086,1087,1088,1089,1092,1093,1094,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1120,1121,1122,1123,1124,1125,1127,1130,1132,1133,1136,1137,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1857],[421,476,493,494,953,999,1026,1027,1029,1030,1031,1033,1035,1036,1037,1082,1084,1106,1113,1114,1132,1133,1134,1135,1857],[421,476,493,494,1178,1857],[421,476,493,494,940,955,1857],[421,476,493,494,940,964,1857],[421,476,493,494,940,941,959,1857],[421,476,493,494,940,972,987,988,1077,1857],[421,476,493,494,940,1857],[421,476,493,494,940,943,959,1857],[421,476,493,494,940,941,947,956,957,958,960,965,966,967,968,969,970,1857],[421,476,493,494,940,1014,1857],[421,476,493,494,940,941,1857],[421,476,493,494,940,942,943,944,945,954,1857],[421,476,493,494,940,943,947,1857],[421,476,493,494,940,994,1857],[421,476,493,494,942,961,962,963,1857],[421,476,493,494,940,941,947,959,972,1857],[421,476,493,494,940,947,953,955,964,1857],[421,476,493,494,940,946,976,1857],[421,476,493,494,940,943,946,959,1006,1857],[421,476,493,494,940,972,978,983,984,987,988,996,1001,1005,1012,1013,1022,1857],[421,476,493,494,940,943,1857],[421,476,493,494,940,946,947,1857],[421,476,493,494,940,947,1857],[421,476,493,494,940,946,1857],[421,476,493,494,940,1000,1857],[421,476,493,494,940,1003,1857],[421,476,493,494,940,941,943,947,954,1857],[421,476,493,494,940,979,1857],[421,476,493,494,940,943,947,996,1001,1005,1012,1013,1017,1018,1019,1857],[421,476,493,494,940,982,1857],[421,476,493,494,940,1003,1049,1857],[421,476,493,494,940,1049,1085,1857],[421,476,493,494,940,991,1086,1087,1857],[421,476,493,494,940,947,983,989,996,1005,1012,1013,1014,1857],[421,476,493,494,940,941,943,972,1016,1857],[421,476,493,494,940,1016,1857],[421,476,493,494,940,941,942,943,944,945,946,947,954,955,956,957,958,959,960,961,962,963,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,993,994,995,996,997,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1025,1026,1040,1048,1049,1068,1069,1070,1075,1076,1077,1078,1083,1085,1086,1087,1088,1115,1116,1141,1142,1143,1144,1145,1146,1147,1857],[421,476,493,494,940,941,942,943,944,945,946,947,954,955,956,957,958,959,960,961,962,963,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,993,994,995,996,997,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1025,1040,1048,1049,1068,1069,1070,1075,1076,1077,1078,1083,1085,1086,1087,1088,1115,1116,1141,1142,1143,1144,1145,1146,1147,1857],[421,476,493,494,940,986,1857],[421,476,493,494,940,987,1857],[421,476,493,494,940,987,988,1075,1076,1857],[421,476,493,494,940,992,1857],[421,476,493,494,940,1075,1857],[421,476,493,494,940,941,943,1857],[421,476,493,494,940,972,983,987,988,993,999,1000,1001,1005,1006,1012,1013,1015,1020,1021,1023,1857],[421,476,493,494,940,943,947,990,1857],[421,476,493,494,940,943,947,953,1857],[421,476,493,494,940,993,1857],[421,476,493,494,940,972,978,979,980,981,983,984,985,987,988,993,996,997,1001,1002,1004,1005,1857],[421,476,493,494,940,947,989,990,992,1857],[421,476,493,494,943,991,1857],[421,476,493,494,940,972,978,983,984,988,996,1001,1005,1012,1013,1016,1857],[421,476,493,494,940,976,1115,1857],[421,476,493,494,940,995,1857],[421,476,493,494,940,998,999,1048,1049,1050,1051,1094,1857],[421,476,493,494,1094,1857],[421,476,493,494,940,999,1040,1857],[421,476,493,494,940,999,1857],[421,476,493,494,949,953,1055,1125,1857],[421,476,493,494,940,989,999,1047,1092,1857],[421,476,493,494,979,1092,1094,1857],[421,476,493,494,943,1050,1051,1092,1116,1857],[421,476,493,494,953,983,1053,1055,1857],[421,476,493,494,952,953,1055,1130,1857],[421,476,493,494,987,999,1057,1060,1093,1094,1857],[421,476,493,494,1057,1075,1094,1857],[421,476,493,494,940,943,953,989,991,992,999,1047,1049,1051,1057,1061,1088,1093,1857],[421,476,493,494,948,949,950,952,1058,1857],[421,476,493,494,959,1857],[421,476,493,494,953,1055,1073,1857],[421,476,493,494,953,993,999,1051,1057,1073,1092,1093,1857],[421,476,493,494,999,1002,1092,1857],[421,476,493,494,940,947,953,989,999,1054,1093,1857],[421,476,493,494,953,1050,1094,1857],[421,476,493,494,1049,1093,1094,1143,1857],[421,476,493,494,950,953,1055,1124,1857],[421,476,493,494,953,1016,1050,1051,1092,1094,1857],[421,476,493,494,940,999,1003,1047,1093,1857],[421,476,493,494,953,995,999,1123,1124,1125,1126,1132,1857],[421,476,493,494,953,1028,1029,1035,1857],[421,476,493,494,953,1028,1029,1035,1184,1857],[421,476,493,494,976,1048,1049,1115,1857],[421,476,493,494,953,1026,1028,1029,1857],[421,476,493,494,953,989,999,1052,1061,1072,1078,1080,1093,1094,1857],[421,476,493,494,951,999,1050,1052,1071,1083,1094,1857],[421,476,493,494,995,998,1857],[421,476,493,494,949,951,953,998,999,1000,1023,1024,1026,1027,1035,1036,1037,1050,1052,1055,1056,1058,1061,1063,1064,1067,1072,1093,1094,1119,1120,1122,1857],[421,476,493,494,951,953,999,1047,1051,1071,1074,1081,1094,1857],[421,476,493,494,1052,1094,1857],[421,476,493,494,948,951,953,998,999,1000,1020,1024,1026,1027,1035,1036,1037,1051,1058,1064,1067,1093,1117,1118,1119,1120,1121,1122,1857],[421,476,493,494,953,983,998,1052,1093,1094,1857],[421,476,493,494,940,989,999,1086,1088,1857],[421,476,493,494,952,953,998,999,1015,1024,1026,1027,1036,1037,1050,1052,1055,1056,1058,1064,1093,1094,1117,1118,1119,1120,1122,1124,1857],[421,476,493,494,1024,1857],[421,476,493,494,953,998,999,1017,1051,1052,1063,1093,1094,1118,1857],[421,476,493,494,999,1061,1857],[421,476,493,494,987,998,1059,1857],[421,476,493,494,953,1092,1093,1119,1857],[421,476,493,494,998,999,1061,1072,1077,1079,1857],[421,476,493,494,1051,1058,1119,1857],[421,476,493,494,999,1006,1857],[421,476,493,494,951,953,999,1000,1004,1005,1006,1024,1026,1027,1035,1036,1037,1047,1050,1051,1052,1055,1056,1058,1061,1062,1063,1064,1065,1066,1067,1071,1072,1093,1094,1857],[421,476,493,494,950,951,953,998,999,1000,1021,1024,1026,1027,1035,1036,1037,1050,1052,1055,1056,1058,1061,1063,1064,1067,1072,1093,1094,1118,1119,1120,1122,1857],[421,476,493,494,953,1052,1093,1094,1857],[421,476,493,494,1026,1028,1857],[421,476,493,494,940,941,942,943,944,945,946,947,954,955,956,957,958,959,960,961,962,963,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,993,994,995,996,997,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1025,1026,1027,1028,1040,1048,1049,1068,1069,1070,1075,1076,1077,1078,1083,1085,1086,1087,1088,1115,1116,1141,1142,1143,1144,1145,1146,1147,1148,1857],[421,476,493,494,959,968,971,973,974,975,977,1007,1008,1009,1010,1011,1015,1024,1025,1026,1027,1857],[421,476,493,494,948,996,1035,1036,1055,1058,1073,1091,1123,1126,1127,1128,1129,1131,1857],[421,476,493,494,1026,1027,1028,1029,1032,1034,1035,1138,1857],[421,476,493,494,1027,1032,1035,1138,1857],[421,476,493,494,1026,1027,1028,1029,1032,1034,1035,1036,1857],[421,476,493,494,1036,1857],[421,476,493,494,1026,1027,1028,1029,1032,1034,1035,1857],[421,476,493,494,959,999,1026,1027,1029,1035,1106,1857],[421,476,493,494,1107,1857],[421,476,493,494,960,998,1038,1041,1857],[421,476,493,494,954,971,998,1026,1027,1036,1037,1042,1857],[421,476,493,494,971,973,998,999,1026,1027,1036,1037,1094,1857],[421,476,493,494,971,998,999,1026,1027,1036,1037,1039,1041,1042,1043,1044,1045,1046,1095,1096,1097,1098,1857],[421,476,493,494,971,998,1026,1027,1036,1037,1857],[421,476,493,494,942,998,1857],[421,476,493,494,954,955,998,999,1038,1857],[421,476,493,494,953,973,998,999,1026,1027,1036,1037,1052,1092,1094,1857],[421,476,493,494,974,998,1026,1027,1036,1037,1857],[421,476,493,494,975,998,999,1026,1027,1036,1037,1039,1041,1042,1096,1097,1098,1857],[421,476,493,494,977,998,1026,1027,1036,1037,1857],[421,476,493,494,998,1007,1026,1027,1036,1037,1073,1107,1857],[421,476,493,494,968,998,1026,1027,1036,1037,1857],[421,476,493,494,998,1008,1026,1027,1036,1037,1857],[421,476,493,494,998,1009,1026,1027,1036,1037,1857],[421,476,493,494,998,1010,1026,1027,1036,1037,1857],[421,476,493,494,998,1011,1026,1027,1036,1037,1857],[421,476,493,494,954,961,998,1857],[421,476,493,494,962,998,1857],[421,476,493,494,998,1025,1026,1027,1036,1037,1857],[421,476,493,494,1035,1036,1099,1100,1101,1102,1103,1104,1105,1108,1109,1110,1111,1112,1857],[421,476,493,494,963,998,1857],[421,476,493,494,953,1857],[421,476,493,494,999,1857],[421,476,493,494,948,949,950,952,953,1027,1037,1857],[421,476,493,494,953,1027,1857],[421,476,493,494,948,949,950,951,952,1857],[421,476,493,494,1461,1857],[421,476,493,494,1857,3229,3230],[421,476,493,494,1857,2484],[421,476,493,494,1857,2478,2479,2480,2481,2482,2483,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518],[421,476,493,494,1857,2499],[421,476,493,494,1857,2501],[294,417,421,476,493,494,1857,2362,2387],[417,421,476,493,494,1857,2361,2362,2384],[417,421,476,493,494,1857,2388],[417,421,476,493,494,1857,2361,2362,2388],[417,421,476,493,494,1857,2385],[317,417,421,476,493,494,1857,2388],[417,421,476,493,494,1857,2362,2387],[421,476,493,494,1857,2357,2385,2386,2388,2389,2390,2391,2392,2393,2394,2395],[421,476,493,494,1857,2361,2384],[421,476,493,494,1704,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1723,1724,1857],[417,421,476,493,494,1709,1857],[260,417,421,476,493,494,1709,1857],[65,421,476,493,494,1709,1857],[417,421,476,493,494,1708,1709,1717,1857],[421,476,493,494,1707,1709,1857],[417,421,476,493,494,1707,1708,1857],[421,475,476,493,494,1705,1706,1709,1857],[417,421,476,493,494,1707,1857],[417,421,476,493,494,1722,1857],[417,421,476,493,494,1304,1857],[421,476,493,494,1704,1857],[417,421,476,493,494,895,1857],[421,476,493,494,1776,1857,2263,2264,2265,2266,2267,2270,2271],[421,476,493,494,1774,1775,1857],[317,417,421,476,493,494,1773,1857],[421,476,493,494,1775,1857],[421,476,493,494,1857,2268,2269],[421,476,493,494,1773,1775,1857],[417,421,476,493,494,1776,1857],[421,476,493,494,1857,1862],[421,476,493,494,526,1193,1194,1195,1857],[421,476,493,494,508,526,1193,1857],[421,476,493,494,1857,1939],[421,476,493,494,1857,1937,1939],[421,476,493,494,1857,1928,1936,1937,1938,1940,1942],[421,476,493,494,1857,1926],[421,476,493,494,1857,1929,1934,1939,1942],[421,476,493,494,1857,1925,1942],[421,476,493,494,1857,1929,1930,1933,1934,1935,1942],[421,476,493,494,1857,1929,1930,1931,1933,1934,1942],[421,476,493,494,1857,1926,1927,1928,1929,1930,1934,1935,1936,1938,1939,1940,1942],[421,476,493,494,1857,1942],[421,476,493,494,1857,1924,1926,1927,1928,1929,1930,1931,1933,1934,1935,1936,1937,1938,1939,1940,1941],[421,476,493,494,1857,1924,1942],[421,476,493,494,1857,1929,1931,1932,1934,1935,1942],[421,476,493,494,1857,1933,1942],[421,476,493,494,1857,1934,1935,1939,1942],[421,476,493,494,1857,1927,1937],[421,476,493,494,508,1857],[421,476,493,494,1857,1885],[421,476,488,493,494,508,1857],[421,476,493,494,1857,3184,3234,3235],[421,476,493,494,1857,3183,3184],[72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,88,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,191,192,193,195,204,206,207,208,209,210,211,213,214,216,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,421,476,493,494,1857],[117,421,476,493,494,1857],[75,76,421,476,493,494,1857],[72,73,74,76,421,476,493,494,1857],[73,76,421,476,493,494,1857],[76,117,421,476,493,494,1857],[72,76,194,421,476,493,494,1857],[74,75,76,421,476,493,494,1857],[72,76,421,476,493,494,1857],[76,421,476,493,494,1857],[75,421,476,493,494,1857],[72,75,117,421,476,493,494,1857],[73,75,76,233,421,476,493,494,1857],[75,76,233,421,476,493,494,1857],[75,241,421,476,493,494,1857],[73,75,76,421,476,493,494,1857],[85,421,476,493,494,1857],[108,421,476,493,494,1857],[129,421,476,493,494,1857],[75,76,117,421,476,493,494,1857],[76,124,421,476,493,494,1857],[75,76,117,135,421,476,493,494,1857],[75,76,135,421,476,493,494,1857],[76,176,421,476,493,494,1857],[72,76,195,421,476,493,494,1857],[201,203,421,476,493,494,1857],[72,76,194,201,202,421,476,493,494,1857],[194,195,203,421,476,493,494,1857],[201,421,476,493,494,1857],[72,76,201,202,203,421,476,493,494,1857],[217,421,476,493,494,1857],[212,421,476,493,494,1857],[215,421,476,493,494,1857],[73,75,195,196,197,198,421,476,493,494,1857],[117,195,196,197,198,421,476,493,494,1857],[195,197,421,476,493,494,1857],[75,196,197,199,200,204,421,476,493,494,1857],[72,75,421,476,493,494,1857],[76,219,421,476,493,494,1857],[77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,421,476,493,494,1857],[205,421,476,493,494,1857],[421,476,493,494,1857,1924,3218],[421,476,493,494,1857,3205],[421,476,493,494,1857,3201,3218],[421,476,493,494,1857,3200,3201,3202,3205,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226],[421,476,493,494,1857,3222],[421,476,493,494,1857,3200,3202,3205,3223,3224],[421,476,493,494,1857,3221,3225],[421,476,493,494,1857,3200,3203,3204],[421,476,493,494,1857,3203],[421,476,493,494,1857,3200,3201,3202,3205,3217],[421,476,493,494,1857,3206,3211,3217],[421,476,493,494,1857,3217],[421,476,493,494,1857,3206,3217],[421,476,493,494,1857,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216],[421,476,488,490,493,494,1857],[421,476,493,494,1353,1857],[421,476,493,494,1353,1354,1857],[421,476,493,494,1349,1857],[421,476,493,494,1351,1355,1356,1857],[421,476,490,493,494,1348,1350,1351,1358,1360,1857],[421,476,490,491,492,493,494,1348,1350,1351,1355,1356,1357,1358,1359,1857],[421,476,493,494,1351,1352,1355,1357,1358,1360,1857],[421,476,490,493,494,502,1857],[421,476,490,493,494,1348,1350,1351,1352,1355,1356,1357,1359,1857],[421,476,493,494,1857,2594,2597],[421,476,493,494,1857,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624],[421,476,493,494,1857,2597,2602,2603],[421,476,493,494,1857,2594,2598,2599,2601],[421,476,493,494,1857,2600],[421,476,493,494,1857,2594,2597,2598,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2626,2627,2628],[421,476,493,494,1857,2604],[421,476,493,494,1857,2596,2597],[421,476,493,494,1857,2595,2596],[421,476,493,494,1857,2597],[421,476,493,494,1857,2596],[421,476,493,494,1857,2598,2604,2625],[421,476,493,494,1857,2598],[421,476,493,494,1857,3196],[421,476,493,494,1857,2707],[421,476,493,494,1857,2313],[421,434,437,440,441,476,493,494,519,1857],[421,437,476,493,494,508,519,1857],[421,437,441,476,493,494,519,1857],[421,431,476,493,494,1857],[421,435,476,493,494,1857],[421,433,434,437,476,493,494,519,1857],[421,476,493,494,496,516,1857],[421,431,476,493,494,526,1857],[421,433,437,476,493,494,496,519,1857],[421,428,429,430,432,436,476,487,493,494,508,519,1857],[421,437,445,453,476,493,494,1857],[421,429,435,476,493,494,1857],[421,437,462,463,476,493,494,1857],[421,429,432,437,476,493,494,511,519,526,1857],[421,437,476,493,494,1857],[421,433,437,476,493,494,519,1857],[421,428,476,493,494,1857],[421,431,432,433,435,436,437,438,439,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,463,464,465,466,467,476,493,494,1857],[421,437,455,458,476,484,493,494,1857],[421,437,445,446,447,476,493,494,1857],[421,435,437,446,448,476,493,494,1857],[421,436,476,493,494,1857],[421,429,431,437,476,493,494,1857],[421,437,441,446,448,476,493,494,1857],[421,441,476,493,494,1857],[421,435,437,440,476,493,494,519,1857],[421,429,433,437,445,476,493,494,1857],[421,437,455,476,493,494,1857],[421,448,476,493,494,1857],[421,431,437,462,476,493,494,511,524,526,1857],[421,476,493,494,1857,3240,3241],[421,476,493,494,1857,3240],[421,476,493,494,1857,3180],[421,476,487,488,490,491,492,493,494,496,508,516,519,525,526,1857,3180,3181,3182,3184,3185,3187,3188,3198,3199,3228,3232,3233,3234,3235],[421,476,493,494,1857,3180,3181,3182,3186],[421,476,493,494,1857,3182],[421,476,493,494,1857,3227],[421,476,493,494,1857,3231],[421,476,493,494,1857,3197],[421,476,493,494,1857,3184,3235],[421,476,493,494,1857,2715,3252,3253,3262],[421,476,493,494,1857,2704,2712,2715,3245,3246,3262],[421,476,493,494,1857,3255],[421,476,493,494,1857,3178],[421,476,493,494,1857,2704,2715,3179,3245,3254,3261,3262],[421,476,493,494,1857,3238],[421,476,479,488,493,494,508,1857,2704,2709,2712,2715,3179,3235,3238,3239,3242,3245,3247,3248,3251,3254,3256,3257,3262,3263],[421,476,493,494,1857,2715,3252,3253,3254,3262],[421,476,493,494,1857,3235,3258,3263],[421,476,493,494,1857,2715,3179,3242,3245,3247,3262],[421,476,493,494,524,1857,3248],[421,476,479,488,493,494,508,524,1857,2704,2709,2712,2715,3178,3179,3235,3238,3239,3242,3245,3246,3247,3248,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3270],[421,476,493,494,1857,3271],[421,476,493,494,1857,3177],[421,476,488,493,494,534,554,555,556,557,558,610,1779,1781,1845,1857,2274,2343,2351,2355],[417,421,476,493,494,609,610,1304,1378,1524,1682,1725,1779,1781,1782,1786,1852,1857,1873,1966,2047,2078,2272,2274,2276,2306,2316,2317,2322,2323,2347,2351,2397,2407,2426,2448,2533,2563,2564,2565,2566,2567,2568,2580,2581],[421,476,493,494,554,1304,1845,1857,2582],[417,421,476,489,493,494,498,1304,1331,1378,1524,1725,1779,1781,1786,1853,1857,1865,1964,2080,2272,2316,2568,2593,2629],[421,476,493,494,1857,2396,2397],[421,476,493,494,1857,2398,2399,2400,2401,2402,2403,2404,2405,2406],[421,476,493,494,1857,1861,2396,2397],[421,476,493,494,610,1200,1857,2396,2397],[421,476,493,494,1857,2342,2396],[421,476,493,494,609,1378,1850,1857],[421,476,488,493,494,498,568,608,609,1857],[417,421,476,493,494,535,609,939,1521,1525,1853,1857,2317,2408,2409],[417,421,476,493,494,609,939,1521,1522,1525,1853,1857,1868,2317,2413],[417,421,476,493,494,609,939,1521,1525,1853,1857,2317,2415,2416],[417,421,476,493,494,939,1857,2419],[417,421,476,493,494,535,609,939,1521,1525,1781,1847,1848,1850,1853,1857,2317,2346,2421,2422,2423,2426],[417,421,476,493,494,609,939,1521,1525,1532,1847,1853,1856,1857,2317,2319,2428],[417,421,476,493,494,609,939,1525,1853,1857,2317,2430],[417,421,476,493,494,535,609,939,1525,1853,1857,1861,2316,2317,2432],[417,421,476,493,494,535,554,609,939,1521,1781,1853,1857,2316,2317,2344,2346,2347,2432,2434],[417,421,476,493,494,609,939,1525,1853,1857,2317,2346,2436,2437],[417,421,476,493,494,609,939,1521,1522,1525,1853,1857,2317,2439,2441],[417,421,476,493,494,609,939,1521,1525,1853,1857,1859,2317,2443],[421,476,493,494,1857,2410,2414,2417,2420,2427,2429,2431,2433,2435,2438,2442,2444,2449,2451,2452,2455,2457,2459,2461,2462,2465,2466,2475,2476,2521,2524,2527,2528,2531,2536,2539,2540,2543,2548,2551,2553,2557,2559,2562],[417,421,476,493,494,609,939,1525,1853,1857,1959,2317,2445,2446,2447,2448],[417,421,476,493,494,609,939,1521,1853,1857,1961,2317,2450],[417,421,476,493,494,535,609,939,1525,1849,1853,1857,2316,2317,2432,2434],[417,421,476,493,494,609,939,1525,1853,1857,2317,2453,2454],[417,421,476,493,494,609,939,1521,1522,1525,1853,1857,2034,2317,2456],[417,421,476,493,494,609,939,1525,1853,1857,1958,2040,2304,2317,2458],[417,421,476,493,494,609,939,1521,1525,1853,1857,2040,2317,2460],[417,421,476,493,494,609,939,1521,1525,1853,1857,2317,2463,2464],[417,421,476,493,494,535,609,939,1521,1522,1525,1781,1853,1857,1859,2317,2346,2443],[417,421,476,493,494,609,939,1521,1853,1857,2317,2467,2474],[417,421,476,493,494,609,939,1525,1853,1857,1959,2317,2448],[417,421,476,493,494,609,939,1525,1853,1857,1859,2317,2319,2477,2520],[417,421,476,493,494,609,939,1853,1857,2305,2317,2342,2348,2349,2522,2523],[417,421,476,493,494,609,939,1521,1525,1853,1857,2317,2525,2526],[417,421,476,493,494,535,609,939,1521,1522,1525,1781,1847,1853,1857,2316,2317,2340,2341,2432],[417,421,476,493,494,609,939,1521,1522,1525,1853,1857,2317,2529,2530],[417,421,476,493,494,535,609,939,1525,1844,1853,1857,2317,2319,2533,2535],[417,421,476,493,494,609,939,1853,1857,2304,2317,2419,2538],[417,421,476,493,494,609,939,1853,1857,2317,2522,2523],[417,421,476,493,494,609,939,1521,1522,1525,1853,1857,1860,2317,2542],[417,421,476,493,494,609,939,1525,1853,1857,2317,2546,2547],[417,421,476,493,494,609,939,1522,1525,1853,1857,2317,2549,2550],[417,421,476,493,494,609,939,1521,1525,1847,1853,1857,1861,2317,2411,2525,2552],[417,421,476,493,494,535,609,939,1521,1525,1781,1853,1857,1861,2317,2346,2348,2411,2426,2554,2555,2556],[417,421,476,493,494,609,939,1525,1853,1857,2317,2319,2558],[417,421,476,493,494,609,939,1521,1525,1853,1857,2317,2560,2561],[421,476,481,493,494,498,609,1779,1781,1846,1857,1882,1966,2039,2044,2078,2310,2318,2320],[421,476,493,494,609,895,1783,1787,1788,1821,1822,1837,1850,1857,2319],[417,421,476,493,494,609,939,1200,1213,1527,1778,1852,1857],[421,476,493,494,939,1519,1521,1857,1861,2320],[421,476,493,494,609,895,939,1213,1331,1519,1521,1522,1525,1850,1854,1857,1861,2319,2320],[421,476,493,494,609,939,1519,1521,1857],[421,476,493,494,939,1521,1857],[417,421,476,493,494,609,939,1331,1519,1521,1847,1857],[421,476,493,494,609,895,939,1521,1525,1532,1850,1853,1854,1855,1857,1859,1860,1861,1875,2312,2318,2320],[421,476,493,494,609,939,1331,1519,1521,1522,1846,1853,1857],[421,476,493,494,609,939,1331,1519,1521,1850,1857,2320],[421,476,493,494,939,1519,1521,1857],[421,476,493,494,939,1519,1857],[421,476,493,494,939,1519,1521,1847,1857],[421,476,493,494,939,1331,1519,1521,1857,2319],[421,476,493,494,939,1331,1519,1521,1857],[421,476,493,494,609,1331,1519,1521,1857],[421,476,493,494,939,1850,1854,1857,2320],[421,476,493,494,609,1521,1857],[421,476,493,494,939,1519,1521,1857,2320],[421,476,493,494,609,939,1331,1519,1521,1525,1853,1857,2319,2320],[421,476,493,494,939,1857],[421,476,493,494,1521,1857],[421,476,493,494,939,1519,1521,1857,1861,2043],[421,476,493,494,568,609,895,939,1331,1519,1521,1525,1532,1801,1850,1853,1854,1857,1858,2320],[421,476,493,494,609,939,1331,1519,1521,1821,1857],[421,476,493,494,609,939,1519,1521,1821,1857,2320],[421,476,493,494,609,939,1857,1959],[421,476,493,494,609,939,1521,1853,1857],[421,476,493,494,609,939,1331,1519,1521,1853,1857,1868,2319,2320],[421,476,493,494,608,939,1857,2304],[421,476,493,494,609,939,1519,1521,1853,1857,1868,2319,2320],[421,476,493,494,939,1519,1521,1525,1857,2319,2320],[421,476,493,494,609,939,1519,1521,1532,1850,1857,2319],[421,476,493,494,609,939,1331,1519,1521,1850,1851,1857,1963],[421,476,493,494,939,1519,1521,1850,1854,1857,2320],[421,476,493,494,609,939,1519,1521,1857,2544,2545],[421,476,493,494,609,939,1331,1519,1521,1850,1857],[421,476,493,494,939,1848,1857],[421,476,493,494,609,939,1331,1519,1521,1850,1854,1857,2320],[421,476,493,494,609,939,1331,1519,1521,1821,1857,2320],[421,476,493,494,1857,1904,1949,1950,1952,1953,1958],[421,476,493,494,1857,1904,1949],[421,476,493,494,1857,1904,1949,1951],[421,476,493,494,1857,1904,1949,1950,2631],[421,476,493,494,1857,1904,1949,1952,1958],[421,476,477,493,494,498,524,609,895,1191,1779,1786,1838,1857,1966,2396,2582],[417,421,476,493,494,535,609,1304,1781,1849,1857,2351],[417,421,476,477,493,494,498,610,1857],[417,421,476,493,494,1360,1781,1849,1852,1857,1873,2303],[417,421,476,493,494,535,554,609,1521,1781,1849,1857,2305,2316,2317,2344,2346,2347,2351,2432,2435,2524,2564],[417,421,476,488,490,493,494,535,609,610,611,644,1779,1781,1782,1845,1849,1850,1857,1873,1966,2047,2078,2305,2310,2311,2321,2322,2323,2342,2343,2347,2349,2350],[260,417,421,476,493,494,535,609,1857,2315,2317,2421,2422],[417,421,476,493,494,535,609,939,1304,1525,1781,1857,2315,2316],[260,417,421,476,493,494,1781,1845,1857,2532],[260,342,417,421,476,481,493,494,498,508,535,609,1304,1781,1848,1850,1857,2078,2317,2318,2422,2424,2425],[417,421,476,493,494,535,1725,1781,1857,2532],[260,417,421,476,493,494,535,1781,1857],[417,421,476,493,494,1360,1703,1779,1857,1872,2354],[421,476,493,494,609,1857],[417,421,476,493,494,609,895,1524,1786,1838,1853,1857],[417,421,476,493,494,609,895,1523,1524,1786,1790,1838,1853,1857,2320],[417,421,476,493,494,609,895,1524,1794,1838,1853,1857],[417,421,476,493,494,895,1523,1524,1783,1786,1788,1838,1853,1857,1868,2320],[417,421,476,493,494,895,1523,1524,1786,1795,1838,1853,1857,2320],[417,421,476,493,494,609,1360,1703,1779,1852,1857,1872],[417,421,476,493,494,895,1524,1532,1838,1853,1857,2320],[417,421,476,493,494,609,895,1523,1524,1786,1838,1853,1857,1875,2320],[417,421,476,493,494,609,895,1213,1523,1524,1525,1783,1786,1787,1802,1803,1805,1838,1845,1853,1857,2320],[417,421,476,493,494,609,895,1524,1838,1853,1857],[417,421,476,488,493,494,498,535,557,609,610,1200,1331,1519,1650,1682,1703,1725,1776,1777,1778,1850,1853,1857],[417,421,476,493,494,1369,1378,1781,1857],[417,421,476,481,488,493,494,1857,1879,1881],[417,421,476,489,493,494,498,608,609,610,895,1200,1521,1524,1527,1533,1779,1781,1786,1838,1850,1853,1857],[417,421,476,493,494,609,895,1524,1786,1838,1857],[417,421,476,493,494,609,895,1523,1524,1782,1783,1786,1838,1853,1857,2319,2320],[417,421,476,493,494,1781,1850,1857,1887,1901,1904,1954,1955,1956,1957],[417,421,476,493,494,609,1213,1304,1331,1360,1525,1779,1781,1850,1851,1853,1857,2320],[421,476,493,494,1779,1781,1782,1785,1846,1852,1857,1864,1865,1866,1867,1869,1870,1873,1874,1876,1877,1878,1882,1883,1884,1958,1960,1962,1964,1966,1967,2033,2035,2038,2039,2041,2042,2043,2044,2046,2047,2048,2049,2050,2051,2052,2078,2079,2080,2081,2274,2275,2276,2277,2278,2306,2307],[417,421,476,493,494,515,609,1304,1331,1650,1682,1779,1781,1845,1850,1852,1853,1857,1959],[417,421,476,493,494,609,895,1524,1529,1838,1853,1857,1961],[417,421,476,493,494,609,1725,1779,1780,1853,1857],[417,421,476,489,493,494,568,1781,1851,1857,1963],[417,421,476,488,489,493,494,503,609,610,895,1524,1779,1781,1809,1815,1838,1853,1857,1965,1966],[417,421,476,489,493,494,508,568,609,610,1532,1781,1845,1850,1857,1858,2029,2030,2031,2032,2320],[417,421,476,493,494,568,609,895,1523,1524,1810,1838,1850,1853,1857,2034],[417,421,476,493,494,1781,1857,1875,2029,2037],[417,421,476,493,494,609,895,1524,1814,1838,1853,1857],[421,476,493,494,568,895,1524,1816,1838,1853,1857,2040,2320],[417,421,476,493,494,609,1781,1857,1863],[417,421,476,493,494,895,1524,1806,1838,1853,1856,1857],[417,421,476,493,494,895,1523,1524,1819,1838,1853,1857,2320],[417,421,476,493,494,609,895,1523,1524,1784,1786,1800,1801,1808,1838,1853,1857,2320],[417,421,476,489,493,494,895,1523,1524,1838,1853,1857,2045,2320],[417,421,476,477,493,494,508,1857],[417,421,476,481,493,494,609,895,1521,1524,1782,1783,1784,1786,1838,1853,1857,2319],[417,421,476,477,489,493,494,520,1779,1781,1857,2029,2031],[417,421,476,493,494,568,895,1523,1524,1786,1823,1838,1853,1857,2320],[421,476,493,494,895,1524,1838,1853,1857],[417,421,476,493,494,609,895,1213,1523,1524,1783,1787,1824,1838,1853,1857,2320],[417,421,476,493,494,895,1523,1524,1530,1786,1838,1853,1857,2320],[417,421,476,488,489,493,494,498,508,525,1781,1857,1875,1961,2054,2057,2077],[417,421,476,493,494,609,895,1524,1828,1838,1853,1857],[417,421,476,493,494,895,1524,1838,1850,1853,1857,2320],[417,421,476,489,493,494,895,1524,1829,1838,1850,1853,1857],[417,421,476,493,494,895,1524,1781,1830,1831,1838,1853,1857,2320],[417,421,476,493,494,609,610,1213,1304,1331,1773,1779,1781,1857,2085,2129,2159,2163,2188,2191,2194,2200,2254,2262,2272,2273],[421,476,493,494,609,895,1524,1838,1853,1857],[417,421,476,493,494,568,609,895,1523,1524,1528,1786,1838,1850,1853,1857,2320],[417,421,476,493,494,895,1524,1836,1838,1853,1857],[421,476,493,494,609,895,1524,1786,1838,1853,1857],[417,421,476,493,494,1360,1525,1781,1844,1845,1852,1857,2040,2303,2305,2319],[417,421,476,493,494,609,895,1524,1837,1838,1853,1857],[421,476,493,494,609,1200,1857],[421,476,493,494,1200,1857],[421,476,493,494,1200,1526,1527,1528,1529,1530,1783,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1857],[421,476,493,494,609,610,895,1781,1782,1786,1857],[421,476,493,494,609,895,1857],[421,476,493,494,895,1781,1857],[421,476,493,494,895,1786,1857],[421,476,493,494,1200,1528,1787,1788,1789,1853,1857],[421,476,493,494,1200,1788,1853,1857],[421,476,493,494,1200,1527,1787,1788,1853,1857],[421,476,493,494,1200,1853,1857],[421,476,493,494,609,1200,1527,1528,1788,1853,1857],[421,476,493,494,609,1200,1527,1528,1787,1853,1857],[421,476,493,494,609,1200,1528,1853,1857],[421,476,493,494,1200,1527,1532,1787,1853,1857],[421,476,493,494,1200,1787,1853,1857,2320],[421,476,493,494,609,1200,1526,1527,1787,1800,1853,1857],[421,476,493,494,609,1200,1787,1853,1857],[421,476,493,494,1200,1787,1857],[421,476,493,494,609,1200,1527,1787,1853,1857],[421,476,493,494,609,1200,1526,1527,1528,1529,1530,1786,1853,1857],[421,476,493,494,1200,1801,1857],[421,476,493,494,1200,1528,1853,1857],[421,476,493,494,1200,1810,1853,1857],[421,476,493,494,1200,1527,1787,1810,1853,1857],[421,476,493,494,609,1200,1527,1528,1853,1857],[421,476,493,494,1200,1527,1528,1853,1857],[421,476,493,494,1200,1527,1528,1801,1853,1857],[421,476,493,494,609,1200,1821,1857],[421,476,493,494,1200,1787,1824,1857],[421,476,493,494,609,1200,1528,1788,1857],[421,476,493,494,1200,1527,1528,1787,1853,1857],[421,476,493,494,609,1200,1823,1853,1857],[421,476,493,494,609,1200,1850,1857],[421,476,493,494,1200,1787,1830,1857],[421,476,493,494,1200,1830,1857],[421,476,493,494,609,1200,1853,1857],[421,476,493,494,609,1200,1527,1528,1850,1853,1857],[421,476,493,494,609,895,1200,1527,1853,1857],[421,476,493,494,609,1200,1528,1821,1822,1857],[417,421,476,493,494,609,1525,1857,2311,2320,2408],[417,421,476,493,494,609,1522,1525,1854,1857,1868,1869,2311,2318,2412],[417,421,476,493,494,609,1525,1857,2308,2311,2320,2415],[417,421,476,488,493,494,535,610,1378,1779,1781,1845,1857,2316,2339,2341,2342],[417,421,476,493,494,498,609,1520,1525,1786,1847,1848,1850,1857,1875,2308,2311,2315,2317,2318,2320,2321,2346,2421],[417,421,476,493,494,568,609,610,1213,1525,1532,1786,1847,1850,1853,1854,1856,1857,1858,2308,2311,2318,2319,2320],[417,421,476,493,494,568,609,610,1853,1857,2311],[417,421,476,493,494,1525,1857,2311],[417,421,476,490,493,494,498,568,609,610,611,1519,1525,1857,1861,1864,1875,2308,2311,2312,2315,2320,2321],[417,421,476,493,494,610,895,1520,1528,1779,1781,1782,1785,1846,1851,1852,1857,1864,1865,1866,1867,1869,1870,1873,1874,1876,1877,1878,1882,1883,1884,1958,1960,1962,1964,1966,1967,2033,2035,2038,2039,2041,2042,2043,2044,2046,2047,2048,2049,2050,2051,2052,2078,2079,2080,2081,2274,2275,2276,2277,2278,2306,2307,2308,2310,2320,2321],[417,421,476,493,494,498,609,610,1200,1845,1849,1857,1861,2311,2350],[417,421,476,493,494,498,508,509,568,608,609,610,1213,1779,1781,1782,1845,1852,1853,1857,1878,1960,1966,2047,2078,2276,2310,2321,2322,2344,2345,2346],[417,421,476,493,494,608,609,610,1850,1853,1857,2311],[417,421,476,493,494,498,609,1525,1857,2078,2311,2312,2321,2412,2436],[417,421,476,493,494,609,610,1522,1525,1785,1845,1850,1853,1857,2311,2319,2439,2440],[421,476,493,494,1857,2316,2341,2342,2343,2347,2349,2397,2409,2413,2416,2419,2422,2428,2430,2434,2437,2441,2443,2447,2448,2450,2454,2456,2458,2460,2464,2474,2520,2523,2526,2530,2535,2538,2542,2547,2550,2552,2556,2558,2561,2569,2570,2573,2575,2576,2577,2578,2579],[417,421,476,493,494,609,1850,1852,1853,1857,2311,2312,2319,2445],[417,421,476,480,488,493,494,498,609,610,895,1787,1843,1845,1850,1852,1853,1857,1875,1961,1962,2311,2321],[417,421,476,493,494,609,1845,1849,1850,1852,1853,1857,2311,2350],[417,421,476,493,494,1525,1857,2311,2318,2453],[417,421,476,493,494,609,610,1532,1845,1850,1851,1853,1857,1858,1875,1876,1964,2304,2311,2318,2320,2321,2571,2572],[417,421,476,493,494,568,609,1522,1525,1853,1857,2034,2311,2318],[417,421,476,488,489,493,494,498,568,609,610,895,1213,1783,1786,1800,1801,1845,1850,1852,1853,1854,1857,1875,1967,2029,2038,2311,2318,2320,2321,2541,2574],[417,421,476,493,494,609,1525,1845,1857,1958,2040,2304,2311],[417,421,476,493,494,609,1525,1845,1850,1852,1853,1857,1868,1958,2040,2304,2311,2319,2346,2412,2418],[417,421,476,493,494,609,610,1786,1845,1850,1853,1857,1964,2311],[417,421,476,493,494,609,1525,1857,1861,2043,2311,2320,2463],[417,421,476,493,494,609,610,895,1522,1525,1801,1808,1845,1850,1853,1857,1858,1859,1875,1964,2044,2311,2318,2320,2346],[417,421,476,493,494,609,895,1781,1787,1846,1857,1865,1869,1882,2308,2471],[417,421,476,493,494,498,609,1331,1519,1850,1852,1853,1857,2045,2311,2320,2467,2471,2472,2473],[417,421,476,493,494,609,1331,1525,1845,1850,1851,1852,1853,1857,1959,2311,2446],[417,421,476,493,494,609,1525,1845,1857,1859,2308,2311,2318,2319,2477,2519],[417,421,476,493,494,609,610,1845,1853,1857,1875,2276,2305,2311,2312,2321,2348],[417,421,476,493,494,568,609,1525,1852,1853,1857,2311,2525],[417,421,476,493,494,609,1191,1522,1525,1845,1847,1857,2311,2340],[417,421,476,493,494,609,610,1845,1850,1851,1852,1853,1857,2311],[417,421,476,493,494,609,1521,1522,1525,1857,2311,2529],[417,421,476,493,494,498,568,609,1520,1850,1852,1853,1857,2304,2311,2318,2321,2346,2537],[417,421,476,493,494,498,609,610,1845,1850,1853,1857,2311,2321],[417,421,476,493,494,508,568,609,610,895,1525,1778,1828,1844,1850,1853,1857,2080,2311,2312,2318,2319,2534],[417,421,476,493,494,609,1213,1331,1851,1852,1853,1857,2304,2310,2311,2418],[417,421,476,493,494,609,1857,2311,2522],[417,421,476,493,494,609,895,1522,1525,1786,1831,1853,1857,1860,2311,2318,2541],[421,476,493,494,609,1213,1852,1853,1857,2311],[417,421,476,493,494,609,1525,1846,1857,2308,2311,2318,2546],[417,421,476,493,494,609,610,1522,1525,1853,1857,2311,2549],[417,421,476,493,494,609,610,1525,1847,1857,1861,2276,2311,2411,2412,2525],[417,421,476,493,494,568,609,610,895,1525,1528,1850,1853,1857,1861,2276,2311,2321,2346,2348,2411,2412,2554,2555],[417,421,476,493,494,568,608,609,610,1850,1852,1853,1857,2305,2311],[417,421,476,493,494,1525,1857,2311,2319],[417,421,476,493,494,609,1525,1857,2311,2320,2472,2560],[421,476,493,494,609,610,895,1525,1532,1848,1849,1851,1857,2320],[417,421,476,493,494,609,1525,1778,1857,1865,2320],[417,421,476,493,494,609,1522,1525,1846,1848,1850,1852,1857,1865,2043,2308,2317,2320,2321],[417,421,476,493,494,939,1331,1519,1521,1853,1857,2544],[421,476,493,494,609,1213,1331,1519,1533,1779,1781,1845,1850,1851,1857,1966,2304,2309],[421,476,493,494,609,895,1191,1200,1523,1531,1532,1783,1785,1838,1850,1857,2320],[421,476,493,494,568,1857],[421,476,493,494,1857,2319],[421,476,493,494,1850,1856,1857,2320],[421,476,493,494,610,1857],[417,421,476,489,493,494,498,520,535,609,1781,1845,1857,2078],[417,421,476,493,494,1781,1857],[421,476,481,493,494,498,609,644,1360,1703,1779,1849,1852,1857,1872,2078,2321],[421,476,493,494,609,610,1850,1857,2304],[421,476,493,494,498,609,1857],[417,421,476,488,493,494,498,609,610,898,939,1213,1781,1840,1843,1844,1851,1857],[421,476,493,494,1213,1857],[421,476,493,494,609,1213,1845,1850,1857,2312,2411],[421,476,490,493,494,1857,2314],[421,476,493,494,535,568,609,1525,1857],[421,476,493,494,609,1844,1850,1857],[421,476,493,494,1857,2081,2320],[421,476,493,494,1532,1850,1856,1857],[417,421,476,493,494,568,939,1331,1369,1421,1519,1520,1853,1857],[421,476,493,494,554,1304,1845,1857,1873,2343,2356,2582],[421,476,493,494,554,1304,1845,1857,1873,2351,2356,2582],[421,476,493,494,524,610,1304,1779,1781,1845,1857,1873,2274,2355,2582]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d8dedbec739bc79642c1e96e9bfc0b83b25b104a0486aebf016fc7b85b39f48","impliedFormat":1},{"version":"e89535c3ec439608bcd0f68af555d0e5ddf121c54abe69343549718bd7506b9c","impliedFormat":1},{"version":"622a984b60c294ffb2f9152cf1d4d12e91d2b733d820eec949cf54d63a3c1025","impliedFormat":1},{"version":"81aae92abdeaccd9c1723cef39232c90c1aed9d9cf199e6e2a523b7d8e058a11","impliedFormat":1},{"version":"a63a6c6806a1e519688ef7bd8ca57be912fc0764485119dbd923021eb4e79665","impliedFormat":1},{"version":"75b57b109d774acca1e151df21cf5cb54c7a1df33a273f0457b9aee4ebd36fb9","impliedFormat":1},{"version":"073ca26c96184db9941b5ec0ddea6981c9b816156d9095747809e524fdd90e35","impliedFormat":1},{"version":"e41d17a2ec23306d953cda34e573ed62954ca6ea9b8c8b74e013d07a6886ce47","impliedFormat":1},{"version":"241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","impliedFormat":1},{"version":"2ae3787e1498b20aad1b9c2ee9ea517ec30e89b70d242d8e3e52d1e091039695","impliedFormat":1},{"version":"c7c72c4cffb1bc83617eefed71ed68cc89df73cab9e19507ccdecb3e72b4967e","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","impliedFormat":1},{"version":"38b38db08e7121828294dec10957a7a9ff263e33e2a904b346516d4a4acca482","impliedFormat":1},{"version":"a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","impliedFormat":1},{"version":"8a2aaea564939c22be05d665cc955996721bad6d43148f8fa21ae8f64afecd37","impliedFormat":1},{"version":"e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","impliedFormat":1},{"version":"e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","impliedFormat":1},{"version":"95950a187596e206d32d5d9c7b932901088c65ed8f9040e614aa8e321e0225ef","impliedFormat":1},{"version":"89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","impliedFormat":1},{"version":"e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","impliedFormat":1},{"version":"71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","impliedFormat":1},{"version":"7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","impliedFormat":1},{"version":"78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","impliedFormat":1},{"version":"5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","impliedFormat":1},{"version":"f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","impliedFormat":1},{"version":"9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","impliedFormat":1},{"version":"3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","impliedFormat":1},{"version":"2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","impliedFormat":1},{"version":"4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","impliedFormat":1},{"version":"61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","impliedFormat":1},{"version":"64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","impliedFormat":1},{"version":"0521108c9f8ddb17654a0a54dae6ba9667c99eddccfd6af5748113e022d1c37a","impliedFormat":1},{"version":"c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","impliedFormat":1},{"version":"ee764e6e9a7f2b987cc1a2c0a9afd7a8f4d5ebc4fdb66ad557a7f14a8c2bd320","impliedFormat":1},{"version":"0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","impliedFormat":1},{"version":"5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","impliedFormat":1},{"version":"e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","impliedFormat":1},{"version":"b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","impliedFormat":1},{"version":"6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","impliedFormat":1},{"version":"d7058e75920120b142a9d57be25562a3cd9a936269fd52908505f530105f2ec4","impliedFormat":1},{"version":"6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","impliedFormat":1},{"version":"0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","impliedFormat":1},{"version":"91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","impliedFormat":1},{"version":"db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","impliedFormat":1},{"version":"758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","impliedFormat":1},{"version":"2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","impliedFormat":1},{"version":"6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","impliedFormat":1},{"version":"a472a1d3f25ce13a1d44911cd3983956ac040ce2018e155435ea34afb25f864c","impliedFormat":1},{"version":"b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","impliedFormat":1},{"version":"792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","impliedFormat":1},{"version":"a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","impliedFormat":1},{"version":"93181bac0d90db185bb730c95214f6118ae997fe836a98a49664147fbcaf1988","impliedFormat":1},{"version":"8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","impliedFormat":1},{"version":"b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","impliedFormat":1},{"version":"4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","impliedFormat":1},{"version":"cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","impliedFormat":1},{"version":"75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","impliedFormat":1},{"version":"b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","impliedFormat":1},{"version":"c54166a85bd60f86d1ebb90ce0117c0ecb850b8a33b366691629fdf26f1bbbd8","impliedFormat":1},{"version":"0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","impliedFormat":1},{"version":"80f23f1d60fbed356f726b3b26f9d348dddbb34027926d10d59fad961e70a730","impliedFormat":1},{"version":"cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","impliedFormat":1},{"version":"cc20bb2227dd5de0aab0c8d697d1572f8000550e62c7bf5c92f212f657dd88c5","impliedFormat":1},{"version":"06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","impliedFormat":1},{"version":"860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","impliedFormat":1},{"version":"f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","impliedFormat":1},{"version":"d0da80c845999a16c24d0783033fb5366ada98df17867c98ad433ede05cd87fd","impliedFormat":1},{"version":"bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","impliedFormat":1},{"version":"fd9a991b51870325e46ebb0e6e18722d313f60cd8e596e645ec5ac15b96dbf4e","impliedFormat":1},{"version":"c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","impliedFormat":1},{"version":"a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","impliedFormat":1},{"version":"d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","impliedFormat":1},{"version":"fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","impliedFormat":1},{"version":"063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","impliedFormat":1},{"version":"314e402cd481370d08f63051ae8b8c8e6370db5ee3b8820eeeaaf8d722a6dac6","impliedFormat":1},{"version":"9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","impliedFormat":1},{"version":"4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","impliedFormat":1},{"version":"656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","impliedFormat":1},{"version":"3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","impliedFormat":1},{"version":"1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","impliedFormat":1},{"version":"af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","impliedFormat":1},{"version":"70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","impliedFormat":1},{"version":"af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","impliedFormat":1},{"version":"cefc20054d20b85b534206dbcedd509bb74f87f3d8bc45c58c7be3a76caa45e1","impliedFormat":1},{"version":"ad6eee4877d0f7e5244d34bc5026fd6e9cf8e66c5c79416b73f9f6ebf132f924","impliedFormat":1},{"version":"4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","impliedFormat":1},{"version":"f4749c102ced952aa6f40f0b579865429c4869f6d83df91000e98005476bee87","impliedFormat":1},{"version":"56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","impliedFormat":1},{"version":"8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","impliedFormat":1},{"version":"05f56cd4b929977d18df8f3d08a4c929a2592ef5af083e79974b20a063f30940","impliedFormat":1},{"version":"547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","impliedFormat":1},{"version":"b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","impliedFormat":1},{"version":"3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","impliedFormat":1},{"version":"140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","impliedFormat":1},{"version":"0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","impliedFormat":1},{"version":"cb46b38d5e791acaa243bf342b8b5f8491639847463ac965b93896d4fb0af0d9","impliedFormat":1},{"version":"7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","impliedFormat":1},{"version":"af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","impliedFormat":1},{"version":"006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","impliedFormat":1},{"version":"7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","impliedFormat":1},{"version":"339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","impliedFormat":1},{"version":"34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","impliedFormat":1},{"version":"9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","impliedFormat":1},{"version":"18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","impliedFormat":1},{"version":"5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","impliedFormat":1},{"version":"5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","impliedFormat":1},{"version":"907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","impliedFormat":1},{"version":"ce60a562cd2a92f37a88f2ddd99a3abfbc5848d7baf38c48fb8d3243701fcb75","impliedFormat":1},{"version":"a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","impliedFormat":1},{"version":"f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","impliedFormat":1},{"version":"75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","impliedFormat":1},{"version":"9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","impliedFormat":1},{"version":"b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","impliedFormat":1},{"version":"b6e2b0448ced813b8c207810d96551a26e7d7bb73255eea4b9701698f78846d6","impliedFormat":1},{"version":"8ae10cd85c1bd94d2f2d17c4cbd25c068a4b2471c70c2d96434239f97040747a","impliedFormat":1},{"version":"9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","impliedFormat":1},{"version":"b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","impliedFormat":1},{"version":"e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","impliedFormat":1},{"version":"ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","impliedFormat":1},{"version":"8776a368617ce51129b74db7d55c3373dadcce5d0701e61d106e99998922a239","impliedFormat":1},{"version":"5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","impliedFormat":1},{"version":"9108ab5af05418f599ab48186193b1b07034c79a4a212a7f73535903ba4ca249","impliedFormat":1},{"version":"bb4e2cdcadf9c9e6ee2820af23cee6582d47c9c9c13b0dca1baaffe01fbbcb5f","impliedFormat":1},{"version":"6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","impliedFormat":1},{"version":"423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","impliedFormat":1},{"version":"fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","impliedFormat":1},{"version":"2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","impliedFormat":1},{"version":"c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","impliedFormat":1},{"version":"02ae43d5bae42efcd5a00d3923e764895ce056bca005a9f4e623aa6b4797c8af","impliedFormat":1},{"version":"db6e01f17012a9d7b610ae764f94a1af850f5d98c9c826ad61747dca0fb800bd","impliedFormat":1},{"version":"8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","impliedFormat":1},{"version":"24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","impliedFormat":1},{"version":"33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","impliedFormat":1},{"version":"0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","impliedFormat":1},{"version":"16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","impliedFormat":1},{"version":"8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","impliedFormat":1},{"version":"d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","impliedFormat":1},{"version":"97f9169882d393e6f303f570168ca86b5fe9aab556e9a43672dae7e6bb8e6495","impliedFormat":1},{"version":"7c9adb3fcd7851497818120b7e151465406e711d6a596a71b807f3a17853cb58","impliedFormat":1},{"version":"6752d402f9282dd6f6317c8c048aaaac27295739a166eed27e00391b358fed9a","impliedFormat":1},{"version":"9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","impliedFormat":1},{"version":"fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","impliedFormat":1},{"version":"85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","impliedFormat":1},{"version":"84794e3abd045880e0fadcf062b648faf982aa80cfc56d28d80120e298178626","impliedFormat":1},{"version":"053d8b827286a16a669a36ffc8ccc8acdf8cc154c096610aa12348b8c493c7b8","impliedFormat":1},{"version":"3cce4ce031710970fe12d4f7834375f5fd455aa129af4c11eb787935923ff551","impliedFormat":1},{"version":"8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","impliedFormat":1},{"version":"62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","impliedFormat":1},{"version":"c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","impliedFormat":1},{"version":"8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","impliedFormat":1},{"version":"132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","impliedFormat":1},{"version":"df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","impliedFormat":1},{"version":"33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","impliedFormat":1},{"version":"ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","impliedFormat":1},{"version":"a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","impliedFormat":1},{"version":"eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","impliedFormat":1},{"version":"0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","impliedFormat":1},{"version":"aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","impliedFormat":1},{"version":"0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","impliedFormat":1},{"version":"40f06693e2e3e58526b713c937895c02e113552dc8ba81ecd49cdd9596567ddb","impliedFormat":1},{"version":"4ed5e1992aedb174fb8f5aa8796aa6d4dcb8bd819b4af1b162a222b680a37fa0","impliedFormat":1},{"version":"d7f4bd46a8b97232ea6f8c28012b8d2b995e55e729d11405f159d3e00c51420a","impliedFormat":1},{"version":"d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","impliedFormat":1},{"version":"e4f4f9cf1e3ac9fd91ada072e4d428ecbf0aa6dc57138fb797b8a0ca3a1d521c","impliedFormat":1},{"version":"12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","impliedFormat":1},{"version":"340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","impliedFormat":1},{"version":"c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","impliedFormat":1},{"version":"7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","impliedFormat":1},{"version":"5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","impliedFormat":1},{"version":"9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","impliedFormat":1},{"version":"1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","impliedFormat":1},{"version":"8018dd2e95e7ce6e613ddd81672a54532614dc745520a2f9e3860ff7fb1be0ca","impliedFormat":1},{"version":"b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","impliedFormat":1},{"version":"0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","impliedFormat":1},{"version":"3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","impliedFormat":1},{"version":"032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","impliedFormat":1},{"version":"69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","impliedFormat":1},{"version":"0e704ee6e9fd8b6a5a7167886f4d8915f4bc22ed79f19cb7b32bd28458f50643","impliedFormat":1},{"version":"06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","impliedFormat":1},{"version":"904a96f84b1bcee9a7f0f258d17f8692e6652a0390566515fe6741a5c6db8c1c","impliedFormat":1},{"version":"11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","impliedFormat":1},{"version":"2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","impliedFormat":1},{"version":"1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","impliedFormat":1},{"version":"1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","impliedFormat":1},{"version":"07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","impliedFormat":1},{"version":"619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","impliedFormat":1},{"version":"f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","impliedFormat":1},{"version":"f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","impliedFormat":1},{"version":"350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","impliedFormat":1},{"version":"eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","impliedFormat":1},{"version":"45b74185005ed45bec3f07cac6e4d68eaf02ead9ff5a66721679fb28020e5e7c","impliedFormat":1},{"version":"0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","impliedFormat":1},{"version":"c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","impliedFormat":1},{"version":"5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","impliedFormat":1},{"version":"ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","impliedFormat":1},{"version":"795a08ae4e193f345073b49f68826ab6a9b280400b440906e4ec5c237ae777e6","impliedFormat":1},{"version":"8153df63cf65122809db17128e5918f59d6bb43a371b5218f4430c4585f64085","impliedFormat":1},{"version":"a8150bc382dd12ce58e00764d2366e1d59a590288ee3123af8a4a2cb4ef7f9df","impliedFormat":1},{"version":"5adfaf2f9f33957264ad199a186456a4676b2724ed700fc313ff945d03372169","impliedFormat":1},{"version":"d5c41a741cd408c34cb91f84468f70e9bda3dfeabf33251a61039b3cdb8b22d8","impliedFormat":1},{"version":"a20c3e0fe86a1d8fc500a0e9afec9a872ad3ab5b746ceb3dd7118c6d2bff4328","impliedFormat":1},{"version":"cbaf4a4aa8a8c02aa681c5870d5c69127974de29b7e01df570edec391a417959","impliedFormat":1},{"version":"c7135e329a18b0e712378d5c7bc2faec6f5ab0e955ea0002250f9e232af8b3e4","impliedFormat":1},{"version":"340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","impliedFormat":1},{"version":"fae330f86bc10db6841b310f32367aaa6f553036a3afc426e0389ddc5566cd74","impliedFormat":1},{"version":"2bee1efe53481e93bb8b31736caba17353e7bb6fc04520bd312f4e344afd92f9","impliedFormat":1},{"version":"357b67529139e293a0814cb5b980c3487717c6fbf7c30934d67bc42dad316871","impliedFormat":1},{"version":"99d99a765426accf8133737843fb024a154dc6545fc0ffbba968a7c0b848959d","impliedFormat":1},{"version":"c782c5fd5fa5491c827ecade05c3af3351201dd1c7e77e06711c8029b7a9ee4d","impliedFormat":1},{"version":"883d2104e448bb351c49dd9689a7e8117b480b614b2622732655cef03021bf6d","impliedFormat":1},{"version":"d9b00ee2eca9b149663fdba1c1956331841ae296ee03eaaff6c5becbc0ff1ea8","impliedFormat":1},{"version":"09a7e04beb0547c43270b327c067c85a4e2154372417390731dfe092c4350998","impliedFormat":1},{"version":"eee530aaa93e9ec362e3941ee8355e2d073c7b21d88c2af4713e3d701dab8fef","impliedFormat":1},{"version":"28d47319b97dbeee9130b78eae03b2061d46dedbf92b0d9de13ed7ab8399ccd0","impliedFormat":1},{"version":"6559a36671052ca93cab9a289279a6cef6f9d1a72c34c34546a8848274a9c66c","impliedFormat":1},{"version":"7a0e4cd92545ad03910fd019ae9838718643bd4dde39881c745f236914901dfa","impliedFormat":1},{"version":"c99ebd20316217e349004ee1a0bc74d32d041fb6864093f10f31984c737b8cad","impliedFormat":1},{"version":"6f622e7f054f5ab86258362ac0a64a2d6a27f1e88732d6f5f052f422e08a70e7","impliedFormat":1},{"version":"d62d2ef93ceeb41cf9dfab25989a1e5f9ca5160741aac7f1453c69a6c14c69be","impliedFormat":1},{"version":"1491e80d72873fc586605283f2d9056ee59b166333a769e64378240df130d1c9","impliedFormat":1},{"version":"c32c073d389cfaa3b3e562423e16c2e6d26b8edebbb7d73ccffff4aa66f2171d","impliedFormat":1},{"version":"eca72bf229eecadb63e758613c62fab13815879053539a22477d83a48a21cd73","impliedFormat":1},{"version":"633db46fd1765736409a4767bfc670861468dde60dbb9a501fba4c1b72f8644d","impliedFormat":1},{"version":"f379412f2c0dddd193ff66dcdd9d9cc169162e441d86804c98c84423f993aa8a","impliedFormat":1},{"version":"f2ee748883723aa9325e5d7f30fce424f6a786706e1b91a5a55237c78ee89c4a","impliedFormat":1},{"version":"eda4760e5d7b171132265e970b67c322bcfffacb84248f44def26ed160eb722e","impliedFormat":1},{"version":"142f5190d730259339be1433931c0eb31ae7c7806f4e325f8a470bd9221b6533","impliedFormat":1},{"version":"cbd19f594f0ee7beffeb37dc0367af3908815acf4ce46d86b0515478718cfed8","impliedFormat":1},{"version":"3cdb96f128133efd129c798ac11f959e59d278ae439f69983224774d79ed11db","impliedFormat":1},{"version":"8776e64e6165838ac152fa949456732755b0976d1867ae5534ce248f0ccd7f41","impliedFormat":1},{"version":"896bbc7402b3a403cda96813c8ea595470ff76d31f32869d053317c00ca2589a","impliedFormat":1},{"version":"5c4c5b49bbb01828402bb04af1d71673b18852c11b7e95bfd5cf4c3d80d352c8","impliedFormat":1},{"version":"7030df3d920343df00324df59dc93a959a33e0f4940af3fefef8c07b7ee329bf","impliedFormat":1},{"version":"a96bc00e0c356e29e620eaec24a56d6dd7f4e304feefcc99066a1141c6fe05a7","impliedFormat":1},{"version":"d12cc0e5b09943c4cd0848f787eb9d07bf78b60798e4588c50582db9d4decc70","impliedFormat":1},{"version":"7333ee6354964fd396297958e52e5bf62179aa2c88ca0a35c6d3a668293b7e0e","impliedFormat":1},{"version":"19c3760af3cbc9da99d5b7763b9e33aaf8d018bc2ed843287b7ff4343adf4634","impliedFormat":1},{"version":"9d1e38aeb76084848d2fcd39b458ec88246de028c0f3f448b304b15d764b23d2","impliedFormat":1},{"version":"d406da1eccf18cec56fd29730c24af69758fe3ff49c4f94335e797119cbc0554","impliedFormat":1},{"version":"4898c93890a136da9156c75acd1a80a941a961b3032a0cf14e1fa09a764448b7","impliedFormat":1},{"version":"f5d7a845e3e1c6c27351ea5f358073d0b0681537a2da6201fab254aa434121d3","impliedFormat":1},{"version":"3a47d4582ef0697cccf1f3d03b620002f03fb0ff098f630e284433c417d6c61b","impliedFormat":1},{"version":"d7c30f0abfe9e197e376b016086cf66b2ffb84015139963f37301ed0da9d3d0d","impliedFormat":1},{"version":"ff75bba0148f07775bcb54bf4823421ed4ebdb751b3bf79cc003bd22e49d7d73","impliedFormat":1},{"version":"d40d20ac633703a7333770bfd60360126fc3302d5392d237bbb76e8c529a4f95","impliedFormat":1},{"version":"35a9867207c488061fb4f6fe4715802fbc164b4400018d2fa0149ad02db9a61c","impliedFormat":1},{"version":"b5fd805b7c578ca6a42c42bbfa6fda95a85d9e332106d810bb18116dc13a45f8","impliedFormat":1},{"version":"3abd9ab4fb3a035c865e6a68cb9f4260515354d5ebebacd5c681aee52c046d1f","impliedFormat":1},{"version":"13e82862532619a727cff9a9ba78df7ca66e8a9b69e4cbd18e9809257b6bf7ba","impliedFormat":1},{"version":"601fe4e366b99181cd0244d96418cffeaaa987a7e310c6f0ed0f06ce63dfe3e9","impliedFormat":1},{"version":"c66a4f2b1362abc4aeee0870c697691618b423c8c6e75624a40ef14a06f787b7","impliedFormat":1},{"version":"8808b1c4f84f2e43da98757a959fe7282cb1795737e16534a97b7d4d33e84dfc","impliedFormat":1},{"version":"cd0565ace87a2d7802bf4c20ea23a997c54e598b9eb89f9c75e69478c1f7a0b4","impliedFormat":1},{"version":"738020d2c8fc9df92d5dee4b682d35a776eaedfe2166d12bc8f186e1ea57cc52","impliedFormat":1},{"version":"86dd7c5657a0b0bc6bee8002edcfd544458d3d3c60974555746eb9b2583dc35e","impliedFormat":1},{"version":"d97b96b6ecd4ee03f9f1170722c825ef778430a6a0d7aab03b8929012bf773cd","impliedFormat":1},{"version":"e84e9b89251a57da26a339e75f4014f52e8ef59b77c2ee1e0171cde18d17b3b8","impliedFormat":1},{"version":"272dbfe04cfa965d6fff63fdaba415c1b5a515b1881ae265148f8a84ddeb318f","impliedFormat":1},{"version":"2035fb009b5fafa9a4f4e3b3fdb06d9225b89f2cbbf17a5b62413bf72cea721a","impliedFormat":1},{"version":"eefafec7c059f07b885b79b327d381c9a560e82b439793de597441a4e68d774a","impliedFormat":1},{"version":"72636f59b635c378dc9ea5246b9b3517b1214e340e468e54cb80126353053b2e","impliedFormat":1},{"version":"ebb79f267a3bf2de5f8edc1995c5d31777b539935fab8b7d863e8efb06c8e9ea","impliedFormat":1},{"version":"ada033e6a4c7f4e147e6d76bb881069dc66750619f8cc2472d65beeec1100145","impliedFormat":1},{"version":"0c04cc14a807a5dc0e3752d18a3b2655a135fefbf76ddcdabd0c5df037530d41","impliedFormat":1},{"version":"605d29d619180fbec287d1701e8b1f51f2d16747ec308d20aba3e9a0dac43a0f","impliedFormat":1},{"version":"67c19848b442d77c767414084fc571ce118b08301c4ddff904889d318f3a3363","impliedFormat":1},{"version":"c704ff0e0cb86d1b791767a88af21dadfee259180720a14c12baee668d0eb8fb","impliedFormat":1},{"version":"195c50e15d5b3ea034e01fbdca6f8ad4b35ad47463805bb0360bdffd6fce3009","impliedFormat":1},{"version":"da665f00b6877ae4adb39cd548257f487a76e3d99e006a702a4f38b4b39431cb","impliedFormat":1},{"version":"083aebdd7c96aee90b71ec970f81c48984d9c8ab863e7d30084f048ddcc9d6af","impliedFormat":1},{"version":"1c3bde1951add95d54a05e6628a814f2f43bf9d49902729eaf718dc9eb9f4e02","impliedFormat":1},{"version":"d7a4309673b06223537bc9544b1a5fe9425628e1c8ab5605f3c5ebc27ecb8074","impliedFormat":1},{"version":"0be3da88f06100e2291681bbda2592816dd804004f0972296b20725138ebcddf","impliedFormat":1},{"version":"3eadfd083d40777b403f4f4eecfa40f93876f2a01779157cc114b2565a7afb51","impliedFormat":1},{"version":"cb6789ce3eba018d5a7996ccbf50e27541d850e9b4ee97fdcb3cbd8c5093691f","impliedFormat":1},{"version":"a3684ea9719122f9477902acd08cd363a6f3cff6d493df89d4dc12fa58204e27","impliedFormat":1},{"version":"ff3c48a17bf10dfbb62448152042e4a48a56c9972059997ab9e7ed03b191809b","impliedFormat":1},{"version":"bc3561e460de5a2c19123f618fc1d5a96a484d168884d00666997d847f502bf9","impliedFormat":1},{"version":"c0c46113b4cd5ec9e7cf56e6dbfb3930ef6cbba914c0883eeced396988ae8320","impliedFormat":1},{"version":"118ea3f4e7b9c12e92551be0766706f57a411b4f18a1b4762cfde3cd6d4f0a96","impliedFormat":1},{"version":"01acd7f315e2493395292d9a02841f3b0300e77ccf42f84f4f11460e7623107d","impliedFormat":1},{"version":"656d1ce5b8fbed896bb803d849d6157242261030967b821d01e72264774cab55","impliedFormat":1},{"version":"da66c1b41d833858fe61947432130d39649f0b53d992dfd7d00f0bbe57191ef4","impliedFormat":1},{"version":"835739c6dcf0a9a1533d1e95b7d7cf8e44ca1341652856b897f4573078b23a31","impliedFormat":1},{"version":"774a3bcc0700036313c57a079e2e1161a506836d736203aa0463efa7b11a7e54","impliedFormat":1},{"version":"96577e3f8e0f9ea07ddf748d72dc1908581ef2aafd4ae7418a4574c26027cf02","impliedFormat":1},{"version":"f55971cb3ede99c17443b03788fe27b259dcd0f890ac31badcb74e3ffb4bb371","impliedFormat":1},{"version":"0ef0c246f8f255a5d798727c40d6d2231d2b0ebda5b1ec75e80eadb02022c548","impliedFormat":1},{"version":"ea127752a5ec75f2ac6ef7f1440634e6ae5bc8d09e6f98b61a8fb600def6a861","impliedFormat":1},{"version":"862320e775649dcca8915f8886865e9c6d8affc1e70ed4b97199f3b70a843b47","impliedFormat":1},{"version":"561764374e9f37cb895263d5c8380885972d75d09d0db64c12e0cb10ba90ae3e","impliedFormat":1},{"version":"ee889da857c29fa7375ad500926748ef2e029a6645d7c080e57769923d15dfef","impliedFormat":1},{"version":"56984ba2d781bd742b6bc0fa34c10df2eae59b42ec8b1b731d297f1590fa4071","impliedFormat":1},{"version":"7521de5e64e2dd022be87fce69d956a52d4425286fbc5697ecfec386da896d7e","impliedFormat":1},{"version":"f50b072ec1f4839b54fd1269a4fa7b03efbc9c59940224c7939632c0f70a39c3","impliedFormat":1},{"version":"a5b7ec6f1ff3f1d19a2547f7e1a50ab1284e6b4755d260a481ea01ed2c7cec60","impliedFormat":1},{"version":"1747f9eebf5beb8cfc46cf0303e300950b7bff20cff60b9c46818caced3226e3","impliedFormat":1},{"version":"9d969f36abb62139a90345ee5d03f1c2479831bd84c8f843d87ec304cad96ead","impliedFormat":1},{"version":"e972b52218fd5919aec6cd0e5e2a5fb75f5d2234cf05597a9441837a382b2b29","impliedFormat":1},{"version":"d1e292b0837d0ef5ede4f52363c9d8e93f5d5234086adc796e11eae390305b36","impliedFormat":1},{"version":"0a9e10028a96865d0f25aeca9e3b1ff0691b9b662aa186d9d490728434cf8261","impliedFormat":1},{"version":"1aed740b674839c89f427f48737bad435ee5a39d80b5929f9dc9cc9ac10a7700","impliedFormat":1},{"version":"6e9e3690dc3a6e99a845482e33ee78915893f2d0d579a55b6a0e9b4c44193371","impliedFormat":1},{"version":"4e7a76cce3b537b6cdb1c4b97e29cb4048ee8e7d829cf3a85f4527e92eb573f2","impliedFormat":1},{"version":"bedbf6e1e952560ff250828c494da56976ca88860f8ba3dfb17dc89eac2e3463","impliedFormat":1},{"version":"46f1fe93f199a419172d7480407d9572064b54712b69406efa97e0244008b24e","impliedFormat":1},{"version":"044e6aaa3f612833fb80e323c65e9d816c3148b397e93630663cda5c2d8f4de1","impliedFormat":1},{"version":"deaf8eb392c46ea2c88553d3cc38d46cfd5ee498238dbc466e3f5be63ae0f651","impliedFormat":1},{"version":"6a79b61f57699de0a381c8a13f4c4bcd120556bfab0b4576994b6917cb62948b","impliedFormat":1},{"version":"c5133d7bdec65f465df12f0b507fbc0d96c78bfa5a012b0eb322cf1ff654e733","impliedFormat":1},{"version":"7905c052681cbe9286797ec036942618e1e8d698dcc2e60f4fb7a0013d470442","impliedFormat":1},{"version":"89049878a456b5e0870bb50289ea8ece28a2abd0255301a261fa8ab6a3e9a07d","impliedFormat":1},{"version":"d0da4f4fd66f37c13deabc1a641edd629141c333ccf862733788bd27e89436ac","impliedFormat":1},{"version":"d4a4f10062a6d82ba60d3ffde9154ef24b1baf2ce28c6439f5bdfb97aa0d18fc","impliedFormat":1},{"version":"f13310c360ecffddb3858dcb33a7619665369d465f55e7386c31d45dfc3847bf","impliedFormat":1},{"version":"e7bde95a05a0564ee1450bc9a53797b0ac7944bf24d87d6f645baca3aa60df48","impliedFormat":1},{"version":"62e68ce120914431a7d34232d3eca643a7ddd67584387936a5202ae1c4dd9a1b","impliedFormat":1},{"version":"91d695bba902cc2eda7edc076cd17c5c9340f7bb254597deb6679e343effadbb","impliedFormat":1},{"version":"e1cb8168c7e0bd4857a66558fe7fe6c66d08432a0a943c51bacdac83773d5745","impliedFormat":1},{"version":"a464510505f31a356e9833963d89ce39f37a098715fc2863e533255af4410525","impliedFormat":1},{"version":"0612b149cabbc136cb25de9daf062659f306b67793edc5e39755c51c724e2949","impliedFormat":1},{"version":"2579b150b86b5f644d86a6d58f17e3b801772c78866c34d41f86f3fc9eb523fe","impliedFormat":1},{"version":"e4b3a3e1b21a194b29d35488ec880948fc2ef8e937288463ea2981ad62a7b106","impliedFormat":1},{"version":"0353e05b0d8475c10ddd88056e0483b191aa5cdea00a25e0505b96e023f1a2d9","impliedFormat":1},{"version":"6a312caabb43c284a4b0da60d5c24f285338096eb9e977af1faca38d32a34685","impliedFormat":1},{"version":"b6eda93163beb978dd0d3042b11c60373506400c94613c0b40d1c0a9a9f1020e","impliedFormat":1},{"version":"a8af4739274959d70f7da4bfdd64f71cfc08d825c2d5d3561bc7baed760b33ef","impliedFormat":1},{"version":"99193bafaa9ce112889698de25c4b8c80b1209bb7402189aea1c7ada708a8a54","impliedFormat":1},{"version":"70473538c6eb9494d53bf1539fe69df68d87c348743d8f7244dcb02ca3619484","impliedFormat":1},{"version":"c48932ab06a4e7531bdca7b0f739ace5fa273f9a1b9009bcd26902f8c0b851f0","impliedFormat":1},{"version":"df6c83e574308f6540c19e3409370482a7d8f448d56c65790b4ac0ab6f6fedd8","impliedFormat":1},{"version":"ebbe6765a836bfa7f03181bc433c8984ca29626270ca1e240c009851222cb8a7","impliedFormat":1},{"version":"20f630766b73752f9d74aab6f4367dba9664e8122ea2edcb00168e4f8b667627","impliedFormat":1},{"version":"468df9d24a6e2bc6b4351417e3b5b4c2ca08264d6d5045fe18eb42e7996e58b4","impliedFormat":1},{"version":"954523d1f4856180cbf79b35bd754e14d3b2aea06c7efd71b254c745976086e9","impliedFormat":1},{"version":"31a030f1225ab463dd0189a11706f0eb413429510a7490192a170114b2af8697","impliedFormat":1},{"version":"6f48f244cd4b5b7e9a0326c74f480b179432397580504726de7c3c65d6304b36","impliedFormat":1},{"version":"5520e6defac8e6cdced6dd28808fafe795cb2cd87407bb1012e13a2b061f50b7","impliedFormat":1},{"version":"c3451661fb058f4e15971bbed29061dd960d02d9f8db1038e08b90d294a05c68","impliedFormat":1},{"version":"1f21aefa51f03629582568f97c20ef138febe32391012828e2a0149c2c393f62","impliedFormat":1},{"version":"b18141cda681d82b2693aef045107a910b90a7409ecff0830e1283f0bb2a53e6","impliedFormat":1},{"version":"18eb53924f27af2a5e9734dce28cf5985df7b2828dade1239241e95b639e9bf1","impliedFormat":1},{"version":"a9f1c52f4e7c2a2c4988b5638bd3dbfe38e408b358d02dd2fb8c8920e877f088","impliedFormat":1},{"version":"a7e10a8ad6536dd0225029e46108b18cee0d3c15c2f6e49bd62798ad85bc57b6","impliedFormat":1},{"version":"8db1ed144dd2304b9bd6e41211e22bad5f4ab1d8006e6ac127b29599f4b36083","impliedFormat":1},{"version":"843a5e3737f2abbbbd43bf2014b70f1c69a80530814a27ae1f8be213ae9ec222","impliedFormat":1},{"version":"6fc1be224ad6b3f3ec11535820def2d21636a47205c2c9de32238ba1ac8d82e6","impliedFormat":1},{"version":"5a44788293f9165116c9c183be66cefef0dc5d718782a04847de53bf664f3cc1","impliedFormat":1},{"version":"afd653ae63ce07075b018ba5ce8f4e977b6055c81cc65998410b904b94003c0a","impliedFormat":1},{"version":"9172155acfeb17b9d75f65b84f36cb3eb0ff3cd763db3f0d1ad5f6d10d55662f","impliedFormat":1},{"version":"71807b208e5f15feffb3ff530bec5b46b1217af0d8cc96dde00d549353bcb864","impliedFormat":1},{"version":"1a6eca5c2bc446481046c01a54553c3ffb856f81607a074f9f0256c59dd0ab13","impliedFormat":1},{"version":"04de5584b953b03611eeef01ba9948607def8f64f1e7fbc840752b13b4521b52","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"c06b2652ffeb89afd0f1c52c165ced77032f9cd09bc481153fbd6b5504c69494","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"612422d5ba6b4a5c4537f423e9199645468ad80a689801da63ab7edb43f7b835","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"0904660ae854e6d41f6ff25356db1d654436c6305b0f0aa89d1532df0253486e","impliedFormat":1},{"version":"060d305fe4494d8cb2b99d620928d369d1ee55c1645f5e729a2aca07d0f108cb","impliedFormat":1},{"version":"230bdc111d7578276e4a3bb9d075d85c78c6b68f428c3a9935e2eaa10f4ae1f5","impliedFormat":1},{"version":"0c50296ee73dae94efc3f0da4936b1146ca6ce2217acfabb44c19c9a33fa30e5","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"0e5974dfff7a97181c7c376545f126b20acf2f1341db7d3fccea4977bf3ce19c","impliedFormat":1},{"version":"c7f977ea78a1b060a30554c1c4ec0e2269c6e305a349ca2ada14931ac27ecc0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3806cdd6b48ba01a9198134e62a384ec217a98f316d4baef74dd46d62c947a63","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"2c9adcc85574b002c9a6311ff2141055769e0071856ec979d92ff989042b1f1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bf3fe89ec8baa335f6370b9fa36308e1bc7a72e2eb2dad1e94f31e27fa28b5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"35390d6fa94bdb432c5d0bcb6547bdd11406c2692a6b90b9e47be2105ea19bd6","impliedFormat":1},{"version":"3910dab597c40e173bf0e0d419d3ce9682c54ebf6ae84849f9b829b1451a17ec","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"486c074a5c0f2254345c0d1c9540380f5463999e42d7e1a159305ea823d3c4b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"8e7c3bed5f19ade8f911677ddc83052e2283e25b0a8654cd89db9079d4b323c7","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"ccf3afaeebbeee4ca9092101e99fd6abd681116b6e5ec23e381bbb1e1f32262c","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"ab7818a9d57a9297b90e456fc68b77f84d74395a9210a3cfa9d87db33aff8b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb08062718a5470cd864c1fae0eb5b3a3adc5bcd05dcf87608d6f60b65eca3f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a815b7d1aebc0646b91548eab2fc19dada09ff255d04c71ced00bbd3058c8eb","impliedFormat":1},{"version":"255d948f87f24ffd57bcb2fdf95792fd418a2e1f712a98cf2cce88744d75085c","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"836b36913830645ac3b28fe33731aac3fdb3524ee8adbb4cdab9a5c189f41943","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd3b3c21a56104693183942e221c1896ee23bcb8f8d91ab0b941f7b32985411","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"f429b61e369208ef7668ebf1dc63176e506fbfaea7b0ecc13d586a5839ebb071","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"168d88e14e0d81fe170e0dadd38ae9d217476c11435ea640ddb9b7382bdb6c1f","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"25e5c8b73c6ad21f39e8e72f954090f30b431a993252bccea5bdad4a3d93c760","impliedFormat":1},{"version":"5bf595f68b7c1d46ae8385e3363c6e0d4695b6da58a84c6340489fc07ffc73f8","impliedFormat":1},{"version":"b87682ddc9e2c3714ca66991cdd86ff7e18cae6fd010742a93bd612a07d19697","impliedFormat":1},{"version":"0d621d4e5ae0224d434f840a32f871bad9e9236dd18b13bb34164a769c4a964e","impliedFormat":1},{"version":"86bf2bfe29d0bc3fbc68e64c25ea6eab9bcb3c518ae941012ed75b1e87d391ae","impliedFormat":1},{"version":"3c74d80d1dd95437cc9bbf22d88199e7410fd85af06171327125bcf4025deae8","impliedFormat":1},{"version":"00b4f8b82e78f658b7e269c95d07e55d391235ce34d432764687441177ae7f64","impliedFormat":1},{"version":"57880096566780d72e02a5b34d8577e78cdf072bfd624452a95d65bd8f07cbe0","impliedFormat":1},{"version":"10ac50eaf9eb62c048efe576592b14830a757f7ea7ed28ee8deafc19c9845297","impliedFormat":1},{"version":"e75af112e5487476f7c427945fbd76ca46b28285586ad349a25731d196222d56","impliedFormat":1},{"version":"e91adad3da69c366d57067fcf234030b8a05bcf98c25a759a7a5cd22398ac201","impliedFormat":1},{"version":"d7d6e1974124a2dad1a1b816ba2436a95f44feeda0573d6c9fb355f590cf9086","impliedFormat":1},{"version":"464413fcd7e7a3e1d3f2676dc5ef4ebe211c10e3107e126d4516d79439e4e808","impliedFormat":1},{"version":"18f912e4672327b3dd17d70e91da6fcd79d497ba01dde9053a23e7691f56908c","impliedFormat":1},{"version":"2974e2f06de97e1d6e61d1462b54d7da2c03b3e8458ee4b3dc36273bc6dda990","impliedFormat":1},{"version":"d8c1697db4bb3234ff3f8481545284992f1516bc712421b81ee3ef3f226ae112","impliedFormat":1},{"version":"59b6cce93747f7eb2c0405d9f32b77874e059d9881ec8f1b65ff6c068fcce6f2","impliedFormat":1},{"version":"e2c3c3ca3818d610599392a9431e60ec021c5d59262ecd616538484990f6e331","impliedFormat":1},{"version":"e3cd60be3c4f95c43420be67eaa21637585b7c1a8129f9b39983bbd294f9513c","impliedFormat":1},{"version":"dbd0794f86b0f3e7c2c28bbe6cbf91adc6ef2203c6a832548ef199816d47039c","affectsGlobalScope":true,"impliedFormat":1},{"version":"f35d278fc8e426db8655f179cffdc044c1d4fb83bd31b85bbdad31beb14c2e83","impliedFormat":1},{"version":"53477a1815e915b8c20222a2ac8f9e3de880a1e8c8dbf9dae529b3d2e2b4a53b","impliedFormat":1},{"version":"d6178e0ea8afbf02a236966bd0d99eed2646599482249e6ba281d16e6fb185d0","impliedFormat":1},{"version":"5339f84dfcb7b04aa1c2b4d7713d6128039381447f07abc2e48d36685e2eef44","impliedFormat":1},{"version":"fb35a61a39c933d31b5b2549d906b2c932a1486622958586f662dbd4b2fe72e6","impliedFormat":1},{"version":"24e2728268be1ad2407bab004549d2753a49b2acb0f117a04c4e28ffb3ecdd4f","impliedFormat":1},{"version":"aff159b14eba59afe98a88fe6f57881ba02895fb9763512dda9083497bdcd0e6","impliedFormat":1},{"version":"1f2bddea07543ccda708134cca0600b4d9ac9bd774ec1ede0a69935b04df1496","impliedFormat":1},{"version":"6e8997d08f6798d0a9416df24312cafd084e6184a205d9283eba95ef56f8ef8b","impliedFormat":1},{"version":"ac6968717607889d24d6e407effb48dd5af82005925b4725b1d9eb52a8a047e2","impliedFormat":1},{"version":"26080058b725ac0b480241751255b4391f722263778e84e66a62068705aafd3c","impliedFormat":1},{"version":"46afbf46c3d62eac2afead3a2011d506637bf4f2c05e1fd64bbf7e2bb2947b7c","impliedFormat":1},{"version":"84d02daa32c7a8bff4946bbc7d878ffb7114c19879f7bfceeeb39bef48e93c42","impliedFormat":1},{"version":"ce6a3f09b8db73a7e9701aca91a04b4fabaf77436dd35b24482f9ee816016b17","impliedFormat":1},{"version":"20e086e5b64fdd52396de67761cc0e94693494deadb731264aac122adf08de3f","impliedFormat":1},{"version":"6e78f75403b3ec65efb41c70d392aeda94360f11cedc9fb2c039c9ea23b30962","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"eefd2bbc8edb14c3bd1246794e5c070a80f9b8f3730bd42efb80df3cc50b9039","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"a56fe175741cc8841835eb72e61fa5a34adcbc249ede0e3494c229f0750f6b85","impliedFormat":1},{"version":"fcf72a208e45fe550fcbd5eccb52e85f1140e99ad3c75f0faa4d5f94c5579c80","impliedFormat":1},{"version":"066d53e96c145215c40d71b5aff1fb8bdd37d711291dce11cf825bda6293ebee","impliedFormat":1},{"version":"79c164aa4f8a8418df7717206ea52508f72743224a6b9c705f10724c6dbb5548","impliedFormat":1},{"version":"7bb53546e9bd6e3f22804497a41d4b885674e7b15b7d64c7d3f83722dfd2b456","impliedFormat":1},{"version":"4083e6d84bfe72b0835b600185c7b7ce321da3d6053f866859185eefc161e7a0","impliedFormat":1},{"version":"b883e245dc30c73b655ffe175712cac82981fc999d6284685f0ed7c1dac8aa6f","impliedFormat":1},{"version":"626e3504b81883fa94578c2a97eff345fadc5eae17a57c39f585655eef5b8272","impliedFormat":1},{"version":"e9a15eeba29ceb0ee109dd5e0282d2877d8165d87251f2ea9741a82685a25c61","impliedFormat":1},{"version":"c6cb06cc021d9149301f3c51762a387f9d7571feed74273b157d934c56857fac","impliedFormat":1},{"version":"cd7c133395a1c72e7c9e546f62292f839819f50a8aa46050f8588b63ef56df88","impliedFormat":1},{"version":"196f5f74208ce4accea017450ed2abc9ce4ab13c29a9ea543db4c2d715a19183","impliedFormat":1},{"version":"4687c961ab2e3107379f139d22932253afb7dd52e75a18890e70d4a376cdf5d9","impliedFormat":1},{"version":"ae8cfe2e3bdef3705fc294d07869a0ab8a52d9b623d1cc0482b6fc2be262b015","impliedFormat":1},{"version":"94c8e9c00244bbf1c868ca526b12b4db1fab144e3f5e18af3591b5b471854157","impliedFormat":1},{"version":"827d576995f67a6205c0f048ae32f6a1cf7bda9a7a76917ab286ef11d7987fd7","impliedFormat":1},{"version":"cb5dc83310a61d2bb351ddcdcaa6ec1cf60cc965d26ce6f156a28b4062e96ab2","impliedFormat":1},{"version":"0091cb2456a823e123fe76faa8b94dea81db421770d9a9c9ade1b111abe0fcd1","impliedFormat":1},{"version":"034d811fd7fb2262ad35b21df0ecab14fdd513e25dbf563572068e3f083957d9","impliedFormat":1},{"version":"298bcc906dd21d62b56731f9233795cd11d88e062329f5df7cdb4e499207cdd4","impliedFormat":1},{"version":"f7e64be58c24f2f0b7116bed8f8c17e6543ddcdc1f46861d5c54217b4a47d731","impliedFormat":1},{"version":"966394e0405e675ca1282edbfa5140df86cb6dc025e0f957985f059fe4b9d5d6","impliedFormat":1},{"version":"b0587deb3f251b7ad289240c54b7c41161bb6488807d1f713e0a14c540cbcaee","impliedFormat":1},{"version":"4254aab77d0092cab52b34c2e0ab235f24f82a5e557f11d5409ae02213386e29","impliedFormat":1},{"version":"19db45929fad543b26b12504ee4e3ff7d9a8bddc1fc3ed39723c2259e3a4590f","impliedFormat":1},{"version":"b21934bebe4cd01c02953ab8d17be4d33d69057afdb5469be3956e84a09a8d99","impliedFormat":1},{"version":"b2b734c414d440c92a17fd409fa8dac89f425031a6fc7843bac765c6c174d1ca","impliedFormat":1},{"version":"239f39e8ad95065f5188a7acd8dbefbbbf94d9e00c460ffdc331e24bc1f63a54","impliedFormat":1},{"version":"d44f78893cb79e00e16a028e3023a65c1f2968352378e8e323f8c8f88b8da495","impliedFormat":1},{"version":"32afc9daae92391cb4efeb0d2dac779dc0fb17c69be0eb171fd5ed7f7908eeb4","impliedFormat":1},{"version":"b835c6e093ad9cda87d376c248735f7e4081f64d304b7c54a688f1276875cbf0","impliedFormat":1},{"version":"a9eabe1d0b20e967a18758a77884fbd61b897d72a57ddd9bf7ea6ef1a3f4514b","impliedFormat":1},{"version":"64c5059e7d7a80fe99d7dad639f3ba765f8d5b42c5b265275d7cd68f8426be75","impliedFormat":1},{"version":"05dc1970dc02c54db14d23ff7a30af00efbd7735313aa8af45c4fd4f5c3d3a33","impliedFormat":1},{"version":"a0caf07fe750954ad4cf079c5cf036be2191a758c2700424085ffde6af60d185","impliedFormat":1},{"version":"1ea59d0d71022de8ea1c98a3f88d452ad5701c7f85e74ddaa0b3b9a34ed0e81c","impliedFormat":1},{"version":"eab89b3aa37e9e48b2679f4abe685d56ac371daa8fbe68526c6b0c914eb28474","impliedFormat":1},{"version":"df09e59ace0cf7fd8e3c767b0b8f3d5b2212bd40d4e9dbf49a388526ead5e545","impliedFormat":1},{"version":"03fe713f6d3e69f47d4871545b2cd40e1f714b11e3945f6ab1e05361cad19192","impliedFormat":1},{"version":"25ea3ca113eb33c517ace8bd6555e8caf1c99d34dea7b3a48b074bdc5e7cc735","impliedFormat":1},{"version":"d5f83721da8ee61cd1620f0e4abc9d60453b4ef0b25945172bbd478ff6e3adcb","impliedFormat":1},{"version":"597536b4c8e7e309dd823f61206ff169ca90a3d68245343a5226a8d20f7a9ffd","impliedFormat":1},{"version":"cfed3c4118baa2ae69ec0da47b5fa722c49e5915c1cb7ffa8d5b53b678b641ca","impliedFormat":1},{"version":"3b5f9ed01add914f4bf2220544cdd4099583c2a72895b2ea495e9284be88b894","impliedFormat":1},{"version":"575425068684056c113b93ec316870eca50195835f04179630997e7b075164d4","impliedFormat":1},{"version":"aa0af7166f48f67765f96dc70c1d7f9f55ae264b96cadf5b6077b2bc0aa2b5dd","impliedFormat":1},{"version":"2fc9c7c6695b151ffd3ed667d6d793c2f656461978e840eff1d1350fc0bb1ebb","impliedFormat":1},{"version":"4d590f0e0b4abaf693f94d08b5c414928f2571aea5ac6efb97e4646e195dac48","impliedFormat":1},{"version":"bf1655c135bd654637f98f934f9a9eb4d6450194ca2f4968b79263608da59fdd","impliedFormat":1},{"version":"1ebe079cc9ed9ec4cd11d02c70f209caf16e9dd8e1e801a36648ce711bb3c404","impliedFormat":1},{"version":"b9a49ec04f7dac4bdcb928894d3c6bfc15a4ffee5f14d4b2bef69069de2b1d25","impliedFormat":1},{"version":"d2554dc921a526fc29600ef66da5d37577ce64557eaceebdb2b6170776051ffd","impliedFormat":1},{"version":"1fffc635777e6b7edc2caf5e8473fd161ba8fe5605ae84b64746a2a34045e6e3","impliedFormat":1},{"version":"f6f35852e407d4c04e578478e743c8101227037abd405ad71564e8430d4e4c1c","impliedFormat":1},{"version":"0e16f517285c960f284ff5367c239c24e20acfd3b3aced00d7842c7cd867898c","impliedFormat":1},{"version":"063929189f06ac3087123f98ce8736eea5c2a4cecbaa46c54b58118608fb8708","impliedFormat":1},{"version":"95e249a5d61382550bbf6341cb31a3114b0c10c232b0fbac97da74f83275dbab","impliedFormat":1},{"version":"34880c694bdb6f266bf484dbc60bd887890ab1c8d6807459fdf93f6ab0b0c792","impliedFormat":1},{"version":"d490c69a03b97298294b4d2159175f2f9b62a7dfcd81efc63ea3505c60fc0ac8","impliedFormat":1},{"version":"c0511c2a0a6ae726a66a0b25336fdc61c632c6c1505eb0bbbe1556055fd06919","impliedFormat":1},{"version":"bbd577f9d34a868d751e14a904401a6a026de322bd0f7cc7d51ecc585b57c6e6","impliedFormat":1},{"version":"e06f1dbc167fd37808d2f36aee8ef3bfae734d13fc4afcd9994072a30099df0b","impliedFormat":1},{"version":"7e0693b9604ff4fd358a2f21db90982fce11a4ff216eeae85e326f108d648d68","impliedFormat":1},{"version":"69d5a40440e664ec9493c61169414208472583f342346fb31dcbebad23c6a780","impliedFormat":1},{"version":"3d1efa91afa616c307864fa93f9e7777672bf90ac79c16936969efbc6629cbc1","impliedFormat":1},{"version":"722d99f854a33867a3397fe397924c0de326741e9d7830876481ccf87643a133","impliedFormat":1},{"version":"6ddebf5efb47d10d48d734f855b5cd13772de6d14b50779a17590afa30fcaefc","impliedFormat":1},{"version":"0c4e55d5ee917d3efca585b9eb138df9eb9cd38ec5a8ab258fc0e4fe8d54abd6","impliedFormat":1},{"version":"a41283ab6303ab1d21729da5723952e1b7d9d1bf379b9cce09132403f6f0f07d","impliedFormat":1},{"version":"1557f6fa35f1fc5d23911982761a7ddc4fbe9322eda575f6dadca8d5515e0cee","impliedFormat":1},{"version":"ded4768515ff723001ca99221ec8a7b751a4f90af8be95c885ec8a21efa548d4","impliedFormat":1},{"version":"86a6b6352a6a47fa8698f68119eb716ea951f541128d108382137e3d85900162","impliedFormat":1},{"version":"b9e6aa9de64cbd004d2c59ad79cff12a5d34406153456b869eae6b1d8f5bbb61","impliedFormat":1},{"version":"b864079910dbf273badc3367d21910e6f8887705defda6d51882084ef5b6ebb5","impliedFormat":1},{"version":"5e1fbca4c7648ff481cd7dda46ca8651239f4898bbed3d5066b8d6db0f60c555","impliedFormat":1},{"version":"0fd72d2cd43f9da04478aa6cbb922c27fda6b4a0ca7235aee8f6a933941bae92","impliedFormat":1},{"version":"28a5fc04797c6992303791a4b79ed99431bf2af90b77842948e3e8bc0f681d97","impliedFormat":1},{"version":"20a397ebeea68a193465caeb8f1b3225c49c6bdc4545a0ca6521fa684ef2fc5b","impliedFormat":1},{"version":"9edb51982e31faae66cef7076aacce409cab4637f0ec6e6851331fc87d9fa872","impliedFormat":1},{"version":"8a954a3b53672645d10a61e617272cd309bd7dc442f914427291ea8a2cb3c599","impliedFormat":1},{"version":"69e56ac933cbb0a62cbed3436a44068445460c3a246ae5b7b70e010dd3d8e0e5","impliedFormat":1},{"version":"dbafd3b17be2ca81493a6d6daf7afb6d04b83dd3b80c556ae5973e9a375aa6ff","impliedFormat":1},{"version":"8ea7264ce539f97f4720250a14695a1f82c3ac33ed66617991438cfb3d41947f","impliedFormat":1},{"version":"abf4fe7ebd8771a5c9d963754ae0c088c159e0e12ff77ed2e48f69d86ed50be5","impliedFormat":1},{"version":"050985cfd782bb62131bdc040cd444f65bbd35ca1b45e3eefde79ef713ddeb1b","impliedFormat":1},{"version":"cd935cd60191b79134684160cf08d5ab555512b7befd5f88b449681f7e037a3e","impliedFormat":1},{"version":"5e61341da5f93b211c8c11f6ca709a2dda33feded2cb3e1481d0b727aed23cd7","impliedFormat":1},{"version":"3df29fc79cceaa80012df2005f745c1b635a41dda0766ddd29ac8e078c4216f8","impliedFormat":1},{"version":"bb8aac29b972b3826d70b106373ed2600bfa8377ddd5672b0b5e256f361acfb9","impliedFormat":1},{"version":"721e984c6181cf2f1587226d11d2265f5bd1450da58e7598845ae15cee0465b4","impliedFormat":1},{"version":"bfa5dd71d432e277bbf3c44b3dd91db853fd833da21f43cc3a0a2dc324b7af47","impliedFormat":1},{"version":"987f95fafbf1296cd653459ac69b3a73cc4f7f37f38a1c769902bcaabd516452","impliedFormat":1},{"version":"5f3f4c3ea0ce78180d0482cfc808410092b441b727bee9a26d26ef09decb64c3","impliedFormat":1},{"version":"6b1c226b8c0d272c37948df86f81f100157b7cef9d97d2651f1d8e740a2be268","impliedFormat":1},{"version":"3e1e6a7a6e3d0615d046dd62062c557404c9e1c622dfbef4fa83d17c628e314a","impliedFormat":1},{"version":"ded6a76ae5fa6fc3f7f860a187f3b1c81b5bafb953be192501a937307dc739b9","impliedFormat":1},{"version":"8ee4717c4ad7d5976ab1bece799c68045b7b346e274d7774e86ff394cf867d47","impliedFormat":1},{"version":"a9e3299c6098d323bcd9787e2ac5e4d74457e5427c305ebd432e52ed13dd23c0","impliedFormat":1},{"version":"3b8ddc84907c11d89e5240f8299e87fe506a1c18764fb9d546b02f9e347f93e4","impliedFormat":1},{"version":"4b5186a238a3fbfeca1b14fe6b234b8bd5b93ac89a47984715f76f8919e29d96","impliedFormat":1},{"version":"dd693a36f441a1337e9a34b6da2cfdc53d7cd9dbf0d1cde334cab196c3e6f17a","impliedFormat":1},{"version":"e284b0d144003a25e3b7da92c55d80a085531c0c84a77a62f1a3e2bfe82454b1","impliedFormat":1},{"version":"e09a001b1588cde9f5e77560730c5ec6ea346ea09da2d65b3a02629e390d0923","impliedFormat":1},{"version":"77a38dc0e4afa289c6ceaf9121c7718fac9231904ff5f30c0c1201524fb25f23","impliedFormat":1},{"version":"2505ab6e616e35b2a63dcc8cafd3d6092c6e0109b206cec1be7d80cd450cfb7e","impliedFormat":1},{"version":"c2d66e86bd5f13ad098ddb98ab863bcf0d15b323cc9bce6ff56e20eb50648926","impliedFormat":1},{"version":"1959affb5ce54dd86a2bca9ba087da5a29fcd1849eb1710f1d6807512ac513d6","impliedFormat":1},{"version":"8ae1ca3c5186af2c3a6e979998c00c82a363d024ed26a8bcb84a6ef21878d4b4","impliedFormat":1},{"version":"05ec4ee3055f601ad3f932832a0b7fb5842fafa6d3a4f29b200c49e0c8d36bc4","impliedFormat":1},{"version":"cf0430d48488f45abbb7184e36b580c1933cc8078581c038583e16cdfa80863d","impliedFormat":1},{"version":"aeb0806490c71f371a75629556f469419997367aafa673ae2e86705652f39227","impliedFormat":1},{"version":"b445ce66b11750fb2172525591647d30b75ec8d003a93ee3efc12954ffb8d5ec","impliedFormat":1},{"version":"a36860808f7994a6ce2c965e11e7a971ae9b438422ffefe9471ed4f3ba3ef3f6","impliedFormat":1},{"version":"6335dfc1f7c285b25ca643890becb12d22fd24079624d91b660f31a3ef130f8a","impliedFormat":1},{"version":"e0e3a4eb638ceb6583ebfa8a83fb27d5ca98ba93ce00d396dd09d41630834a68","impliedFormat":1},{"version":"54927a5dc7fa2c1d7b8232c756d658d051f2c0620533c4048343e671d18c7983","impliedFormat":1},{"version":"8ff6d24bddad8f2bb8ac0ae129760dd1df427765f4f6199390347c0009ff9b48","impliedFormat":1},{"version":"25a0403b5a28416593fc09c3e5150e981c742afedf0b6e423f8a94f1351352c8","impliedFormat":1},{"version":"0db51b9c351d7c2313296e5879fbad8f20af8b9061885c8590ae0216ff6154a2","impliedFormat":1},{"version":"1c6454d7f733067337f1685a06c4981a78d1925ae0381bcd09f2c43b73755aaf","impliedFormat":1},{"version":"fa7cfbc437c87d93860a4a1304a12e8fa9a28a24695e1f4c36d266b4cbdf4e7b","impliedFormat":1},{"version":"4afe4410e572d10448fb1f7f254bc2eca329e00180e75529be8b22465718b2c4","impliedFormat":1},{"version":"6d57f0ab1e858b12895e1eca5e6f407a835c13038fadd5f85134740e6e32b613","impliedFormat":1},{"version":"5d6ef65ccf14b0d51af503adffccdbaa846848cf0fe82310816cf82eb364d107","impliedFormat":1},{"version":"397a17567b445fbeed01f58163c2b9667638ff815881f349cffec5ad30844905","impliedFormat":1},{"version":"4bbac0cdef9e2f41b2d70826633298df274436caf011a093bfc1bd57dd2269c1","impliedFormat":1},{"version":"38bc1e63328558fecd8e2c3f9159ded06a2fd86059b0a91e93f11aeebeb1f177","impliedFormat":1},{"version":"e4756baf25dba2f6660043ca4fc6e36ab8d31a0c34d507624d8a12cbe6ab9b30","impliedFormat":1},{"version":"4be799bfee1766047c11b3b5d371ca9e3993526d50c3e276e7cdb3943dd680a6","impliedFormat":1},{"version":"513f887178e2df3ea70340c20bffc633827c2f0a4e1340a4176eecb6d3c5a4e7","impliedFormat":1},{"version":"7b6ae8994d485350989d50cae27221f2d9929d60677b8c5de4ceb81baf480d3e","impliedFormat":1},{"version":"7adc87c8c1d3fdf85652694a636c6e032b7ea76335de7a110ffb215970d9b1f0","impliedFormat":1},{"version":"27f60ec60daf015ed0510587fd37d65818c085d47f320f03e2178e80ae1b96d2","impliedFormat":1},{"version":"69f868104a0f83fc97451cb143d1fdee65d6133442e585048983a8e27c6dd4be","impliedFormat":1},{"version":"a4fd1c983504d251988ad2e8629dc110228a591e1bc9f85e57b35895e8141cf3","impliedFormat":1},{"version":"8e82daa0bb799f366cfc646fcd65e507d3db4921082426dc45b78cedcb60f71c","impliedFormat":1},{"version":"a2f99636b48361b7e10c232cdeeb3aede976279f950b7f84e8b970471a0dc606","impliedFormat":1},{"version":"e31bcde9cdc47ff503a45bb8d68c38fd39039b06567c8017021f9116e31ecde2","impliedFormat":1},{"version":"bddecda3271cc5aaf904e94c2b65c23cb7528e27567ef31d1302bc8845374e56","impliedFormat":1},{"version":"23306c0e57b32fdf724bb0aba128d0023fd57b856490b1cd69bdc0de2acc334a","impliedFormat":1},{"version":"4df175087aed418f42fd5cf507c1f57f0972484cadbe0f6c38cabd0c6b3576ce","impliedFormat":1},{"version":"df51e368f1e65529fd132dd67c8312f21b644063ce7950e8b820905d70b28eb7","impliedFormat":1},{"version":"74d10836d7259d3a664ed517a3c8547003e1de056d85b8e324a11dbca522503e","impliedFormat":1},{"version":"b020142c9cb2c061e119c6ebc1712f2e66a68968657f4867332789688c706189","impliedFormat":1},{"version":"df08a61b7eb2b11b4e9c771cc3b538f3fc4260c170f8fd89110843323fac2ba2","impliedFormat":1},{"version":"acc1e28219b83d788ef0e28b8d7ff1f3a8fc7df6a49ec141402e044badc84108","impliedFormat":1},{"version":"3552e9ab64219d9d980f9406c354e620f04ca17944459d4b23c62d472d9be2dc","impliedFormat":1},{"version":"e9f94a086b52c2f522f2bc9ecf7539d7bffc390578cc41db9547005b93df5d88","impliedFormat":1},{"version":"66d87665eb8cc693d6ea61f7735ceacf60c373d7901b8fab3a283b843c45cf33","impliedFormat":1},{"version":"5c25d35c4bbeabb961925d2b114602191800afb4d4f164e45979dd2c83f965c2","impliedFormat":1},{"version":"8b989bf267ff6ef7a00f318e95794bcefd06cda44f3cffde905ca579d17acad5","impliedFormat":1},{"version":"f3983ffdad35bf9234e36a691bf959934b723134c070fa5dffccffe046009e2f","impliedFormat":1},{"version":"2d8c69bb71790264bc61c5858afcfd00d5bd7bca6c9c38185f07896661053790","impliedFormat":1},{"version":"0396db572d4384fab79c5ad3b2cf330f167496da87da0e61a3f55e803f0fcc4b","impliedFormat":1},{"version":"9eb195a59362d107cf8f1d92d704fcd034bd92796f72cf031ad0525d88e36d4f","impliedFormat":1},{"version":"b60a1aeffa207842414020d16c86854f99bebff51832478b00451c1770fc9708","impliedFormat":1},{"version":"178ae1eaa5cd24618fec31c62ee6b66f5f57d76b075d9d8b34cc0db5543c0fec","impliedFormat":1},{"version":"4f31b5dbde1dcb81687ef4e06c2636809f6a0517615876bc937fa266f42e87b4","impliedFormat":1},{"version":"33d7dde5b3614d1f000ab11f9be2cb0f032615b726ca8537afc272db0b522a7e","impliedFormat":1},{"version":"97b8ea7292ec9f0828af2d58952ea17497a73943eaa0a2dd3046a4e07a530c61","impliedFormat":1},{"version":"ebba07507741f7d53d05cbb59a8dea0b3b75aba278810b4d2696776f95b779e1","impliedFormat":1},{"version":"5c840682cf2d211808e4f0dc5cd32da409352e8b3d11d7e9ba25c92796932cdf","impliedFormat":1},{"version":"f278958ac0fde187482abb825e61be120427e8aecb42a9155f0144767a29a358","impliedFormat":1},{"version":"cf35b9aa3b45b2098ec7033db87d004913ac7bf1ce52c9c8154fa86477e9046e","impliedFormat":1},{"version":"8002100726ad65ae695ef88b091b9c8cb73e024eaf23b31d228a5a8ce19af31f","impliedFormat":1},{"version":"f7a7233cef5a86a5c2c5e4dab11b46e0688707bd066a80aa5249e6cd6e0211f6","impliedFormat":1},{"version":"354126b46c623665e6aac86b6deb693dc43499dbd71bf655aa5f6bcd7753dae0","impliedFormat":1},{"version":"1f1d4396e7a118ba9e1f49f290b29d0aa946e91fc8180909b1d64b2998b08953","impliedFormat":1},{"version":"534f6fde91eb366097dbf65174356c88c2726d513c55f0f60b2098fc3f6e87ab","impliedFormat":1},{"version":"bc8d8ff31066bbfb937d223a528d545abfba45a0a646b141e2a15dd1948026e9","impliedFormat":1},{"version":"8a03c390eab5e99798e3d24c1d86a9b0ee851d315c0cb7480b42f6a49338d694","impliedFormat":1},{"version":"46b25c26bc3816d779c0353b3c1f6b83eeda1030b99401472a4341a9ab94138f","impliedFormat":1},{"version":"0ba4da683fe4d459827bca4e9c2befc46b9fe589353a08d874440dc6b1119df9","impliedFormat":1},{"version":"a5ed548aea7fdd435b68149641d20d0c823ae4341afc4c5c027d246a321e358b","impliedFormat":1},{"version":"c831a507ce1fa56d927c77b0296eaebbe63208dc2e10bea30ee19c19d3832ac9","impliedFormat":1},{"version":"0e0775f99d5750b8ea2409b6d5783ecb7465552176022512c4ab695e2cc07b25","impliedFormat":1},{"version":"998b22c2762b4c5dda982144f4273439478216601e1dbf607f8da50f90028302","impliedFormat":1},{"version":"de07059049dbb4d7b800fad4f5919c62c0c572d021f2cde9b4cb92d9d312464b","impliedFormat":1},{"version":"b006db5c3868f18e051c60c815dd8d18b42f0bd1f2a4732e8baab08e56443fa4","impliedFormat":1},{"version":"f6162b05c0a5b26d3446503c022652af632a803010319ff6c65ddb425c88c1da","impliedFormat":1},{"version":"ce99d9af9d4091b04b4c2266c06f38d7f39e5614616973e0d17f01a36212c516","impliedFormat":1},{"version":"f4349410e6586843ef78e2795d631a66a9b5a8496e07452948461643f6774753","impliedFormat":1},{"version":"afbf6dde412faa5825df13ab00b8eabe1358558603d6e4c34b4ff83c06128500","impliedFormat":1},{"version":"9468d74878264e4ed6214c0127326482d3d81d8b39c2ffb3ef0887348cfc116c","impliedFormat":1},{"version":"5d761b75b6780d20af311198f88e4a894243753acf28338ce7cc0cb1d5e3bfca","impliedFormat":1},{"version":"4c02021950d7f559417399582f74b4f23e7acf96bf4abfc8511ca9f349e7b090","impliedFormat":1},{"version":"f05da64b51a564bd57764011df409a699928b2b9e018a9692e06d5a3e761a8ae","impliedFormat":1},{"version":"448a1d960c3243442ffb6ddec7087a5dbd062a8b2fdbbc39f6ced3f5b7dd1cef","impliedFormat":1},{"version":"c01a88ada696e9f65a4dd8248bd9a568a3f1ce0c2eaa5e7f8696a2c3b3573654","impliedFormat":1},{"version":"6ca73337f9333cbe5e31c1e03fee42dfbdb119e7fdf991e8aa96767f4696d0b3","impliedFormat":1},{"version":"9235105279d1e63c87e3ea34fb6b20eb4968d7696c4783236a2d8ab5e924807f","impliedFormat":1},{"version":"fb3a41f5d7c41e4195119f98b0df0018e7e04a1b025d7b10ed82741f65c0493d","impliedFormat":1},{"version":"bf21257fb910b2a765ad8529cb457d0d9eb99d8d14ef01836bf04422c185f230","impliedFormat":1},{"version":"9dfbe916e48a8172cc0db07e20248214755205bbd16cd5bc0672dc2cbd80a429","impliedFormat":1},{"version":"cfb85bf0a694c3e0630400fdb2c1f135132b500c152aee6b9ae9d842637378f8","impliedFormat":1},{"version":"2067e20e971aec9f9c3b7a80aa3f2ce908fa690d29614956ab939d4137527d46","impliedFormat":1},{"version":"469bd9ff94e8ee2180eaa7be310e626022f4b97990e01fdee2cb681eadfca444","impliedFormat":1},{"version":"9199cfe666c63b59bfc7a0215ad7b834165e2c8678769aa29b6b15d4035dd874","impliedFormat":1},{"version":"75c20bb61d4944a90fd9fc4d79be814af84552497a30059d1f4a5979e338b576","impliedFormat":1},{"version":"e36d57187446a9b265d011815e80c5ac2d31cdd839e5dfed3cadbade9d63084d","impliedFormat":1},{"version":"ff94c04aacb366b85fa01b058ce27e3f2a26305e87a512b6472013f3951a7639","impliedFormat":1},{"version":"f28c4909885c804c93aabb9561ef520ff620576369eb310195a7a6bbb8d9e587","impliedFormat":1},{"version":"e971398a29ade533ddc2730c360a22672144389e077633fc950660f4c4d9d046","impliedFormat":1},{"version":"52677e8175f66b1d6b684e8249f7b12af8932267f0b2f363ab973fb94ee4d319","impliedFormat":1},{"version":"d1e84e4b4b53354c6333f50ae4337b96f1004f28875d3d7b3800cdf79b0ffd4c","impliedFormat":1},{"version":"a9f319a6a5287c95b72c37b461e0f70f490324cc4a55d71378e2a37f1ca67adc","impliedFormat":1},{"version":"df7c9a0919ac54bb69647b916261beffb40d84494f9cc3e68fc7927a79ccb64f","impliedFormat":1},{"version":"30a24fccfdf6a40249949b222a11c755421b9479bd68a96ee97413540443216b","impliedFormat":1},{"version":"da0ed328391d742978219a5ab07decbdcd353bbdbc87708a2176afa971056a3d","impliedFormat":1},{"version":"14a5746786128a83561f1d719290db89ed9b225e42959bbe0023112035a6e0a0","impliedFormat":1},{"version":"71db39385fc6c5eddb6cc70b1b68920b2aa06cd85ca4a95b1de585e127984881","impliedFormat":1},{"version":"c9f95e2f5326df254b2c867de54f7264763065fa4d29f5f9d10960d97352afcf","impliedFormat":1},{"version":"59e6446d76c9c7a1cf516435f942c5e122b3fa9c80d4962c4eeae63f3bb605af","impliedFormat":1},{"version":"ee28654c6c98fe6b359d34465dbe1f9798d1e7a6ed5ece29daf19de11cb8323e","impliedFormat":1},{"version":"68d524e37e75f230102cd0444befe3e17a8c85438060a552322e7e400519f2c3","impliedFormat":1},{"version":"282d6f2f2150a26e8c5cce93eaf68e829a8683171ba13e92ad7dc8b28a12c623","impliedFormat":1},{"version":"34b95fa727e92d0a2fbe45e37352127297aedd9af64e56dfb324ff1280517f3c","impliedFormat":1},{"version":"4d37c6842a01d7310940ed2d39cfd4a8d63e7676d1113070b3cd725131347844","impliedFormat":1},{"version":"38ccba9a0d7f301e4b590f7a52de8a8fb12e9edb1de6d7ede6a8843176abfd54","impliedFormat":1},{"version":"db4e72e734c0d11d2051dea52f678270eb423be4541e3c39ede40bd29e733484","impliedFormat":1},{"version":"b6fa5f1295afc4b3a9bbae107ea00d1fc37956f25b846338916cbb195515a4e2","impliedFormat":1},{"version":"4b3e07d081541bd9f0418c1963a44b02a65923b6de04d6ef7bfaab8e8b1087d7","impliedFormat":1},{"version":"438659c94886ae81435567673c83b61937048729da03385738a023174cbff051","impliedFormat":1},{"version":"63310e90fe40fb7a431b9ff640d54b70ef30d31b23a634890799569521cc2a02","impliedFormat":1},{"version":"911e8affa1bea9b54a8926ce39295e190ba3e5e36182c7808c3d657fbd77d705","impliedFormat":1},{"version":"02353129e38fd07cc487b5f822ac710ec117e43e479e9f9f8039418ed3291ff5","impliedFormat":1},{"version":"54bd44d1d220488406919d2ddbdb92cef690c8ebfe41d2cdc61a8aaf26d6396c","impliedFormat":1},{"version":"790d0cef4abbfedbde0ff29c9a1865d5ed8364e9e251e25bb13794d30c13ac4b","impliedFormat":1},{"version":"88f2b0ad065d1ff42736c1efeb0e14061b3091d9376c272672be3f27d167a152","impliedFormat":1},{"version":"81de941dc5851bd7ce1e8f81d4d31db1e035de774e571947f8d03b351fe9f764","impliedFormat":1},{"version":"fdc68f982f0c7b074e3787534a5137c3f9d746edc323efddde286931ceb9c954","impliedFormat":1},{"version":"be922b6a92064b78554dfbf46decbddf5a0b023f49a656a7865e17ab0bf710c8","impliedFormat":1},{"version":"609d27139ad9aa20641c466c993b2d8f8c413296ee814b1afd79f48bd809a0f6","impliedFormat":1},{"version":"176b071fba5783d15078411e7c0753d2a874dc0ba0bf334c402e358b59e78f54","affectsGlobalScope":true,"impliedFormat":1},{"version":"774d51ea5facd44ed191c2e420f2a0ab4da76a41905e8c1c3aa2a532ec340d97","impliedFormat":1},{"version":"2be23228f8822815f04418af4b3616f6c12d2e8310d3536537ca59c791fd71bd","impliedFormat":1},{"version":"3e9c9a37943e0f4c86e33e47c598a43f25117acf8fdf177e6ff5e0476e6d0cee","impliedFormat":1},{"version":"2c0b6ecefb1757ad6ce6d2414b3c268cb9092cff307f6794c75e27f7b1b3b358","impliedFormat":1},{"version":"10f2d3d9c642a1e734adad62f07866c3217b1f5f89f9f3f47d3fd6a295bef8d9","impliedFormat":1},{"version":"4894b371550ff623685722b8fc3064eec2a1353d0a4f7a4f46707b446d3cd607","impliedFormat":1},{"version":"1306e750b3d9089eddb926279035e88119bff73ba6d12bcd1ac3907eef2bc235","impliedFormat":1},{"version":"f97a6ead0f9c40bd2bf83cdae4aa47655aea300282afd44998180d9cf62b7d76","impliedFormat":1},{"version":"a5d1b10c57d14126c7a312e2bb28763c745a87c4f5c005ec6b9ad79aa16850ae","impliedFormat":1},{"version":"33b25938d78614b92778d270bde2c971ecd7f369ef6c990d13e247eb2c7882ad","impliedFormat":1},{"version":"ef325176a8c255a9a55bec7c23d6289c98b00ebfd67112bd4b915c679d721b1d","impliedFormat":1},{"version":"81c53ecba335a74d626d838f842eaa7cf84289776b413356bcd61560f07c9e51","impliedFormat":1},{"version":"47a102af679f68d61d7754dd8f133fab95c3cf7c2dc6674e70efd1b7b7c815ce","impliedFormat":1},{"version":"41931aa72d208139935cd9537c83679c6ca91fe69fd1bd8ec88bbe8e93fe2a2e","impliedFormat":1},{"version":"793014c8196d3044e2d425d7de6339e130a8f81136c5876e2e88e1b8279dbea5","impliedFormat":1},{"version":"7cfcb8c758cb502085d9128ba3ff999084cafd64b9b7c317f87fc85170d1282c","impliedFormat":1},{"version":"6d0b4092bc1fdd4843d9a4313b470b6b7773b5fb712545d6174fd4d703265ae3","impliedFormat":1},{"version":"b6e63e92b837071df07652d3f5632727214b713881c8416a133f7afa977d6e44","impliedFormat":1},{"version":"b09eefc95f09a9a9c61e4f2ed3c1e22069c703493f8e231bc76d3c6cf7ab1422","impliedFormat":1},{"version":"1b08cc33d8dedfa20adf4a779020ec36d494ab7ea503395c658c5e286a3b50e1","impliedFormat":1},{"version":"2c94d2217244dd31275ca5e404560c5c2105b5f06f8985d0f039f39caa1e9e30","impliedFormat":1},{"version":"e77d73e81f5824767db0df8bdb7b7c72cb1741d5fd74e099bfaa6369b8716491","impliedFormat":1},{"version":"077f88e83a13ea89300c26c39ca8ec3708bfd09a15464c71e2fd762708fbecea","impliedFormat":1},{"version":"4f023892bf3e27c71473a12d3b838cbab4350e1108a47194d570627664beb5d8","impliedFormat":1},{"version":"774a6eb661aad32b5f9b73bf9d08af7f9204a4bc67a583494caf43fa09fb2af9","impliedFormat":1},{"version":"0c3d92e5fac4a662f12b04c12ca741b4f34a1bf2824a470414322ddb61b350bb","impliedFormat":1},{"version":"f1085f9fe245cfdb8ebe8b8fe55bd81e9adcb3381f206aedb6e45793b6debb47","impliedFormat":1},{"version":"a4c05674bf833557741ebbcc3fa4a25ddd052e1c762a91037db94a2d7688ebbe","impliedFormat":1},{"version":"97006e8ef367bc2388ea292d7eb6cf471bd2b53d266642ef8284b66afe6d01bf","impliedFormat":1},{"version":"927c282fb88ca5c95a9aaea00175b56b0a6dc8728b246c9e0ec455de40d54fe9","impliedFormat":1},{"version":"7dac0babb2b88108fc5a5410aaf6fe6e59ef1e158e3b5283a990ea503ac3ea07","impliedFormat":1},{"version":"2f4620eeb98e884074a0ba924445a69b29654da70dcff2e3f84f58092741e6f7","impliedFormat":1},{"version":"669f1bc764b5fd840e483e123909aefdab8dc82c9aeadae194d75129fbba0b53","impliedFormat":1},{"version":"23769d3f0549de671a5ec795a8c2c6c4fd80c22af92348daa349073b65355fe8","impliedFormat":1},{"version":"774182677ec80bd5e58d287833ec21e02bcfccfdd20247780375691f201a0263","impliedFormat":1},{"version":"66bc333acb797d6c079d8830ef73bd4a34c4e1709e6a9d40bc20d5b92141d50d","impliedFormat":1},{"version":"92fe8e78ad5d9f9eca627b40cbc1fcfc095a230aba0911101d1c74f3ef77c32c","impliedFormat":1},{"version":"78dc76bd9afff09e5cea823d477657d25be9b0e1da7582df7df6e713abc6b7e0","impliedFormat":1},{"version":"651be876b03c705ac06a8cddd6ea90f635855d6312702a441e37b710d4291387","impliedFormat":1},{"version":"ae2d7f7735a249142233a5b9624baf7d1076c1b8e30bf6f9ed1f1f96641d368c","impliedFormat":1},{"version":"667514a0b45b9137a724df446646e49c6c5ff8e6c52b51faf7e7d97c07876339","impliedFormat":1},{"version":"d9b1e95de78d5ed6313c1f5514d71dae8e2dfd758df656912f2e40ffae72fdc3","impliedFormat":1},{"version":"24e34d276c6b1d5b38adc1a02ebca9d211154478cf875a3d175c12bd2473180d","impliedFormat":1},{"version":"2e7a903e7bad7e1053fd16172349f653b8e1f04b118fa6a0c94f03a05ce66ee8","impliedFormat":1},{"version":"a2b7e8befa2bec65d655a9205fe6ba2c6c313e8af050e0ec6878d667368b0370","impliedFormat":1},{"version":"1fdae95c93d7a258da7b02e50e7c4f4eb2041c4e8c86819c6bab35f1d3b33825","impliedFormat":1},{"version":"8c1eacab9cdc1a87e6142c96994b4679c81c9445557e14fdf3210352b7586209","impliedFormat":1},{"version":"05c811914dd75723518d9e11ab4e406bf49ea23b21ca4b0c014f529630cd6bfc","impliedFormat":1},{"version":"cfb373d580586808b221e2ec5555e381569bbcd65ed91abf6467235796e4011f","impliedFormat":1},{"version":"c01126bfe2cf99a27503a39cb9bd923760f43179322d9ee06640c2e329e00916","impliedFormat":1},{"version":"2b6cf5f7e4b87a9d212aa0b043a4e0203f75aa7a505457838c5c12ef3c5cccf8","impliedFormat":1},{"version":"e9214291673a507e06de72638d08cb77a5a83946ff371fe3118231fd14b66148","impliedFormat":1},{"version":"09949a01affc32445e16e0360269d2a7c3f925c2e67789934fbbaf5658669765","impliedFormat":1},{"version":"ddf55f92812e0c95b45ad70bb3b594c23a9741c3c805e916747b8b4d74682763","impliedFormat":1},{"version":"6ecc423e71318bafbd230e6059e082c377170dfc7e02fccfa600586f8604d452","impliedFormat":1},{"version":"772f9bdd2bf50c9c01b0506001545e9b878faa7394ad6e7d90b49b179a024584","impliedFormat":1},{"version":"ccb26251684230c0e18bdc9fdffa313a9f92ba9f1e1c590bf4638cd5ca08b3e5","impliedFormat":1},{"version":"7467736a77548887faa90a7d0e074459810a5db4bbc6de302a2be6c05287ccae","impliedFormat":1},{"version":"39504a2c1278ee4d0dc1a34e27c80e58b4c53c08c87e3a7fc924f18c936bebb5","impliedFormat":1},{"version":"cd1ccdd9fd7980d43dfede5d42ee3d18064baed98b136089cf7c8221d562f058","impliedFormat":1},{"version":"d60f9a4fd1e734e7b79517f02622426ea1000deb7d6549dfdece043353691a4e","impliedFormat":1},{"version":"ec05ccc3a2e35ef2800a5b5ed2eb2ad4cd004955447bebd86883ddf49625b400","impliedFormat":1},{"version":"403d28b5e5f8fcff795ac038902033ec5890143e950af45bd91a3ed231e8b59c","impliedFormat":1},{"version":"c73b59f91088c00886d44ca296d53a75c263c3bda31e3b2f37ceb137382282be","impliedFormat":1},{"version":"e7aa2c584edb0970cb4bb01eb10344200286055f9a22bc3dadcc5a1f9199af3e","impliedFormat":1},{"version":"bfeb476eb0049185cb94c2bfcadb3ce1190554bbcf170d2bf7c68ed9bb00458e","impliedFormat":1},{"version":"ae23a65a2b664ffe979b0a2a98842e10bdf3af67a356f14bbc9d77eb3ab13585","impliedFormat":1},{"version":"2db00053dff66774bc4216209acf094dd70d9dfd8211e409fc4bd8d10f7f66f6","impliedFormat":1},{"version":"eccf6ad2a8624329653896e8dbd03f30756cbd902a81b5d3942d6cf0e1a21575","impliedFormat":1},{"version":"1930c964051c04b4b5475702613cd5a27fcc2d33057aa946ff52bfca990dbc84","impliedFormat":1},{"version":"762992adfa3fbf42c0bce86caed3dc185786855b21a20265089770485e6aa9d3","impliedFormat":1},{"version":"1dbdb9a095f0619197019e870f3481a91e9281c77b0092a19ddfd1903066cd54","impliedFormat":1},{"version":"62463aa3d299ae0cdc5473d2ac32213a05753c3adce87a8801c6d2b114a64116","impliedFormat":1},{"version":"16d1ff93435f6e81a94d2993b290e708ed84131e23a70c5838d80ed77c006618","impliedFormat":1},{"version":"bd3e38cbf8108b661c591dcd03290d5cf2f2a8a1c74b045ba6b6bf4118b0a967","impliedFormat":1},{"version":"40abfc1faa2971acedb69bde8d8c4bbd4edce4af12f786e747dfb8298e6a05a1","impliedFormat":1},{"version":"4423628def6b7993f94afbddba7dd2b0668f85f6dac83c4b8f8a578ee95524f9","impliedFormat":1},{"version":"f689c0633e8c95f550d36af943d775f3fae3dac81a28714b45c7af0bbb76a980","impliedFormat":1},{"version":"fef736cfb404b4db9aa942f377dbbac6edb76d18aabd3b647713fa75da8939e9","impliedFormat":1},{"version":"0495afa06118083a11cd4da27acfd96a01b989aff0fc633823c5febe9668ef15","impliedFormat":1},{"version":"67feb4436be89f58ba899dec57f6e703bee1bb7205ba21ab50fca237f6753787","impliedFormat":1},{"version":"75849f5ead7684bf85ee9cce7e84683ed4332fa187f8ee0978ba9df96c5cee06","impliedFormat":1},{"version":"b5325ff5c9dc488bb9c87711faf2b73f639c45f190b81df88ed056807206958b","impliedFormat":1},{"version":"cc4f5179acd0a8efad722a44c4621d0da29169e03d78a452a27f73e1e7f27985","impliedFormat":1},{"version":"a743cf98667fdbb6989d9a7629d25a9824a484ce639bbf2740dc809341e6dbce","impliedFormat":1},{"version":"a16d79b3c260525e9637a0d224d8461305097bb255e4a53b4c3d2d08ec3463fa","impliedFormat":1},{"version":"bb732222ec0c3c23753dcfbafd78ea3eba480c068d5b5c28d6f12d5bc1516cf0","impliedFormat":1},{"version":"8fc97ef271771dc6f81a9c846d007ac4f0cb5779e3f441c1de54dfda5046fe7b","impliedFormat":1},{"version":"649bc33e15b742fdfe68157f0c08dde7f7355d027515c321ca076f13c2b207e2","impliedFormat":1},{"version":"7b36f5bce24167f089e4d3601e5fde14f0a233e1a0954df5ec56ae07f36e2219","impliedFormat":1},{"version":"1c225a18846203fafc4334658715b0d3fd3ee842c4cfd42e628a535eda17730d","impliedFormat":1},{"version":"7ce93da38595d1caf57452d57e0733474564c2b290459d34f6e9dcf66e2d8beb","impliedFormat":1},{"version":"d7b672c1c583e9e34ff6df2549d6a55d7ca3adaf72e6a05081ea9ee625dac59f","impliedFormat":1},{"version":"f3a2902e84ebdef6525ed6bf116387a1256ea9ae8eeb36c22f070b7c9ea4cf09","impliedFormat":1},{"version":"33bb0d96cea9782d701332e6b7390f8efae3af92fd3e2aa2ac45e4a610e705d6","impliedFormat":1},{"version":"ae3e98448468e46474d817b5ebe74db11ab22c2feb60e292d96ce1a4ee963623","impliedFormat":1},{"version":"f0a2fdee9e801ac9320a8660dd6b8a930bf8c5b658d390ae0feafdba8b633688","impliedFormat":1},{"version":"7beb7f04f6186bdac5e622d44e4cac38d9f2b9fcad984b10d3762e369524dd77","impliedFormat":1},{"version":"df09e59ace0cf7fd8e3c767b0b8f3d5b2212bd40d4e9dbf49a388526ead5e545","impliedFormat":99},{"version":"03fe713f6d3e69f47d4871545b2cd40e1f714b11e3945f6ab1e05361cad19192","impliedFormat":99},{"version":"25ea3ca113eb33c517ace8bd6555e8caf1c99d34dea7b3a48b074bdc5e7cc735","impliedFormat":99},{"version":"d5f83721da8ee61cd1620f0e4abc9d60453b4ef0b25945172bbd478ff6e3adcb","impliedFormat":99},{"version":"597536b4c8e7e309dd823f61206ff169ca90a3d68245343a5226a8d20f7a9ffd","impliedFormat":99},{"version":"cfed3c4118baa2ae69ec0da47b5fa722c49e5915c1cb7ffa8d5b53b678b641ca","impliedFormat":99},{"version":"3b5f9ed01add914f4bf2220544cdd4099583c2a72895b2ea495e9284be88b894","impliedFormat":99},{"version":"575425068684056c113b93ec316870eca50195835f04179630997e7b075164d4","impliedFormat":99},{"version":"aa0af7166f48f67765f96dc70c1d7f9f55ae264b96cadf5b6077b2bc0aa2b5dd","impliedFormat":99},{"version":"2fc9c7c6695b151ffd3ed667d6d793c2f656461978e840eff1d1350fc0bb1ebb","impliedFormat":99},{"version":"4d590f0e0b4abaf693f94d08b5c414928f2571aea5ac6efb97e4646e195dac48","impliedFormat":99},{"version":"bf1655c135bd654637f98f934f9a9eb4d6450194ca2f4968b79263608da59fdd","impliedFormat":99},{"version":"1ebe079cc9ed9ec4cd11d02c70f209caf16e9dd8e1e801a36648ce711bb3c404","impliedFormat":99},{"version":"b9a49ec04f7dac4bdcb928894d3c6bfc15a4ffee5f14d4b2bef69069de2b1d25","impliedFormat":99},{"version":"d2554dc921a526fc29600ef66da5d37577ce64557eaceebdb2b6170776051ffd","impliedFormat":99},{"version":"1fffc635777e6b7edc2caf5e8473fd161ba8fe5605ae84b64746a2a34045e6e3","impliedFormat":99},{"version":"f6f35852e407d4c04e578478e743c8101227037abd405ad71564e8430d4e4c1c","impliedFormat":99},{"version":"0e16f517285c960f284ff5367c239c24e20acfd3b3aced00d7842c7cd867898c","impliedFormat":99},{"version":"063929189f06ac3087123f98ce8736eea5c2a4cecbaa46c54b58118608fb8708","impliedFormat":99},{"version":"95e249a5d61382550bbf6341cb31a3114b0c10c232b0fbac97da74f83275dbab","impliedFormat":99},{"version":"34880c694bdb6f266bf484dbc60bd887890ab1c8d6807459fdf93f6ab0b0c792","impliedFormat":99},{"version":"d490c69a03b97298294b4d2159175f2f9b62a7dfcd81efc63ea3505c60fc0ac8","impliedFormat":99},{"version":"c0511c2a0a6ae726a66a0b25336fdc61c632c6c1505eb0bbbe1556055fd06919","impliedFormat":99},{"version":"bbd577f9d34a868d751e14a904401a6a026de322bd0f7cc7d51ecc585b57c6e6","impliedFormat":99},{"version":"e06f1dbc167fd37808d2f36aee8ef3bfae734d13fc4afcd9994072a30099df0b","impliedFormat":99},{"version":"7e0693b9604ff4fd358a2f21db90982fce11a4ff216eeae85e326f108d648d68","impliedFormat":99},{"version":"69d5a40440e664ec9493c61169414208472583f342346fb31dcbebad23c6a780","impliedFormat":99},{"version":"3d1efa91afa616c307864fa93f9e7777672bf90ac79c16936969efbc6629cbc1","impliedFormat":99},{"version":"722d99f854a33867a3397fe397924c0de326741e9d7830876481ccf87643a133","impliedFormat":99},{"version":"6ddebf5efb47d10d48d734f855b5cd13772de6d14b50779a17590afa30fcaefc","impliedFormat":99},{"version":"0c4e55d5ee917d3efca585b9eb138df9eb9cd38ec5a8ab258fc0e4fe8d54abd6","impliedFormat":99},{"version":"a41283ab6303ab1d21729da5723952e1b7d9d1bf379b9cce09132403f6f0f07d","impliedFormat":99},{"version":"1557f6fa35f1fc5d23911982761a7ddc4fbe9322eda575f6dadca8d5515e0cee","impliedFormat":99},{"version":"ded4768515ff723001ca99221ec8a7b751a4f90af8be95c885ec8a21efa548d4","impliedFormat":99},{"version":"86a6b6352a6a47fa8698f68119eb716ea951f541128d108382137e3d85900162","impliedFormat":99},{"version":"b9e6aa9de64cbd004d2c59ad79cff12a5d34406153456b869eae6b1d8f5bbb61","impliedFormat":99},{"version":"b864079910dbf273badc3367d21910e6f8887705defda6d51882084ef5b6ebb5","impliedFormat":99},{"version":"5e1fbca4c7648ff481cd7dda46ca8651239f4898bbed3d5066b8d6db0f60c555","impliedFormat":99},{"version":"0fd72d2cd43f9da04478aa6cbb922c27fda6b4a0ca7235aee8f6a933941bae92","impliedFormat":99},{"version":"28a5fc04797c6992303791a4b79ed99431bf2af90b77842948e3e8bc0f681d97","impliedFormat":99},{"version":"20a397ebeea68a193465caeb8f1b3225c49c6bdc4545a0ca6521fa684ef2fc5b","impliedFormat":99},{"version":"9edb51982e31faae66cef7076aacce409cab4637f0ec6e6851331fc87d9fa872","impliedFormat":99},{"version":"8a954a3b53672645d10a61e617272cd309bd7dc442f914427291ea8a2cb3c599","impliedFormat":99},{"version":"69e56ac933cbb0a62cbed3436a44068445460c3a246ae5b7b70e010dd3d8e0e5","impliedFormat":99},{"version":"dbafd3b17be2ca81493a6d6daf7afb6d04b83dd3b80c556ae5973e9a375aa6ff","impliedFormat":99},{"version":"8ea7264ce539f97f4720250a14695a1f82c3ac33ed66617991438cfb3d41947f","impliedFormat":99},{"version":"abf4fe7ebd8771a5c9d963754ae0c088c159e0e12ff77ed2e48f69d86ed50be5","impliedFormat":99},{"version":"050985cfd782bb62131bdc040cd444f65bbd35ca1b45e3eefde79ef713ddeb1b","impliedFormat":99},{"version":"cd935cd60191b79134684160cf08d5ab555512b7befd5f88b449681f7e037a3e","impliedFormat":99},{"version":"5e61341da5f93b211c8c11f6ca709a2dda33feded2cb3e1481d0b727aed23cd7","impliedFormat":99},{"version":"3df29fc79cceaa80012df2005f745c1b635a41dda0766ddd29ac8e078c4216f8","impliedFormat":99},{"version":"bb8aac29b972b3826d70b106373ed2600bfa8377ddd5672b0b5e256f361acfb9","impliedFormat":99},{"version":"721e984c6181cf2f1587226d11d2265f5bd1450da58e7598845ae15cee0465b4","impliedFormat":99},{"version":"bfa5dd71d432e277bbf3c44b3dd91db853fd833da21f43cc3a0a2dc324b7af47","impliedFormat":99},{"version":"987f95fafbf1296cd653459ac69b3a73cc4f7f37f38a1c769902bcaabd516452","impliedFormat":99},{"version":"5f3f4c3ea0ce78180d0482cfc808410092b441b727bee9a26d26ef09decb64c3","impliedFormat":99},{"version":"6b1c226b8c0d272c37948df86f81f100157b7cef9d97d2651f1d8e740a2be268","impliedFormat":99},{"version":"3e1e6a7a6e3d0615d046dd62062c557404c9e1c622dfbef4fa83d17c628e314a","impliedFormat":99},{"version":"ded6a76ae5fa6fc3f7f860a187f3b1c81b5bafb953be192501a937307dc739b9","impliedFormat":99},{"version":"8ee4717c4ad7d5976ab1bece799c68045b7b346e274d7774e86ff394cf867d47","impliedFormat":99},{"version":"a9e3299c6098d323bcd9787e2ac5e4d74457e5427c305ebd432e52ed13dd23c0","impliedFormat":99},{"version":"3b8ddc84907c11d89e5240f8299e87fe506a1c18764fb9d546b02f9e347f93e4","impliedFormat":99},{"version":"4b5186a238a3fbfeca1b14fe6b234b8bd5b93ac89a47984715f76f8919e29d96","impliedFormat":99},{"version":"dd693a36f441a1337e9a34b6da2cfdc53d7cd9dbf0d1cde334cab196c3e6f17a","impliedFormat":99},{"version":"e284b0d144003a25e3b7da92c55d80a085531c0c84a77a62f1a3e2bfe82454b1","impliedFormat":99},{"version":"e09a001b1588cde9f5e77560730c5ec6ea346ea09da2d65b3a02629e390d0923","impliedFormat":99},{"version":"77a38dc0e4afa289c6ceaf9121c7718fac9231904ff5f30c0c1201524fb25f23","impliedFormat":99},{"version":"2505ab6e616e35b2a63dcc8cafd3d6092c6e0109b206cec1be7d80cd450cfb7e","impliedFormat":99},{"version":"c2d66e86bd5f13ad098ddb98ab863bcf0d15b323cc9bce6ff56e20eb50648926","impliedFormat":99},{"version":"1959affb5ce54dd86a2bca9ba087da5a29fcd1849eb1710f1d6807512ac513d6","impliedFormat":99},{"version":"8ae1ca3c5186af2c3a6e979998c00c82a363d024ed26a8bcb84a6ef21878d4b4","impliedFormat":99},{"version":"05ec4ee3055f601ad3f932832a0b7fb5842fafa6d3a4f29b200c49e0c8d36bc4","impliedFormat":99},{"version":"cf0430d48488f45abbb7184e36b580c1933cc8078581c038583e16cdfa80863d","impliedFormat":99},{"version":"aeb0806490c71f371a75629556f469419997367aafa673ae2e86705652f39227","impliedFormat":99},{"version":"b445ce66b11750fb2172525591647d30b75ec8d003a93ee3efc12954ffb8d5ec","impliedFormat":99},{"version":"a36860808f7994a6ce2c965e11e7a971ae9b438422ffefe9471ed4f3ba3ef3f6","impliedFormat":99},{"version":"6335dfc1f7c285b25ca643890becb12d22fd24079624d91b660f31a3ef130f8a","impliedFormat":99},{"version":"e0e3a4eb638ceb6583ebfa8a83fb27d5ca98ba93ce00d396dd09d41630834a68","impliedFormat":99},{"version":"54927a5dc7fa2c1d7b8232c756d658d051f2c0620533c4048343e671d18c7983","impliedFormat":99},{"version":"8ff6d24bddad8f2bb8ac0ae129760dd1df427765f4f6199390347c0009ff9b48","impliedFormat":99},{"version":"25a0403b5a28416593fc09c3e5150e981c742afedf0b6e423f8a94f1351352c8","impliedFormat":99},{"version":"0db51b9c351d7c2313296e5879fbad8f20af8b9061885c8590ae0216ff6154a2","impliedFormat":99},{"version":"1c6454d7f733067337f1685a06c4981a78d1925ae0381bcd09f2c43b73755aaf","impliedFormat":99},{"version":"fa7cfbc437c87d93860a4a1304a12e8fa9a28a24695e1f4c36d266b4cbdf4e7b","impliedFormat":99},{"version":"4afe4410e572d10448fb1f7f254bc2eca329e00180e75529be8b22465718b2c4","impliedFormat":99},{"version":"6d57f0ab1e858b12895e1eca5e6f407a835c13038fadd5f85134740e6e32b613","impliedFormat":99},{"version":"5d6ef65ccf14b0d51af503adffccdbaa846848cf0fe82310816cf82eb364d107","impliedFormat":99},{"version":"397a17567b445fbeed01f58163c2b9667638ff815881f349cffec5ad30844905","impliedFormat":99},{"version":"4bbac0cdef9e2f41b2d70826633298df274436caf011a093bfc1bd57dd2269c1","impliedFormat":99},{"version":"38bc1e63328558fecd8e2c3f9159ded06a2fd86059b0a91e93f11aeebeb1f177","impliedFormat":99},{"version":"e4756baf25dba2f6660043ca4fc6e36ab8d31a0c34d507624d8a12cbe6ab9b30","impliedFormat":99},{"version":"4be799bfee1766047c11b3b5d371ca9e3993526d50c3e276e7cdb3943dd680a6","impliedFormat":99},{"version":"513f887178e2df3ea70340c20bffc633827c2f0a4e1340a4176eecb6d3c5a4e7","impliedFormat":99},{"version":"7b6ae8994d485350989d50cae27221f2d9929d60677b8c5de4ceb81baf480d3e","impliedFormat":99},{"version":"7adc87c8c1d3fdf85652694a636c6e032b7ea76335de7a110ffb215970d9b1f0","impliedFormat":99},{"version":"27f60ec60daf015ed0510587fd37d65818c085d47f320f03e2178e80ae1b96d2","impliedFormat":99},{"version":"69f868104a0f83fc97451cb143d1fdee65d6133442e585048983a8e27c6dd4be","impliedFormat":99},{"version":"a4fd1c983504d251988ad2e8629dc110228a591e1bc9f85e57b35895e8141cf3","impliedFormat":99},{"version":"8e82daa0bb799f366cfc646fcd65e507d3db4921082426dc45b78cedcb60f71c","impliedFormat":99},{"version":"a2f99636b48361b7e10c232cdeeb3aede976279f950b7f84e8b970471a0dc606","impliedFormat":99},{"version":"e31bcde9cdc47ff503a45bb8d68c38fd39039b06567c8017021f9116e31ecde2","impliedFormat":99},{"version":"bddecda3271cc5aaf904e94c2b65c23cb7528e27567ef31d1302bc8845374e56","impliedFormat":99},{"version":"23306c0e57b32fdf724bb0aba128d0023fd57b856490b1cd69bdc0de2acc334a","impliedFormat":99},{"version":"4df175087aed418f42fd5cf507c1f57f0972484cadbe0f6c38cabd0c6b3576ce","impliedFormat":99},{"version":"df51e368f1e65529fd132dd67c8312f21b644063ce7950e8b820905d70b28eb7","impliedFormat":99},{"version":"74d10836d7259d3a664ed517a3c8547003e1de056d85b8e324a11dbca522503e","impliedFormat":99},{"version":"b020142c9cb2c061e119c6ebc1712f2e66a68968657f4867332789688c706189","impliedFormat":99},{"version":"df08a61b7eb2b11b4e9c771cc3b538f3fc4260c170f8fd89110843323fac2ba2","impliedFormat":99},{"version":"acc1e28219b83d788ef0e28b8d7ff1f3a8fc7df6a49ec141402e044badc84108","impliedFormat":99},{"version":"3552e9ab64219d9d980f9406c354e620f04ca17944459d4b23c62d472d9be2dc","impliedFormat":99},{"version":"e9f94a086b52c2f522f2bc9ecf7539d7bffc390578cc41db9547005b93df5d88","impliedFormat":99},{"version":"66d87665eb8cc693d6ea61f7735ceacf60c373d7901b8fab3a283b843c45cf33","impliedFormat":99},{"version":"5c25d35c4bbeabb961925d2b114602191800afb4d4f164e45979dd2c83f965c2","impliedFormat":99},{"version":"8b989bf267ff6ef7a00f318e95794bcefd06cda44f3cffde905ca579d17acad5","impliedFormat":99},{"version":"f3983ffdad35bf9234e36a691bf959934b723134c070fa5dffccffe046009e2f","impliedFormat":99},{"version":"2d8c69bb71790264bc61c5858afcfd00d5bd7bca6c9c38185f07896661053790","impliedFormat":99},{"version":"0396db572d4384fab79c5ad3b2cf330f167496da87da0e61a3f55e803f0fcc4b","impliedFormat":99},{"version":"9eb195a59362d107cf8f1d92d704fcd034bd92796f72cf031ad0525d88e36d4f","impliedFormat":99},{"version":"b60a1aeffa207842414020d16c86854f99bebff51832478b00451c1770fc9708","impliedFormat":99},{"version":"178ae1eaa5cd24618fec31c62ee6b66f5f57d76b075d9d8b34cc0db5543c0fec","impliedFormat":99},{"version":"4f31b5dbde1dcb81687ef4e06c2636809f6a0517615876bc937fa266f42e87b4","impliedFormat":99},{"version":"33d7dde5b3614d1f000ab11f9be2cb0f032615b726ca8537afc272db0b522a7e","impliedFormat":99},{"version":"97b8ea7292ec9f0828af2d58952ea17497a73943eaa0a2dd3046a4e07a530c61","impliedFormat":99},{"version":"ebba07507741f7d53d05cbb59a8dea0b3b75aba278810b4d2696776f95b779e1","impliedFormat":99},{"version":"5c840682cf2d211808e4f0dc5cd32da409352e8b3d11d7e9ba25c92796932cdf","impliedFormat":99},{"version":"f278958ac0fde187482abb825e61be120427e8aecb42a9155f0144767a29a358","impliedFormat":99},{"version":"cf35b9aa3b45b2098ec7033db87d004913ac7bf1ce52c9c8154fa86477e9046e","impliedFormat":99},{"version":"8002100726ad65ae695ef88b091b9c8cb73e024eaf23b31d228a5a8ce19af31f","impliedFormat":99},{"version":"f7a7233cef5a86a5c2c5e4dab11b46e0688707bd066a80aa5249e6cd6e0211f6","impliedFormat":99},{"version":"354126b46c623665e6aac86b6deb693dc43499dbd71bf655aa5f6bcd7753dae0","impliedFormat":99},{"version":"1f1d4396e7a118ba9e1f49f290b29d0aa946e91fc8180909b1d64b2998b08953","impliedFormat":99},{"version":"534f6fde91eb366097dbf65174356c88c2726d513c55f0f60b2098fc3f6e87ab","impliedFormat":99},{"version":"bc8d8ff31066bbfb937d223a528d545abfba45a0a646b141e2a15dd1948026e9","impliedFormat":99},{"version":"8a03c390eab5e99798e3d24c1d86a9b0ee851d315c0cb7480b42f6a49338d694","impliedFormat":99},{"version":"46b25c26bc3816d779c0353b3c1f6b83eeda1030b99401472a4341a9ab94138f","impliedFormat":99},{"version":"0ba4da683fe4d459827bca4e9c2befc46b9fe589353a08d874440dc6b1119df9","impliedFormat":99},{"version":"a5ed548aea7fdd435b68149641d20d0c823ae4341afc4c5c027d246a321e358b","impliedFormat":99},{"version":"c831a507ce1fa56d927c77b0296eaebbe63208dc2e10bea30ee19c19d3832ac9","impliedFormat":99},{"version":"0e0775f99d5750b8ea2409b6d5783ecb7465552176022512c4ab695e2cc07b25","impliedFormat":99},{"version":"998b22c2762b4c5dda982144f4273439478216601e1dbf607f8da50f90028302","impliedFormat":99},{"version":"de07059049dbb4d7b800fad4f5919c62c0c572d021f2cde9b4cb92d9d312464b","impliedFormat":99},{"version":"b006db5c3868f18e051c60c815dd8d18b42f0bd1f2a4732e8baab08e56443fa4","impliedFormat":99},{"version":"f6162b05c0a5b26d3446503c022652af632a803010319ff6c65ddb425c88c1da","impliedFormat":99},{"version":"ce99d9af9d4091b04b4c2266c06f38d7f39e5614616973e0d17f01a36212c516","impliedFormat":99},{"version":"f4349410e6586843ef78e2795d631a66a9b5a8496e07452948461643f6774753","impliedFormat":99},{"version":"afbf6dde412faa5825df13ab00b8eabe1358558603d6e4c34b4ff83c06128500","impliedFormat":99},{"version":"9468d74878264e4ed6214c0127326482d3d81d8b39c2ffb3ef0887348cfc116c","impliedFormat":99},{"version":"5d761b75b6780d20af311198f88e4a894243753acf28338ce7cc0cb1d5e3bfca","impliedFormat":99},{"version":"4c02021950d7f559417399582f74b4f23e7acf96bf4abfc8511ca9f349e7b090","impliedFormat":99},{"version":"f05da64b51a564bd57764011df409a699928b2b9e018a9692e06d5a3e761a8ae","impliedFormat":99},{"version":"448a1d960c3243442ffb6ddec7087a5dbd062a8b2fdbbc39f6ced3f5b7dd1cef","impliedFormat":99},{"version":"c01a88ada696e9f65a4dd8248bd9a568a3f1ce0c2eaa5e7f8696a2c3b3573654","impliedFormat":99},{"version":"6ca73337f9333cbe5e31c1e03fee42dfbdb119e7fdf991e8aa96767f4696d0b3","impliedFormat":99},{"version":"9235105279d1e63c87e3ea34fb6b20eb4968d7696c4783236a2d8ab5e924807f","impliedFormat":99},{"version":"fb3a41f5d7c41e4195119f98b0df0018e7e04a1b025d7b10ed82741f65c0493d","impliedFormat":99},{"version":"bf21257fb910b2a765ad8529cb457d0d9eb99d8d14ef01836bf04422c185f230","impliedFormat":99},{"version":"9dfbe916e48a8172cc0db07e20248214755205bbd16cd5bc0672dc2cbd80a429","impliedFormat":99},{"version":"cfb85bf0a694c3e0630400fdb2c1f135132b500c152aee6b9ae9d842637378f8","impliedFormat":99},{"version":"2067e20e971aec9f9c3b7a80aa3f2ce908fa690d29614956ab939d4137527d46","impliedFormat":99},{"version":"469bd9ff94e8ee2180eaa7be310e626022f4b97990e01fdee2cb681eadfca444","impliedFormat":99},{"version":"9199cfe666c63b59bfc7a0215ad7b834165e2c8678769aa29b6b15d4035dd874","impliedFormat":99},{"version":"75c20bb61d4944a90fd9fc4d79be814af84552497a30059d1f4a5979e338b576","impliedFormat":99},{"version":"e36d57187446a9b265d011815e80c5ac2d31cdd839e5dfed3cadbade9d63084d","impliedFormat":99},{"version":"ff94c04aacb366b85fa01b058ce27e3f2a26305e87a512b6472013f3951a7639","impliedFormat":99},{"version":"f28c4909885c804c93aabb9561ef520ff620576369eb310195a7a6bbb8d9e587","impliedFormat":99},{"version":"e971398a29ade533ddc2730c360a22672144389e077633fc950660f4c4d9d046","impliedFormat":99},{"version":"52677e8175f66b1d6b684e8249f7b12af8932267f0b2f363ab973fb94ee4d319","impliedFormat":99},{"version":"d1e84e4b4b53354c6333f50ae4337b96f1004f28875d3d7b3800cdf79b0ffd4c","impliedFormat":99},{"version":"a9f319a6a5287c95b72c37b461e0f70f490324cc4a55d71378e2a37f1ca67adc","impliedFormat":99},{"version":"df7c9a0919ac54bb69647b916261beffb40d84494f9cc3e68fc7927a79ccb64f","impliedFormat":99},{"version":"30a24fccfdf6a40249949b222a11c755421b9479bd68a96ee97413540443216b","impliedFormat":99},{"version":"da0ed328391d742978219a5ab07decbdcd353bbdbc87708a2176afa971056a3d","impliedFormat":99},{"version":"14a5746786128a83561f1d719290db89ed9b225e42959bbe0023112035a6e0a0","impliedFormat":99},{"version":"71db39385fc6c5eddb6cc70b1b68920b2aa06cd85ca4a95b1de585e127984881","impliedFormat":99},{"version":"c9f95e2f5326df254b2c867de54f7264763065fa4d29f5f9d10960d97352afcf","impliedFormat":99},{"version":"59e6446d76c9c7a1cf516435f942c5e122b3fa9c80d4962c4eeae63f3bb605af","impliedFormat":99},{"version":"ee28654c6c98fe6b359d34465dbe1f9798d1e7a6ed5ece29daf19de11cb8323e","impliedFormat":99},{"version":"68d524e37e75f230102cd0444befe3e17a8c85438060a552322e7e400519f2c3","impliedFormat":99},{"version":"282d6f2f2150a26e8c5cce93eaf68e829a8683171ba13e92ad7dc8b28a12c623","impliedFormat":99},{"version":"34b95fa727e92d0a2fbe45e37352127297aedd9af64e56dfb324ff1280517f3c","impliedFormat":99},{"version":"4d37c6842a01d7310940ed2d39cfd4a8d63e7676d1113070b3cd725131347844","impliedFormat":99},{"version":"38ccba9a0d7f301e4b590f7a52de8a8fb12e9edb1de6d7ede6a8843176abfd54","impliedFormat":99},{"version":"db4e72e734c0d11d2051dea52f678270eb423be4541e3c39ede40bd29e733484","impliedFormat":99},{"version":"b6fa5f1295afc4b3a9bbae107ea00d1fc37956f25b846338916cbb195515a4e2","impliedFormat":99},{"version":"4b3e07d081541bd9f0418c1963a44b02a65923b6de04d6ef7bfaab8e8b1087d7","impliedFormat":99},{"version":"438659c94886ae81435567673c83b61937048729da03385738a023174cbff051","impliedFormat":99},{"version":"63310e90fe40fb7a431b9ff640d54b70ef30d31b23a634890799569521cc2a02","impliedFormat":99},{"version":"911e8affa1bea9b54a8926ce39295e190ba3e5e36182c7808c3d657fbd77d705","impliedFormat":99},{"version":"02353129e38fd07cc487b5f822ac710ec117e43e479e9f9f8039418ed3291ff5","impliedFormat":99},{"version":"54bd44d1d220488406919d2ddbdb92cef690c8ebfe41d2cdc61a8aaf26d6396c","impliedFormat":99},{"version":"790d0cef4abbfedbde0ff29c9a1865d5ed8364e9e251e25bb13794d30c13ac4b","impliedFormat":99},{"version":"88f2b0ad065d1ff42736c1efeb0e14061b3091d9376c272672be3f27d167a152","impliedFormat":99},{"version":"81de941dc5851bd7ce1e8f81d4d31db1e035de774e571947f8d03b351fe9f764","impliedFormat":99},{"version":"fdc68f982f0c7b074e3787534a5137c3f9d746edc323efddde286931ceb9c954","impliedFormat":99},{"version":"be922b6a92064b78554dfbf46decbddf5a0b023f49a656a7865e17ab0bf710c8","impliedFormat":99},{"version":"609d27139ad9aa20641c466c993b2d8f8c413296ee814b1afd79f48bd809a0f6","impliedFormat":99},{"version":"176b071fba5783d15078411e7c0753d2a874dc0ba0bf334c402e358b59e78f54","affectsGlobalScope":true,"impliedFormat":99},{"version":"774d51ea5facd44ed191c2e420f2a0ab4da76a41905e8c1c3aa2a532ec340d97","impliedFormat":99},{"version":"2be23228f8822815f04418af4b3616f6c12d2e8310d3536537ca59c791fd71bd","impliedFormat":99},{"version":"3e9c9a37943e0f4c86e33e47c598a43f25117acf8fdf177e6ff5e0476e6d0cee","impliedFormat":99},{"version":"2c0b6ecefb1757ad6ce6d2414b3c268cb9092cff307f6794c75e27f7b1b3b358","impliedFormat":99},{"version":"10f2d3d9c642a1e734adad62f07866c3217b1f5f89f9f3f47d3fd6a295bef8d9","impliedFormat":99},{"version":"4894b371550ff623685722b8fc3064eec2a1353d0a4f7a4f46707b446d3cd607","impliedFormat":99},{"version":"1306e750b3d9089eddb926279035e88119bff73ba6d12bcd1ac3907eef2bc235","impliedFormat":99},{"version":"f97a6ead0f9c40bd2bf83cdae4aa47655aea300282afd44998180d9cf62b7d76","impliedFormat":99},{"version":"a5d1b10c57d14126c7a312e2bb28763c745a87c4f5c005ec6b9ad79aa16850ae","impliedFormat":99},{"version":"33b25938d78614b92778d270bde2c971ecd7f369ef6c990d13e247eb2c7882ad","impliedFormat":99},{"version":"ef325176a8c255a9a55bec7c23d6289c98b00ebfd67112bd4b915c679d721b1d","impliedFormat":99},{"version":"81c53ecba335a74d626d838f842eaa7cf84289776b413356bcd61560f07c9e51","impliedFormat":99},{"version":"47a102af679f68d61d7754dd8f133fab95c3cf7c2dc6674e70efd1b7b7c815ce","impliedFormat":99},{"version":"41931aa72d208139935cd9537c83679c6ca91fe69fd1bd8ec88bbe8e93fe2a2e","impliedFormat":99},{"version":"793014c8196d3044e2d425d7de6339e130a8f81136c5876e2e88e1b8279dbea5","impliedFormat":99},{"version":"7cfcb8c758cb502085d9128ba3ff999084cafd64b9b7c317f87fc85170d1282c","impliedFormat":99},{"version":"6d0b4092bc1fdd4843d9a4313b470b6b7773b5fb712545d6174fd4d703265ae3","impliedFormat":99},{"version":"b6e63e92b837071df07652d3f5632727214b713881c8416a133f7afa977d6e44","impliedFormat":99},{"version":"b09eefc95f09a9a9c61e4f2ed3c1e22069c703493f8e231bc76d3c6cf7ab1422","impliedFormat":99},{"version":"1b08cc33d8dedfa20adf4a779020ec36d494ab7ea503395c658c5e286a3b50e1","impliedFormat":99},{"version":"2c94d2217244dd31275ca5e404560c5c2105b5f06f8985d0f039f39caa1e9e30","impliedFormat":99},{"version":"e77d73e81f5824767db0df8bdb7b7c72cb1741d5fd74e099bfaa6369b8716491","impliedFormat":99},{"version":"077f88e83a13ea89300c26c39ca8ec3708bfd09a15464c71e2fd762708fbecea","impliedFormat":99},{"version":"4f023892bf3e27c71473a12d3b838cbab4350e1108a47194d570627664beb5d8","impliedFormat":99},{"version":"774a6eb661aad32b5f9b73bf9d08af7f9204a4bc67a583494caf43fa09fb2af9","impliedFormat":99},{"version":"0c3d92e5fac4a662f12b04c12ca741b4f34a1bf2824a470414322ddb61b350bb","impliedFormat":99},{"version":"f1085f9fe245cfdb8ebe8b8fe55bd81e9adcb3381f206aedb6e45793b6debb47","impliedFormat":99},{"version":"a4c05674bf833557741ebbcc3fa4a25ddd052e1c762a91037db94a2d7688ebbe","impliedFormat":99},{"version":"97006e8ef367bc2388ea292d7eb6cf471bd2b53d266642ef8284b66afe6d01bf","impliedFormat":99},{"version":"927c282fb88ca5c95a9aaea00175b56b0a6dc8728b246c9e0ec455de40d54fe9","impliedFormat":99},{"version":"7dac0babb2b88108fc5a5410aaf6fe6e59ef1e158e3b5283a990ea503ac3ea07","impliedFormat":99},{"version":"2f4620eeb98e884074a0ba924445a69b29654da70dcff2e3f84f58092741e6f7","impliedFormat":99},{"version":"669f1bc764b5fd840e483e123909aefdab8dc82c9aeadae194d75129fbba0b53","impliedFormat":99},{"version":"23769d3f0549de671a5ec795a8c2c6c4fd80c22af92348daa349073b65355fe8","impliedFormat":99},{"version":"774182677ec80bd5e58d287833ec21e02bcfccfdd20247780375691f201a0263","impliedFormat":99},{"version":"66bc333acb797d6c079d8830ef73bd4a34c4e1709e6a9d40bc20d5b92141d50d","impliedFormat":99},{"version":"92fe8e78ad5d9f9eca627b40cbc1fcfc095a230aba0911101d1c74f3ef77c32c","impliedFormat":99},{"version":"78dc76bd9afff09e5cea823d477657d25be9b0e1da7582df7df6e713abc6b7e0","impliedFormat":99},{"version":"651be876b03c705ac06a8cddd6ea90f635855d6312702a441e37b710d4291387","impliedFormat":99},{"version":"ae2d7f7735a249142233a5b9624baf7d1076c1b8e30bf6f9ed1f1f96641d368c","impliedFormat":99},{"version":"667514a0b45b9137a724df446646e49c6c5ff8e6c52b51faf7e7d97c07876339","impliedFormat":99},{"version":"d9b1e95de78d5ed6313c1f5514d71dae8e2dfd758df656912f2e40ffae72fdc3","impliedFormat":99},{"version":"24e34d276c6b1d5b38adc1a02ebca9d211154478cf875a3d175c12bd2473180d","impliedFormat":99},{"version":"2e7a903e7bad7e1053fd16172349f653b8e1f04b118fa6a0c94f03a05ce66ee8","impliedFormat":99},{"version":"a2b7e8befa2bec65d655a9205fe6ba2c6c313e8af050e0ec6878d667368b0370","impliedFormat":99},{"version":"1fdae95c93d7a258da7b02e50e7c4f4eb2041c4e8c86819c6bab35f1d3b33825","impliedFormat":99},{"version":"8c1eacab9cdc1a87e6142c96994b4679c81c9445557e14fdf3210352b7586209","impliedFormat":99},{"version":"05c811914dd75723518d9e11ab4e406bf49ea23b21ca4b0c014f529630cd6bfc","impliedFormat":99},{"version":"cfb373d580586808b221e2ec5555e381569bbcd65ed91abf6467235796e4011f","impliedFormat":99},{"version":"c01126bfe2cf99a27503a39cb9bd923760f43179322d9ee06640c2e329e00916","impliedFormat":99},{"version":"2b6cf5f7e4b87a9d212aa0b043a4e0203f75aa7a505457838c5c12ef3c5cccf8","impliedFormat":99},{"version":"e9214291673a507e06de72638d08cb77a5a83946ff371fe3118231fd14b66148","impliedFormat":99},{"version":"09949a01affc32445e16e0360269d2a7c3f925c2e67789934fbbaf5658669765","impliedFormat":99},{"version":"ddf55f92812e0c95b45ad70bb3b594c23a9741c3c805e916747b8b4d74682763","impliedFormat":99},{"version":"5ec6ba1674cf73d6a2d42e8ec00ded92f0211a92ae1bf5b1af1dbd1eb84e6ffe","impliedFormat":1},{"version":"f60e3e3060207ac982da13363181fd7ee4beecc19a7c569f0d6bb034331066c2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"21ac4cf3f8d8c6e1201cb31f600be708c9a37867fc5c73b7ccf80560fae591c8","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"798367363a3274220cbed839b883fe2f52ba7197b25e8cb2ac59c1e1fd8af6b7","impliedFormat":1},{"version":"2636a309ed87d6876728d9aca846a76b372cf2a21a4fdf9940a82a2dd86687d0","impliedFormat":1},{"version":"7d0021e828e9649bff9ddaccc3a8f1cc373810822d444f88b3939fccd6ee8cb8","impliedFormat":1},{"version":"b607f744de5cbb2137eb48b65b66bc89c60e08fa8ad213eabfea6084abf9423b","impliedFormat":99},{"version":"380b919bfa0516118edaf25b99e45f855e7bc3fd75ce4163a1cfe4a666388804","impliedFormat":1},{"version":"40de86ced5175a6ffe84a52abe6ac59ac0efbc604a5975a8c6476c3ddc682ff1","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"5a0b15210129310cee9fa6af9200714bb4b12af4a04d890e15f34dbea1cf1852","impliedFormat":1},{"version":"0244119dbcbcf34faf3ffdae72dab1e9bc2bc9efc3c477b2240ffa94af3bca56","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"8b0b6a4c032a56d5651f7dd02ba3f05fbfe4131c4095093633cda3cae0991972","impliedFormat":1},{"version":"192a0c215bffe5e4ac7b9ff1e90e94bf4dfdad4f0f69a5ae07fccc36435ebb87","impliedFormat":1},{"version":"3ef8565e3d254583cced37534f161c31e3a8f341ff005c98b582c6d8c9274538","impliedFormat":1},{"version":"d7e42a3800e287d2a1af8479c7dd58c8663e80a01686cb89e0068be6c777d687","impliedFormat":1},{"version":"1098034333d3eb3c1d974435cacba9bd5a625711453412b3a514774fec7ca748","impliedFormat":1},{"version":"f2388b97b898a93d5a864e85627e3af8638695ebfa6d732ecd39d382824f0e63","impliedFormat":1},{"version":"73a3180fe69bf6e8d61f8fbbf969a3e4c9d19e1b3570768a281d371f85aa2dec","impliedFormat":1},{"version":"f477375e6f0bf2a638a71d4e7a3da8885e3a03f3e5350688541d136b10b762a6","impliedFormat":1},{"version":"a44d6ea4dc70c3d789e9cef3cc42b79c78d17d3ce07f5fd278a7e1cbe824da56","impliedFormat":1},{"version":"55cd8cbc22fe648429a787e16a9cd2dc501a2aafd28c00254ad120ef68a581c0","impliedFormat":1},{"version":"ba4900e9d6f9795a72e8f5ca13c18861821a3fc3ae7858acb0a3366091a47afb","impliedFormat":1},{"version":"7778e2cc5f74ef263a880159aa7fa67254d6232e94dd03429a75597a622537a7","impliedFormat":1},{"version":"8e06a1ef49502a62039eeb927a1bd7561b0bce48bd423a929e2e478fd827c273","impliedFormat":1},{"version":"7ec3d0b061da85d6ff50c337e3248a02a72088462739d88f33b9337dba488c4f","impliedFormat":1},{"version":"2f554c6798b731fc39ff4e3d86aadc932fdeaa063e3cbab025623ff5653c0031","impliedFormat":1},{"version":"fe4613c6c0d23edc04cd8585bdd86bc7337dc6265fb52037d11ca19eeb5e5aaf","impliedFormat":1},{"version":"53b26fbee1a21a6403cf4625d0e501a966b9ccf735754b854366cee8984b711c","impliedFormat":1},{"version":"9ff247206ec5dffdfadddfded2c9d9ad5f714821bb56760be40ed89121f192f4","impliedFormat":1},{"version":"98c6ddd06251098b3302e7094cbc9ab54a2ea88069f5416b7d0b8daee2ff8aa2","impliedFormat":1},{"version":"8c59d8256086ed17676139ee43c1155673e357ab956fb9d00711a7cac73e059d","impliedFormat":1},{"version":"cfe88132f67aa055a3f49d59b01585fa8d890f5a66a0a13bb71973d57573eee7","impliedFormat":1},{"version":"53ce488a97f0b50686ade64252f60a1e491591dd7324f017b86d78239bd232ca","impliedFormat":1},{"version":"50fd11b764194f06977c162c37e5a70bcf0d3579bf82dd4de4eee3ac68d0f82f","impliedFormat":1},{"version":"e0ceb647dcdf6b27fd37e8b0406c7eafb8adfc99414837f3c9bfd28ffed6150a","impliedFormat":1},{"version":"99579aa074ed298e7a3d6a47e68f0cd099e92411212d5081ce88344a5b1b528d","impliedFormat":1},{"version":"096e4ddaa8f0aa8b0ceadd6ab13c3fab53e8a0280678c405160341332eca3cd7","impliedFormat":1},{"version":"415b55892d813a74be51742edd777bbced1f1417848627bf71725171b5325133","impliedFormat":1},{"version":"942ab34f62ac3f3d20014615b6442b6dc51815e30a878ebc390dd70e0dec63bf","impliedFormat":1},{"version":"7a671bf8b4ad81b8b8aea76213ca31b8a5de4ba39490fbdee249fc5ba974a622","impliedFormat":1},{"version":"8e07f13fb0f67e12863b096734f004e14c5ebfd34a524ed4c863c80354c25a44","impliedFormat":1},{"version":"9faa56e38ed5637228530065a9bab19a4dc5a326fbdd1c99e73a310cfed4fcde","impliedFormat":1},{"version":"7d4ad85174f559d8e6ed28a5459aebfc0a7b0872f7775ca147c551e7765e3285","impliedFormat":1},{"version":"d422f0c340060a53cb56d0db24dd170e31e236a808130ab106f7ab2c846f1cdb","impliedFormat":1},{"version":"424403ef35c4c97a7f00ea85f4a5e2f088659c731e75dbe0c546137cb64ef8d8","impliedFormat":1},{"version":"16900e9a60518461d7889be8efeca3fe2cbcd3f6ce6dee70fea81dfbf8990a76","impliedFormat":1},{"version":"6daf17b3bd9499bd0cc1733ab227267d48cd0145ed9967c983ccb8f52eb72d6e","impliedFormat":1},{"version":"e4177e6220d0fef2500432c723dbd2eb9a27dcb491344e6b342be58cc1379ec0","impliedFormat":1},{"version":"ddc62031f48165334486ad1943a1e4ed40c15c94335697cb1e1fd19a182e3102","impliedFormat":1},{"version":"b3f4224eb155d7d13eb377ef40baa1f158f4637aa6de6297dfeeacefd6247476","impliedFormat":1},{"version":"4a168e11fe0f46918721d2f6fcdb676333395736371db1c113ae30b6fde9ccd2","impliedFormat":1},{"version":"5b0a75a5cced0bed0d733bde2da0bbb5d8c8c83d3073444ae52df5f16aefb6ab","impliedFormat":1},{"version":"ef2c1585cad462bdf65f2640e7bcd75cd0dbc45bae297e75072e11fe3db017fa","impliedFormat":1},{"version":"ef809928a4085de826f5b0c84175a56d32dd353856f5b9866d78b8419f8ea9bc","impliedFormat":1},{"version":"6f6eadb32844b0ec7b322293b011316486894f110443197c4c9fbcba01b3b2fa","impliedFormat":1},{"version":"a51e08f41e3e948c287268a275bfe652856a10f68ddd2bf3e3aaf5b8cdb9ef85","impliedFormat":1},{"version":"862f7d760ef37f0ae2c17de82e5fbf336b37d5c1b0dcf39dcd5468f90a7fdd54","impliedFormat":1},{"version":"af48a76b75041e2b3e7bd8eed786c07f39ea896bb2ff165e27e18208d09b8bee","impliedFormat":1},{"version":"cb524ec077f3963e13e85747c6b53fbdf6bf407c84ca1873c6e43da1e96bee6d","impliedFormat":1},{"version":"deb092bc337b2cb0a1b14f3d43f56bc663e1447694e6d479d6df8296bdd452d6","impliedFormat":1},{"version":"041bc1c3620322cb6152183857601707ef6626e9d99f736e8780533689fb1bf9","impliedFormat":1},{"version":"22bd7c75de7d68e075975bf1123de5bccecfd06688afff2e2022b4c70bfc91c3","impliedFormat":1},{"version":"128e7c2ffd37aa29e05367400d718b0e4770cefb1e658d8783ec80a16bc0643a","impliedFormat":1},{"version":"076ac4f2d642c473fa7f01c8c1b7b4ef58f921130174d9cf78430651f44c43ec","impliedFormat":1},{"version":"396c1e5a39706999ec8cc582916e05fcb4f901631d2c192c1292e95089a494d9","impliedFormat":1},{"version":"89df75d28f34fc698fe261f9489125b4e5828fbd62d863bbe93373d3ed995056","impliedFormat":1},{"version":"8ccf5843249a042f4553a308816fe8a03aa423e55544637757d0cfa338bb5186","impliedFormat":1},{"version":"93b44aa4a7b27ba57d9e2bad6fb7943956de85c5cc330d2c3e30cd25b4583d44","impliedFormat":1},{"version":"a0c6216075f54cafdfa90412596b165ff85e2cadd319c49557cc8410f487b77c","impliedFormat":1},{"version":"3c359d811ec0097cba00fb2afd844b125a2ddf4cad88afaf864e88c8d3d358bd","impliedFormat":1},{"version":"3c0b38e8bf11bf3ab87b5116ae8e7b2cad0147b1c80f2b77989dea6f0b93e024","impliedFormat":1},{"version":"8df06e1cd5bb3bf31529cc0db74fa2e57f7de1f6042726679eb8bc1f57083a99","impliedFormat":1},{"version":"d62f09256941e92a95b78ae2267e4cf5ff2ca8915d62b9561b1bc85af1baf428","impliedFormat":1},{"version":"e6223b7263dd7a49f4691bf8df2b1e69f764fb46972937e6f9b28538d050b1ba","impliedFormat":1},{"version":"d9b59eb4e79a0f7a144ee837afb3f1afbc4dab031e49666067a2b5be94b36bd4","impliedFormat":1},{"version":"1db014db736a09668e0c0576585174dbcfd6471bb5e2d79f151a241e0d18d66b","impliedFormat":1},{"version":"8a153d30edde9cefd102e5523b5a9673c298fc7cf7af5173ae946cbb8dd48f11","impliedFormat":1},{"version":"abaaf8d606990f505ee5f76d0b45a44df60886a7d470820fcfb2c06eafa99659","impliedFormat":1},{"version":"51a66bfa412057e786a712733107547ceb6f539061f5bf1c6e5a96e4ccf4f83c","impliedFormat":1},{"version":"d92a80c2c05cf974704088f9da904fe5eadc0b3ad49ddd1ef70ca8028b5adda1","impliedFormat":1},{"version":"fbd7450f20b4486c54f8a90486c395b14f76da66ba30a7d83590e199848f0660","impliedFormat":1},{"version":"ece5b0e45c865645ab65880854899a5422a0b76ada7baa49300c76d38a530ee1","impliedFormat":1},{"version":"62d89ac385aeab821e2d55b4f9a23a277d44f33c67fefe4859c17b80fdb397ea","impliedFormat":1},{"version":"f4dee11887c5564886026263c6ee65c0babc971b2b8848d85c35927af25da827","impliedFormat":1},{"version":"fb8dd49a4cd6d802be4554fbab193bb06e2035905779777f32326cb57cf6a2c2","impliedFormat":1},{"version":"e403ecdfba83013b5eb0e648a92ce182bff2a45ccb81db3035a69081563c2830","impliedFormat":1},{"version":"82d3e00d56a71fc169f3cf9ec5f5ffcc92f6c0e67d4dfc130dafe9f1886d5515","impliedFormat":1},{"version":"b8d57effce2d49a5493debbd8c644e8d52fbe66e2c6d451371375ef5f7bccb8e","impliedFormat":1},{"version":"9963d9857df2df335d1232a12eccbe5c777537a244f4b39406b27bf4736202f6","impliedFormat":1},{"version":"1b33478647aa1b771314745807397002a410c746480e9447db959110999873ce","impliedFormat":1},{"version":"b8d58ef4128a6e8e4b80803e5b67b2aaf1436c133ce39e514b9c004e21b2867e","impliedFormat":1},{"version":"7e6a96b383da9f5acb848bb9dedb9ac8489df7cec46bbf26aeaed2610f709078","impliedFormat":1},{"version":"9fac6ebf3c60ced53dd21def30a679ec225fc3ff4b8d66b86326c285a4eebb5a","impliedFormat":1},{"version":"8cb83cb98c460cd716d2a98b64eb1a07a3a65c7362436550e02f5c2d212871d1","impliedFormat":1},{"version":"07bc8a3551e39e70c38e7293b1a09916867d728043e352b119f951742cb91624","impliedFormat":1},{"version":"e47adc2176f43c617c0ab47f2d9b2bb1706d9e0669bf349a30c3fe09ddd63261","impliedFormat":1},{"version":"7fec79dfd7319fec7456b1b53134edb54c411ba493a0aef350eee75a4f223eeb","impliedFormat":1},{"version":"189c489705bb96a308dcde9b3336011d08bfbca568bcaf5d5d55c05468e9de7a","impliedFormat":1},{"version":"98f4b1074567341764b580bf14c5aabe82a4390d11553780814f7e932970a6f7","impliedFormat":1},{"version":"1dd24cbf39199100fbe2f3dbd1c7203c240c41d95f66301ecc7650ae77875be1","impliedFormat":1},{"version":"2e252235037a2cd8feebfbf74aa460f783e5d423895d13f29a934d7655a1f8be","impliedFormat":1},{"version":"763f4ac187891a6d71ae8821f45eef7ff915b5d687233349e2c8a76c22b3bf2a","impliedFormat":1},{"version":"b6e995b5ef6661f5636ff738e67e4ec90150768ef119ad74b473c404304408a1","impliedFormat":1},{"version":"5d470930bf6142d7cbda81c157869024527dc7911ba55d90b8387ef6e1585aa1","impliedFormat":1},{"version":"074483fdbf20b30bd450e54e6892e96ea093430c313e61be5fdfe51588baa2d6","impliedFormat":1},{"version":"b7e6a6a3495301360edb9e1474702db73d18be7803b3f5c6c05571212acccd16","impliedFormat":1},{"version":"aa7527285c94043f21baf6e337bc60a92c20b6efaa90859473f6476954ac5f79","impliedFormat":1},{"version":"dd3be6d9dcd79e46d192175a756546630f2dc89dab28073823c936557b977f26","impliedFormat":1},{"version":"8d0566152618a1da6536c75a5659c139522d67c63a9ae27e8228d76ab0420584","impliedFormat":1},{"version":"ba06bf784edafe0db0e2bd1f6ecf3465b81f6b1819871bf190a0e0137b5b7f18","impliedFormat":1},{"version":"a0500233cb989bcb78f5f1a81f51eabc06b5c39e3042c560a7489f022f1f55a3","impliedFormat":1},{"version":"220508b3fb6b773f49d8fb0765b04f90ef15caacf0f3d260e3412ed38f71ef09","impliedFormat":1},{"version":"1ad113089ad5c188fec4c9a339cb53d1bcbb65682407d6937557bb23a6e1d4e5","impliedFormat":1},{"version":"e56427c055602078cbf0e58e815960541136388f4fc62554813575508def98b6","impliedFormat":1},{"version":"1f58b0676a80db38df1ce19d15360c20ce9e983b35298a5d0b4aa4eb4fb67e0f","impliedFormat":1},{"version":"3d67e7eb73c6955ee27f1d845cae88923f75c8b0830d4b5440eea2339958e8ec","impliedFormat":1},{"version":"11fec302d58b56033ab07290a3abc29e9908e29d504db9468544b15c4cd7670d","impliedFormat":1},{"version":"c66d6817c931633650edf19a8644eea61aeeb84190c7219911cefa8ddea8bd9a","impliedFormat":1},{"version":"ab1359707e4fc610c5f37f1488063af65cda3badca6b692d44b95e8380e0f6c2","impliedFormat":1},{"version":"37deda160549729287645b3769cf126b0a17e7e2218737352676705a01d5957e","impliedFormat":1},{"version":"d80ffdd55e7f4bc69cde66933582b8592d3736d3b0d1d8cc63995a7b2bcca579","impliedFormat":1},{"version":"c9b71952b2178e8737b63079dba30e1b29872240b122905cbaba756cb60b32f5","impliedFormat":1},{"version":"b596585338b0d870f0e19e6b6bcbf024f76328f2c4f4e59745714e38ee9b0582","impliedFormat":1},{"version":"e6717fc103dfa1635947bf2b41161b5e4f2fabbcaf555754cc1b4340ec4ca587","impliedFormat":1},{"version":"c36186d7bdf1f525b7685ee5bf639e4b157b1e803a70c25f234d4762496f771f","impliedFormat":1},{"version":"026726932a4964341ab8544f12b912c8dfaa388d2936b71cc3eca0cffb49cc1d","impliedFormat":1},{"version":"83188d037c81bd27076218934ba9e1742ddb69cd8cc64cdb8a554078de38eb12","impliedFormat":1},{"version":"7d82f2d6a89f07c46c7e3e9071ab890124f95931d9c999ba8f865fa6ef6cbf72","impliedFormat":1},{"version":"4fc523037d14d9bb6ddb586621a93dd05b6c6d8d59919a40c436ca3ac29d9716","impliedFormat":1},{"version":"569e762cf47aafdad508360a443c6c757e56c61db3b652b65458a7d168d139c4","impliedFormat":1},{"version":"02ed2766d79a00719ac3cc77851d54bd7197c1b12085ea12126bc2a65068223e","impliedFormat":1},{"version":"4b84373e192b7e0f8569b65eb16857098a6ee279b75d49223db2a751fdd7efde","impliedFormat":1},{"version":"5aeea312cd1d3cc5d72fc8a9c964439d771bdf41d9cce46667471b896b997473","impliedFormat":1},{"version":"cfa7bf135cafc5aad7cf544bc1cebf65a1fdb4373223cc85ea7d7196e18be151","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"f2c4a36eb216aadb0d9c79862a31b922ccfa1eaaa38d2124cc9192d40eda4779","impliedFormat":1},{"version":"cb5bb1db16ff4b534f56f7741e7ffd0a007ce36d387a377d4c196036e0932423","impliedFormat":1},{"version":"25be1eb939c9c63242c7a45446edb20c40541da967f43f1aa6a00ed53c0552db","impliedFormat":1},{"version":"08c2bb524b8ed271f194e1c7cc6ad0bcc773f596c41f68a207d0ec02c9727060","impliedFormat":1},{"version":"012b69bc8a16a21aa0863502339c49258c579723f9e7a54faa5f0d5c2b1ae1b7","impliedFormat":1},{"version":"29ad73d9e365d7b046f3168c6a510477bfe30d84a71cd7eb2f0e555b1d63f5f6","impliedFormat":1},{"version":"d99e9f5aa43397599fe824e38c33d13d3a9e19198806a4363114bd7ac58b29cc","impliedFormat":1},{"version":"440099416057789b14f85af057d4924915f27043399c10d4ca67409d94b963cf","impliedFormat":1},{"version":"ac44995fc7d0781d77927bae7dd41a31f0309e695fd2694b175c0ce3bc4b3b50","impliedFormat":1},{"version":"0c1f802f7a60ca8084e5188ac7952accdfc00f39ded3ebbbd3cdcc9da51b9a7b","impliedFormat":1},{"version":"a32e3fc530d8d1a18bf54678d8d55714827a50c9fabdd4ede7155a56be7d1dcb","impliedFormat":1},{"version":"14ecfc29e0c44ad4c5e50f9b597492cd8f45a2a635db8b5fe911a5da83e26cf8","impliedFormat":1},{"version":"06e9dc3f7549e194e0ed6e46e4ac52dee84bb5973f1e96edc2adff83ff6e6e5f","impliedFormat":1},{"version":"c2f041fe0e7ae2d5a19c477d19e8ec13de3d65ef45e442fa081cf6098cdcbe2d","impliedFormat":1},{"version":"0cef678147928ef223ff7f2aae3442cc9f4e9996956e9ac92434e626d0e147f8","impliedFormat":1},{"version":"198ae766bb698feb66d3188cfce59fb33696c951b10f901aa3fc3db4847ce76a","impliedFormat":1},{"version":"6dc488fd3d01e4269f0492b3e0ee7961eec79f4fc3ae997c7d28cde0572dbd91","impliedFormat":1},{"version":"a09b706f16bda9372761bd70cf59814b6f0a0c2970d62a5b2976e2fd157b920f","impliedFormat":1},{"version":"70da4bfde55d1ec74e3aa7635eae741f81ced44d3c344e2d299e677404570ca9","impliedFormat":1},{"version":"bf4f6b0d2ae8d11dc940c20891f9a4a558be906a530b9d9a8ff1032afa1962cd","impliedFormat":1},{"version":"9975431639f84750a914333bd3bfa9af47f86f54edbaa975617f196482cfee31","impliedFormat":1},{"version":"70a5cb56f988602271e772c65cb6735039148d5e90a4c270e5806f59fc51d3a0","impliedFormat":1},{"version":"e083384623f90cfa7e8d2aa7efe78c51095a04ad51d1f82c3e4052689666895d","impliedFormat":1},{"version":"953cbf62815703fa9970c9cfec3c8d033da04a90c2409af6070dcc6858cf6b98","impliedFormat":1},{"version":"68065ce3af3ef8599af8338068cf336be35249eff281ee393186a0ef40db3abf","impliedFormat":1},{"version":"29723e0bc48036a127c3b8874f3abe9b695c56103f685f2b817fc532b8995e33","impliedFormat":1},{"version":"991cf4ed946cdf4c140ccaad45c61fc36a25b238a8fa95af51e93cb20c4b0503","impliedFormat":1},{"version":"81ef252ff5df76bccf7863bb355ccbb8af69f7d1064b3ef87b2b01c30fb2c1f4","impliedFormat":1},{"version":"0f17f5f14a5f53e5709404b5b59fe816eaad15a469412b73330e6f69834234e0","impliedFormat":1},{"version":"01edea77be9c2bef3a5f3fc46324c5e420e5bd72b499c5dec217c91866be5a99","impliedFormat":1},{"version":"39209d2b85d238810ef19ab3905c9498918343bc8f72a1dcae7fc0b08270d9a0","impliedFormat":1},{"version":"92a130d875262e78c581f98faa07c62f4510885df6d98213c72f3b83a1be93c1","impliedFormat":1},{"version":"367b818a25afccdbddf932a62a02012869f59fe66d359ff4aca78a7c2bb680aa","impliedFormat":1},{"version":"0aa14ffe353b8bab88046e64a92efa5cd039f095759fe884d188702956e2cba2","impliedFormat":1},{"version":"68d3eee1d509f45625e39ba325a72c6ce1d2116e3d5c3a40f513472e66622e02","impliedFormat":1},{"version":"4e5f1234308de112f09920e0a0b99f35a9780b3abbc13a84445f32a490d0bb87","impliedFormat":1},{"version":"9ac0e5aea87c4a1d37b4677145e9a75bc8e13bf887bd1148a4acb21ab7398d00","impliedFormat":1},{"version":"625b802ecd18feb6a9d69ef8ef58d6c08c9c9022b8105cdeaa3fc77acaab5667","impliedFormat":1},{"version":"2ac33d7f6999e0fb363d1e483d80f087d3e7d712ff6fcc2b4f7b18b5dab92f37","impliedFormat":1},{"version":"195749d135be639001a554e4b4025b66b3c5c627d90b68266c14399bde120cec","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},{"version":"cb5eaaa2a079305b1c5344af739b29c479746f7a7aefffc7175d23d8b7c8dbb0","impliedFormat":1},{"version":"bd324dccada40f2c94aaa1ebc82b11ce3927b7a2fe74a5ab92b431d495a86e6f","impliedFormat":1},{"version":"56749bf8b557c4c76181b2fd87e41bde2b67843303ae2eabb299623897d704d6","impliedFormat":1},{"version":"5a6fbec8c8e62c37e9685a91a6ef0f6ecaddb1ee90f7b2c2b71b454b40a0d9a6","impliedFormat":1},{"version":"e7435f2f56c50688250f3b6ef99d8f3a1443f4e3d65b4526dfb31dfd4ba532f8","impliedFormat":1},{"version":"51a674644ed5a181ec1497c1b4aa6f8cfcbe3af5481bdb641c1b5a498bcb6f3c","impliedFormat":1},{"version":"33b7f4106cf45ae7ccbb95acd551e9a5cd3c27f598d48216bda84213b8ae0c7e","impliedFormat":1},{"version":"176d6f604b228f727afb8e96fd6ff78c7ca38102e07acfb86a0034d8f8a2064a","impliedFormat":1},{"version":"1b1a02c54361b8c222392054648a2137fc5983ad5680134a653b1d9f655fe43d","impliedFormat":1},{"version":"8bcb884d06860a129dbffa3500d51116d9d1040bb3bf1c9762eb2f1e7fd5c85c","impliedFormat":1},{"version":"e55c0f31407e1e4eee10994001a4f570e1817897a707655f0bbe4d4a66920e9e","impliedFormat":1},{"version":"a37c2194c586faa8979f50a5c5ca165b0903d31ee62a9fe65e4494aa099712c0","impliedFormat":1},{"version":"6602339ddc9cd7e54261bda0e70fb356d9cdc10e3ec7feb5fa28982f8a4d9e34","impliedFormat":1},{"version":"7ffaa736b8a04b0b8af66092da536f71ef13a5ef0428c7711f32b94b68f7c8c8","impliedFormat":1},{"version":"7b4930d666bbe5d10a19fcc8f60cfa392d3ad3383b7f61e979881d2c251bc895","impliedFormat":1},{"version":"46342f04405a2be3fbfb5e38fe3411325769f14482b8cd48077f2d14b64abcfb","impliedFormat":1},{"version":"8fa675c4f44e6020328cf85fdf25419300f35d591b4f56f56e00f9d52b6fbb3b","impliedFormat":1},{"version":"ba98f23160cfa6b47ee8072b8f54201f21a1ee9addc2ef461ebadf559fe5c43a","impliedFormat":1},{"version":"45a4591b53459e21217dc9803367a651e5a1c30358a015f27de0b3e719db816b","impliedFormat":1},{"version":"9ef22bee37885193b9fae7f4cad9502542c12c7fe16afe61e826cdd822643d84","impliedFormat":1},{"version":"b0451895b894c102eed19d50bd5fcb3afd116097f77a7d83625624fafcca8939","impliedFormat":1},{"version":"bce17120b679ff4f1be70f5fe5c56044e07ed45f1e555db6486c6ded8e1da1c8","impliedFormat":1},{"version":"7590477bfa2e309e677ff7f31cb466f377fcd0e10a72950439c3203175309958","impliedFormat":1},{"version":"3f9ebd554335d2c4c4e7dc67af342d37dc8f2938afa64605d8a93236022cc8a5","impliedFormat":1},{"version":"1c077c9f6c0bc02a36207994a6e92a8fbf72d017c4567f640b52bf32984d2392","impliedFormat":1},{"version":"600b42323925b32902b17563654405968aa12ee39e665f83987b7759224cc317","impliedFormat":1},{"version":"32c8f85f6b4e145537dfe61b94ddd98b47dbdd1d37dc4b7042a8d969cd63a1aa","impliedFormat":1},{"version":"2426ed0e9982c3d734a6896b697adf5ae93d634b73eb15b48da8106634f6d911","impliedFormat":1},{"version":"057431f69d565fb44c246f9f64eac09cf309a9af7afb97e588ebef19cc33c779","impliedFormat":1},{"version":"960d026ca8bf27a8f7a3920ee50438b50ec913d635aa92542ca07558f9c59eca","impliedFormat":1},{"version":"71f5d895cc1a8a935c40c070d3d0fade53ae7e303fd76f443b8b541dee19a90c","impliedFormat":1},{"version":"252eb4750d0439d1674ad0dc30d2a2a3e4655e08ad9e58a7e236b21e78d1d540","impliedFormat":1},{"version":"e344b4a389bb2dfa98f144f3f195387a02b6bdb69deed4a96d16cc283c567778","impliedFormat":1},{"version":"c6cdcd12d577032b84eed1de4d2de2ae343463701a25961b202cff93989439fb","impliedFormat":1},{"version":"3dc633586d48fcd04a4f8acdbf7631b8e4a334632f252d5707e04b299069721e","impliedFormat":1},{"version":"3322858f01c0349ee7968a5ce93a1ca0c154c4692aa8f1721dc5192a9191a168","impliedFormat":1},{"version":"6dde0a77adad4173a49e6de4edd6ef70f5598cbebb5c80d76c111943854636ca","impliedFormat":1},{"version":"09acacae732e3cc67a6415026cfae979ebe900905500147a629837b790a366b3","impliedFormat":1},{"version":"f7b622759e094a3c2e19640e0cb233b21810d2762b3e894ef7f415334125eb22","impliedFormat":1},{"version":"99236ea5c4c583082975823fd19bcce6a44963c5c894e20384bc72e7eccf9b03","impliedFormat":1},{"version":"f6688a02946a3f7490aa9e26d76d1c97a388e42e77388cbab010b69982c86e9e","impliedFormat":1},{"version":"9f642953aba68babd23de41de85d4e97f0c39ef074cb8ab8aa7d55237f62aff6","impliedFormat":1},{"version":"159d95163a0ed369175ae7838fa21a9e9e703de5fdb0f978721293dd403d9f4a","impliedFormat":1},{"version":"2d2ec3235e01474f45a68f28cf826c2f5228b79f7d474d12ca3604cdcfdac80c","impliedFormat":1},{"version":"6dd249868034c0434e170ba6e0451d67a0c98e5a74fd57a7999174ee22a0fa7b","impliedFormat":1},{"version":"9716553c72caf4ff992be810e650707924ec6962f6812bd3fbdb9ac3544fd38f","impliedFormat":1},{"version":"506bc8f4d2d639bebb120e18d3752ddeee11321fd1070ad2ce05612753c628d6","impliedFormat":1},{"version":"053c51bbc32db54be396654ab5ecd03a66118d64102ac9e22e950059bc862a5e","impliedFormat":1},{"version":"1977f62a560f3b0fc824281fd027a97ce06c4b2d47b408f3a439c29f1e9f7e10","impliedFormat":1},{"version":"627570f2487bd8d899dd4f36ecb20fe0eb2f8c379eff297e24caba0c985a6c43","impliedFormat":1},{"version":"0f6e0b1a1deb1ab297103955c8cd3797d18f0f7f7d30048ae73ba7c9fb5a1d89","impliedFormat":1},{"version":"0a051f254f9a16cdde942571baab358018386830fed9bdfff42478e38ba641ce","impliedFormat":1},{"version":"17269f8dfc30c4846ab7d8b5d3c97ac76f50f33de96f996b9bf974d817ed025b","impliedFormat":1},{"version":"9e82194af3a7d314ccbc64bb94bfb62f4bfea047db3422a7f6c5caf2d06540a9","impliedFormat":1},{"version":"083d6f3547ccbf25dfa37b950c50bee6691ed5c42107f038cc324dbca1e173ae","impliedFormat":1},{"version":"952a9eab21103b79b7a6cca8ad970c3872883aa71273f540285cad360c35da40","impliedFormat":1},{"version":"8ba48776335db39e0329018c04486907069f3d7ee06ce8b1a6134b7d745271cc","impliedFormat":1},{"version":"e6d5809e52ed7ef1860d1c483e005d1f71bab36772ef0fd80d5df6db1da0e815","impliedFormat":1},{"version":"893e5cfbae9ed690b75b8b2118b140665e08d182ed8531e1363ec050905e6cb2","impliedFormat":1},{"version":"6ae7c7ada66314a0c3acfbf6f6edf379a12106d8d6a1a15bd35bd803908f2c31","impliedFormat":1},{"version":"e4b1e912737472765e6d2264b8721995f86a463a1225f5e2a27f783ecc013a7b","impliedFormat":1},{"version":"97146bbe9e6b1aab070510a45976faaf37724c747a42d08563aeae7ba0334b4f","impliedFormat":1},{"version":"c40d552bd2a4644b0617ec2f0f1c58618a25d098d2d4aa7c65fb446f3c305b54","impliedFormat":1},{"version":"09e64dea2925f3a0ef972d7c11e7fa75fec4c0824e9383db23eacf17b368532f","impliedFormat":1},{"version":"424ddba00938bb9ae68138f1d03c669f43556fc3e9448ed676866c864ca3f1d6","impliedFormat":1},{"version":"a0fe12181346c8404aab9d9a938360133b770a0c08b75a2fce967d77ca4b543f","impliedFormat":1},{"version":"3cc6eb7935ff45d7628b93bb6aaf1a32e8cb3b24287f9e75694b607484b377b3","impliedFormat":1},{"version":"ced02e78a2e10f89f4d70440d0a8de952a5946623519c54747bc84214d644bac","impliedFormat":1},{"version":"efd463021ccc91579ed8ae62584176baab2cd407c555c69214152480531a2072","impliedFormat":1},{"version":"29647c3b79320cfeecb5862e1f79220e059b26db2be52ea256df9cf9203fb401","impliedFormat":1},{"version":"c87c29ad2df837f7bc528688d96793758e0c4b1965f5ca520a8c287999565f66","impliedFormat":1},{"version":"e8cdefd2dc293cb4866ee8f04368e7001884650bb0f43357c4fe044cc2e1674f","impliedFormat":1},{"version":"582a3578ebba9238eb0c5d30b4d231356d3e8116fea497119920208fb48ccf85","impliedFormat":1},{"version":"185eae4a1e8a54e38f36cd6681cfa54c975a2fc3bc2ba6a39bf8163fac85188d","impliedFormat":1},{"version":"0c0a02625cf59a0c7be595ccc270904042bea523518299b754c705f76d2a6919","impliedFormat":1},{"version":"f2c999522aa544d93920205e05e11a5d43332f95ec35bd8a17025a823035bc56","impliedFormat":1},{"version":"cee72255e129896f0240ceb58c22e207b83d2cc81d8446190d1b4ef9b507ccd6","impliedFormat":1},{"version":"3b54670e11a8d3512f87e46645aa9c83ae93afead4a302299a192ac5458aa586","impliedFormat":1},{"version":"c2fc4d3a130e9dc0e40f7e7d192ef2494a39c37da88b5454c8adf143623e5979","impliedFormat":1},{"version":"2e693158fc1eedba3a5766e032d3620c0e9c8ad0418e4769be8a0f103fdb52cd","impliedFormat":1},{"version":"516275ccf3e66dc391533afd4d326c44dd750345b68bb573fc592e4e4b74545f","impliedFormat":1},{"version":"07c342622568693847f6cb898679402dd19740f815fd43bec996daf24a1e2b85","impliedFormat":1},{"version":"fa40d705f9813843d47f19321591499f14d1a18fa5e8ca9beaee5aac633c3d0d","impliedFormat":1},{"version":"a7a6330fb015f72d821e23004e63a3827e0c632b614ef3a310b3c81b66de61fd","impliedFormat":1},{"version":"89968316b7069339433bd42d53fe56df98b6990783dfe00c9513fb4bd01c2a1c","impliedFormat":1},{"version":"a4096686f982f6977433ee9759ecbef49da29d7e6a5d8278f0fbc7b9f70fce12","impliedFormat":1},{"version":"62e62a477c56cda719013606616dd856cfdc37c60448d0feb53654860d3113bb","impliedFormat":1},{"version":"207c107dd2bd23fa9febac2fe05c7c72cdac02c3f57003ab2e1c6794a6db0c05","impliedFormat":1},{"version":"55133e906c4ddabecdfcbc6a2efd4536a3ac47a8fa0a3fe6d0b918cac882e0d4","impliedFormat":1},{"version":"2147f8d114cf58c05106c3dccea9924d069c69508b5980ed4011d2b648af2ffe","impliedFormat":1},{"version":"2eb4012a758b9a7ba9121951d7c4b9f103fe2fc626f13bec3e29037bb9420dc6","impliedFormat":1},{"version":"fe61f001bd4bd0a374daa75a2ba6d1bb12c849060a607593a3d9a44e6b1df590","impliedFormat":1},{"version":"cfe8221c909ad721b3da6080570553dea2f0e729afbdbcf2c141252cf22f39b5","impliedFormat":1},{"version":"34e89249b6d840032b9acdec61d136877f84f2cd3e3980355b8a18f119809956","impliedFormat":1},{"version":"6f36ff8f8a898184277e7c6e3bf6126f91c7a8b6a841f5b5e6cb415cfc34820e","impliedFormat":1},{"version":"4b6378c9b1b3a2521316c96f5c777e32a1b14d05b034ccd223499e26de8a379c","impliedFormat":1},{"version":"07be5ae9bf5a51f3d98ffcfacf7de2fe4842a7e5016f741e9fad165bb929be93","impliedFormat":1},{"version":"cb1b37eda1afc730d2909a0f62cac4a256276d5e62fea36db1473981a5a65ab1","impliedFormat":1},{"version":"c873a6d6019f0b93889e54bf3dfb133120d5adba79c0a31d2400d1b5d0f2a2a2","impliedFormat":1},{"version":"471386a0a7e4eb88c260bdde4c627e634a772bf22f830c4ec1dad823154fd6f5","impliedFormat":1},{"version":"108314a60f3cb2454f2d889c1fb8b3826795399e5d92e87b2918f14d70c01e69","impliedFormat":1},{"version":"d75cc838286d6b1260f0968557cd5f28495d7341c02ac93989fb5096deddfb47","impliedFormat":1},{"version":"d531dc11bb3a8a577bd9ff83e12638098bfc9e0856b25852b91aac70b0887f2a","impliedFormat":1},{"version":"19968b998a2ab7dfd39de0c942fc738b2b610895843fec25477bc393687babd8","impliedFormat":1},{"version":"c0e6319f0839d76beed6e37b45ec4bb80b394d836db308ae9db4dea0fe8a9297","impliedFormat":1},{"version":"1a7b11be5c442dab3f4af9faf20402798fddf1d3c904f7b310f05d91423ba870","impliedFormat":1},{"version":"079d3f1ddcaf6c0ff28cfc7851b0ce79fcd694b3590afa6b8efa6d1656216924","impliedFormat":1},{"version":"2c817fa37b3d2aa72f01ce4d3f93413a7fbdecafe1b9fb7bd7baaa1bbd46eb08","impliedFormat":1},{"version":"682203aed293a0986cc2fccc6321d862742b48d7359118ac8f36b290d28920d2","impliedFormat":1},{"version":"7406d75a4761b34ce126f099eafe6643b929522e9696e5db5043f4e5c74a9e40","impliedFormat":1},{"version":"7e9c4e62351e3af1e5e49e88ebb1384467c9cd7a03c132a3b96842ccdc8045c4","impliedFormat":1},{"version":"ea1f9c60a912065c08e0876bd9500e8fa194738855effb4c7962f1bfb9b1da86","impliedFormat":1},{"version":"903f34c920e699dacbc483780b45d1f1edcb1ebf4b585a999ece78e403bb2db3","impliedFormat":1},{"version":"100ebfd0470433805c43be5ae377b7a15f56b5d7181c314c21789c4fe9789595","impliedFormat":1},{"version":"12533f60d36d03d3cf48d91dc0b1d585f530e4c9818a4d695f672f2901a74a86","impliedFormat":1},{"version":"57b555a83466fb289968a1713f965f1a2bb3a91cc34d1fa21af8ebdef7fc872a","impliedFormat":1},{"version":"21d9968dad7a7f021080167d874b718197a60535418e240389d0b651dd8110e7","impliedFormat":1},{"version":"2ef7349b243bce723d67901991d5ad0dfc534da994af61c7c172a99ff599e135","impliedFormat":1},{"version":"fa103f65225a4b42576ae02d17604b02330aea35b8aaf889a8423d38c18fa253","impliedFormat":1},{"version":"1b9173f64a1eaee88fa0c66ab4af8474e3c9741e0b0bd1d83bfca6f0574b6025","impliedFormat":1},{"version":"1b212f0159d984162b3e567678e377f522d7bee4d02ada1cc770549c51087170","impliedFormat":1},{"version":"46bd71615bdf9bfa8499b9cfce52da03507f7140c93866805d04155fa19caa1b","impliedFormat":1},{"version":"86cb49eb242fe19c5572f58624354ffb8743ff0f4522428ebcabc9d54a837c73","impliedFormat":1},{"version":"fc2fb9f11e930479d03430ee5b6588c3788695372b0ab42599f3ec7e78c0f6d5","impliedFormat":1},{"version":"bb1e5cf70d99c277c9f1fe7a216b527dd6bd2f26b307a8ab65d24248fb3319f5","impliedFormat":1},{"version":"817547eacf93922e22570ba411f23e9164544dead83e379c7ae9c1cfc700c2cf","impliedFormat":1},{"version":"a728478cb11ab09a46e664c0782610d7dd5c9db3f9a249f002c92918ca0308f7","impliedFormat":1},{"version":"9e91ef9c3e057d6d9df8bcbfbba0207e83ef9ab98aa302cf9223e81e32fdfe8d","impliedFormat":1},{"version":"66d30ef7f307f95b3f9c4f97e6c1a5e4c462703de03f2f81aca8a1a2f8739dbd","impliedFormat":1},{"version":"293ca178fd6c23ed33050052c6544c9d630f9d3b11d42c36aa86218472129243","impliedFormat":1},{"version":"90a4be0e17ba5824558c38c93894e7f480b3adf5edd1fe04877ab56c56111595","impliedFormat":1},{"version":"fadd55cddab059940934df39ce2689d37110cfe37cc6775f06b0e8decf3092d7","impliedFormat":1},{"version":"adb906b7794a71185220332532dcbdd09527e0dd3ce9f0b9be0a88c56bbb7e9e","impliedFormat":1},{"version":"b4f3b4e20e2193179481ab325b8bd0871b986e1e8a8ed2961ce020c2dba7c02d","impliedFormat":1},{"version":"41744c67366a0482db029a21f0df4b52cd6f1c85cbc426b981b83b378ccb6e65","impliedFormat":1},{"version":"c3f3cf7561dd31867635c22f3c47c8491af4cfa3758c53e822a136828fc24e5d","impliedFormat":1},{"version":"a88ddea30fae38aa071a43b43205312dc5ff86f9e21d85ba26b14690dc19d95e","impliedFormat":1},{"version":"34fc71db924616ba097a0cb6cddc2ece273a27673dd3b206abf3f3b5d63bcace","impliedFormat":1},{"version":"5515f17f45c6aafe6459afa3318bba040cb466a8d91617041566808a5fd77a44","impliedFormat":1},{"version":"4df1f0c17953b0450aa988c9930061f8861b114e1649e1a16cfd70c5cbdf8d83","impliedFormat":1},{"version":"441104b363d80fe57eb79a50d495e0b7e3ebeb45a5f0d1a4067d71ef75e8fbfa","impliedFormat":1},{"version":"ae02db44606a04880c676f200482d79436e3e8ac48f09307fc06c498e9c9221f","impliedFormat":1},{"version":"1731ec536f4a2fecd976c33877dce2bcf2c9cb8e62b60c35589e6db4d0e4503b","impliedFormat":1},{"version":"151748b7c4b0e834dcdbc24158956e849a1b9c9044903a7332569db96815c8f0","impliedFormat":1},{"version":"4332bc66fb3065e2e923115564262b00747f5a11f09418e4e36bb0bf7e6ac76b","impliedFormat":1},{"version":"1f08f7607d180577faeccfd60a718e279365ff6a60ee77a79b4f7494666ff233","impliedFormat":1},{"version":"05138a527eb7b9d4b8130f0096b65c1ff0a060c6cd7ee3b673dbb882bb38ace1","impliedFormat":1},{"version":"7b9add5ac31aabeaf5cd7233a965b3fe6c6519e7c364c929b239ab18d9e09522","impliedFormat":1},{"version":"5377a39d49dcd0d4e455a869848b6c29d45c8807729bc68661b24ee98ccf63ef","impliedFormat":1},{"version":"4e31aa31cd6e1fd4881a4842e6d1fe334da2990154b98923a2527717e9b05026","impliedFormat":1},{"version":"ad4e8d01fdd1379d5969aa97dbb98cb39c30d7c6a0a96bc65658e5164bed5907","impliedFormat":1},{"version":"500f6218efd544562b90fa590a00a09e51e6456df80cf4bfd0d4dff6d1670bca","impliedFormat":1},{"version":"a8d1dcbffade27c021f4cdd6a6bce1ed74520f3835d02b10c9960222c8e50d05","impliedFormat":1},{"version":"f45323ae400055f2de35142bfd3868201cc51b0f919aadc79de44263671dd6c6","impliedFormat":1},{"version":"26726d3245a27f94c45d0820dd63098c251a2208e1c0d4938738963ac5aa6404","impliedFormat":1},{"version":"6c1b497aeb9135ac66891d783a34dec6d4df347126ebe9c3841110f0a614e0c6","impliedFormat":1},{"version":"cef73ddf0336cb343be88b61a0448483029d438dd66ca21722aeabc66223bded","impliedFormat":1},{"version":"8cb6c8db9e27d0c6dba28bf0fcd7ef7603d0b5b2b3dce6fffc86f3827a8a00e9","impliedFormat":1},{"version":"d07ef5953b1499ae335c75147c658d9c037fc649544a4c85883f10eb9e5878e8","impliedFormat":1},{"version":"34714fae00aa0544916ade4018d18a04432db2b4b49c6cd066825ac31734eb40","impliedFormat":1},{"version":"5cb3b7b2b0997e451f91ab009ff2d66e7cd5f77838dc729a2e335554fa098a12","impliedFormat":1},{"version":"bdbe3e5d1f1f3dd035c551b6f94883212ccdbe9b3610f65f49138980e0efc0d7","impliedFormat":1},{"version":"eadae8542e5f360490f84d8da987529e415e265da584dd12e3e7c07a74db2fc9","impliedFormat":1},{"version":"9a82178f67affe7ca9c8b20035956d1ad5b25d25b42b6265820232ba16ba0768","impliedFormat":1},{"version":"68ed01a7169e1c26ea25a0cb687fce787b2f0da7349d402fa1ede52bf1ba1cd4","impliedFormat":1},{"version":"5aa42b32993e161aaf93d992300494377d38c8883e15fde44d5c7949313058af","impliedFormat":1},{"version":"b824db197375c795f8fd5c0ae760c7505da494892574f371a3b2bb17fca24a0c","impliedFormat":1},{"version":"eae784573a5c4c55c65b86accb356b21b5f597c3484c1bd344e647bc92ebe572","impliedFormat":1},{"version":"827eb54656695635a6e25543f711f0fe86d1083e5e1c0e84f394ffc122bd3ad7","impliedFormat":1},{"version":"2309cee540edc190aa607149b673b437cb8807f4e8d921bf7f5a50e6aa8d609c","impliedFormat":1},{"version":"899417348aed557d990c12c5c574004616ce897d538fed2ff06afed108cbe73a","impliedFormat":1},{"version":"52d51eb0d1456378d57ed066dea0bd946d9e996064a07c79deba7c3ec822a5b4","impliedFormat":1},{"version":"d370ed9bdc80204bb3ee538f4174de05ee1e18c2e694a630bcaf7546dbfb2807","impliedFormat":1},{"version":"1460f16c4b7fc66d2dde3ce1a4ab97d480c27fb84a4e429355a21e76cd471e19","impliedFormat":1},{"version":"c5d73bf762b7b0e75fcdf691e21e31c9db9913931b200b9990f07f49ab2edff3","impliedFormat":1},{"version":"86a87634e61456909397fe41c0ddb35a0eecf3117150c45f32c371f140db56c3","impliedFormat":1},{"version":"76a5f88a99d386a1ea9209a9f8f33a3f2c2f17bc445a4078950a49c0624bae3d","impliedFormat":1},{"version":"65357b3849688962f59c625718650ad31ff59e6c23f244b4086f0d96558405d6","impliedFormat":1},{"version":"8f932e59ba3dc1bda638f23ab1d173f1ab3885f14c98db90a84ca7f7f977c95b","impliedFormat":1},{"version":"471486ab7c5c95c3df63c0fbebe6871b9535eedff8b582557dfd66fcbf946d5b","impliedFormat":1},{"version":"45e82f28a80d855bab2355d5e46cc8edd7f2679fc5bfb0905dcf01ce59a5c347","impliedFormat":1},{"version":"48f7cd72c6f8ec5b2f70f50a8d4e6f47494e0d228015efb50c36fc6eab33c7ff","impliedFormat":1},{"version":"a8aa7a344599265ef9c2aba0433a805227b2c9b0e743106fab4d6f0c6966f536","impliedFormat":1},{"version":"567f0f5ebc17791330426f62750395ac084b2233b6794275626b9a5368c5eb35","impliedFormat":1},{"version":"9b92a4d989efc3eeefdca5f95f10267504abc7748ecff400b533cdf54dcdbd68","impliedFormat":1},{"version":"332680a9475bd631519399f9796c59502aa499aa6f6771734eec82fa40c6d654","impliedFormat":1},{"version":"191bee6605de2b5210f29f22df04f5b5e6bdcc1f6e21fb07091d40eeeb75fd72","impliedFormat":1},{"version":"d83f3c0362467589b3a65d3a83088c068099c665a39061bf9b477f16708fa0f9","impliedFormat":1},{"version":"0dee1e1c0f7e5302d05eadd14098758ba146274c4a3b646475fc8bce4d4dbcac","impliedFormat":1},{"version":"29994a97447d10d003957bcc0c9355c272d8cf0f97143eb1ade331676e860945","impliedFormat":1},{"version":"f4260022f7af38e533d364ea62eb7ae01b0a32050033d7f6772073e1dc908025","impliedFormat":1},{"version":"9cddf06f2bc6753a8628670a737754b5c7e93e2cfe982a300a0b43cf98a7d032","impliedFormat":1},{"version":"3f8e68bd94e82fe4362553aa03030fcf94c381716ce3599d242535b0d9953e49","impliedFormat":1},{"version":"63e628515ec7017458620e1624c594c9bd76382f606890c8eebf2532bcab3b7c","impliedFormat":1},{"version":"355d5e2ba58012bc059e347a70aa8b72d18d82f0c3491e9660adaf852648f032","impliedFormat":1},{"version":"311cc121259b3e0c3c08304fc25b525aa02ba0f9bf55b3e7c60b0dbb7422014e","impliedFormat":1},{"version":"74c269b43d39e5ece20b2cca49c14e64c05b01e46407200d7558301d0fcaabf4","impliedFormat":1},{"version":"ec09bd95866efe38cd00ebb79dfa7a26563d600fa4a30db0f7c6d68f8f6d2b06","impliedFormat":1},{"version":"482d0ac70d56aa79941be30da6df28e926a007f835eed70cf7b5f3135368d1f6","impliedFormat":1},{"version":"7dd19397d5a090c9f8cd762bae67bd0ad6f782abe422594fb71168fb578673b0","impliedFormat":1},{"version":"84cbf6204ada0ee2f80493e55e45befa079954788718efd6dcc103183104e3c0","impliedFormat":1},{"version":"ed849d616865076f44a41c87f27698f7cdf230290c44bafc71d7c2bc6919b202","impliedFormat":1},{"version":"9a0a0af04065ddfecc29d2b090659fce57f46f64c7a04a9ba63835ef2b2d0efa","impliedFormat":1},{"version":"10297d22a9209a718b9883a384db19249b206a0897e95f2b9afeed3144601cb0","impliedFormat":1},{"version":"034b8b5912823744c986986f24432bf3fa7bfa671e69316b672f3f2db5166ce4","impliedFormat":1},{"version":"34d206f6ba993e601dade2791944bdf742ab0f7a8caccc661106c87438f4f904","impliedFormat":1},{"version":"05ca49cc7ba9111f6c816ecfadb9305fffeb579840961ee8286cc89749f06ebd","impliedFormat":1},{"version":"427cbe10b1d96722e0001378b2cadcb794b0ce342870c9590381c3dd9f1724f8","impliedFormat":1},{"version":"ea4eadfe3d8b0447ecea1cbbf7aad70423cca9350bc9103a1d80cebc37e6bdb3","impliedFormat":1},{"version":"b88645280562793af76ab59052d87e4846ac5ef19af054c729fbb87c73481a59","impliedFormat":1},{"version":"a1f43b06dd37b1f6c5c7821881960dfe55038b468eafb324ad90ce5e9b448d2a","impliedFormat":1},{"version":"15b142d522e96e1962bd54c75560f6994cc8fe9a1640a36de2268fdb95e58fb5","impliedFormat":1},{"version":"de79263f32ea34b3f9282b19251626eeb3a3aef8d96491b731a3c0fb5cca2e77","impliedFormat":1},{"version":"355739d282928494e5564cb919b6db7d920a08956ef536d870c2f9e7596c8ac4","impliedFormat":1},{"version":"6ad48cc710a0b66a00e56f962a39e9b3e8e8dae29e9763c336e94d1a97c54c5a","impliedFormat":1},{"version":"0850c98ca2cccae6ce2aad363f6eb370c401fbc279a64607fff90c0f87973a91","impliedFormat":1},{"version":"d0f62192ec787f1592a5b86760a44350d1c925883a573eadc12d60862890dffe","impliedFormat":1},{"version":"4ef34562ac49a16a1681d51d6e8ece677657782cf1a464e010224cbbe0bb071f","impliedFormat":1},{"version":"a66ad696f2785dd00374b8dee6fab5c58c049c0efe24b3c214fbe6aec3f53d6e","impliedFormat":1},{"version":"f226f29f5594bd479f27648f42423ffa1a1460cafc7b1ba04bd013b28cba710f","impliedFormat":1},{"version":"63f859a315e9711f383d06b7a2b940804e51078d85e896980816f46f1b6021a8","impliedFormat":1},{"version":"f8da2a3bec435c09f9a10d9f150949bf0ebb0c3508f074887dbb2d3e33ce302b","impliedFormat":1},{"version":"397b46c6a95826d26714b5481addc606de72d8229b092e236f0d78a9e7226d29","impliedFormat":1},{"version":"5f47fb5b000c03fdcae71e6e017261898a37f0892532cb713ce95c8950462d80","impliedFormat":1},{"version":"81510d25a9810948b21bc3ded631d261c7c4ef9a67bc3b02f09ddbc7f67645c9","impliedFormat":1},{"version":"617891438559a97ae02a795d529a25acf128744cf1e150ab6b70a2db38600abb","impliedFormat":1},{"version":"225deff02f4d1c91e2d6c71dec9f18feae510aa729a9774024f30278f4c6b8fe","impliedFormat":1},{"version":"6c24f6dcbb3bf8235bf8da995a7290ffbd9d557a760cf2deb380ce91a989b765","impliedFormat":1},{"version":"e48415a5a97a5e6c22cc4fdcb3172805ce68a1d41d0a056d71bff9ced2186d43","impliedFormat":1},{"version":"e78efe1acc86b01bbb10bae9eecc2fc389d0e51a06eacb42d23a928946d2c9e6","impliedFormat":1},{"version":"9b74326515d17f03809cfbea6de789772ff7d0c759a08a59bfa5242bda98d35b","impliedFormat":1},{"version":"75b6e7998a607fd056736697961e9968df7bf9e6bd7ad13ef16e1e068251021f","impliedFormat":1},{"version":"0ea47413eaffe144782a44058205c31130b382dee0e2f66b62b5188eac57039e","impliedFormat":1},{"version":"c0591738dbfe11a36959f16ab40bc98b2a430c4565770ef6257574546079d791","impliedFormat":1},{"version":"3cf3dc0f53d71795cd7c461346e9aa3c713f8a5138015776aa6d4b8ff9e0cb26","impliedFormat":1},{"version":"ca73451ec7771379b6b1271dcda0d0b2146da80b329136a09ad692529a073965","impliedFormat":1},{"version":"fad74233657c4e0346822942ac3716a20b16fb053ca00c1260a08a81cc76df89","impliedFormat":1},{"version":"241989edda9c92a4e4b2d815cea9abc64af1a60702c7756543f834180f002c8b","impliedFormat":1},{"version":"fced7c59acecb0ac631505fcbc5a1ce0c6420e2494a256321e9359093efb7a1f","impliedFormat":1},{"version":"8c42fbcae55a41f9c48f644ff9743fab827a9d38f5a6bd486f17c6460f8a099b","impliedFormat":1},{"version":"b6a6aa142edcc0a66bb099d143fc272f72715d282ad1a0a222daa2932edb75a6","impliedFormat":1},{"version":"cf841c4bfb05b4b1d3826773ff77a47bb0dc17c665a4dbff7d6c4a6d9042d50c","impliedFormat":1},{"version":"1b44c62dc27eddfec7780fb2a082c28a628e7f54842708c1cb8b1aaf61978d4d","impliedFormat":1},{"version":"bd15222c3f016a97d7062a0018f7fe0d130be508ca276b43dcafa8c9032a3ea4","impliedFormat":1},{"version":"4f5f11b73282262904f4c1bc5ffb76631b40ac8b54ae01bde274cb9242d6cb2f","impliedFormat":1},{"version":"9e6dcb736749cc84304b38c5a1101b299659dbc3871bab5d1544ee8f8dc73e5b","impliedFormat":1},{"version":"4e4559e8e4ea7d87f914014074559e515de78308bacc733a7ea76f795de178a3","impliedFormat":1},{"version":"13ecb31795209aa56b1837b9d46cc5494da392f594132bc5b3a56c067e12ea1c","impliedFormat":1},{"version":"e34a28e978cf430e062c91d03987f2b42360b33e6207738b40494acd4a97004b","impliedFormat":1},{"version":"5cc10d0295e594c961bd020cc76845097928f550fa3d58468114e5225054f76c","impliedFormat":1},{"version":"99c4cd704c85c3b9a215977d1d10ad34f1c6bbc5784e0ddaaf6fe8090030eaf3","impliedFormat":1},{"version":"4e874f611f31bfab5803e7a7f32fafbed44b93eb260726420355a2b6331c312e","impliedFormat":1},{"version":"f137d3c4e6a3481f89483d24735b5f236fd61df12b15fe72d453d37216e04b37","impliedFormat":1},{"version":"6939be893a2402f8af9bdf01a56f9f8fde68fcd5527f9d49bf72475e00eab81a","impliedFormat":1},{"version":"b9305f911c38afd04e4d0740370408bdd3faf5d2ab8ba19de5dd61f0bed50dd6","impliedFormat":1},{"version":"fcfff3c8b82ab18ac26fe3d9e7728805255f5e571804e8722b2748d07b729e93","impliedFormat":1},{"version":"8d31d96656a5febb345b5cd5fcb25305c3d545c70f32e716e571d91e1a16b15b","impliedFormat":1},{"version":"1f80e0ef9c6f2d223a3bbe3438d7355241164ff5f1d05b6e7da9cc26621351ff","impliedFormat":1},{"version":"121695e29f8a46c562eec36f3e5324b21047c9f08293b7f74532c27861e2dbd1","impliedFormat":1},{"version":"0e6387b87925a10ba52cd0de685a4f7e2d9dd402dbac560dce8934e8e34007d0","impliedFormat":1},{"version":"42a82d8b7520d5e6d00f079703e50a956da5d0b94dd7a96fbae0372db027bc88","impliedFormat":1},{"version":"ef5aa9871f3b8dac96d4ef93e22eec539527d739c6a7e0c7fa7101fa343bfd77","impliedFormat":1},{"version":"25300ac27483f549601592a28472e99ea5a662f93d692cb35f99a1b771ed7b72","impliedFormat":1},{"version":"4a1a0f21b3c4fc0d217392d82445a34fcc8c9ed6f79fdc4d14b8353e3c74eaf3","impliedFormat":1},{"version":"7b2ea03ae5593cbd62f0a5455f761b476e16e6fc812ecd22dc98c8a129c66b27","impliedFormat":1},{"version":"5a59c1315ed5ca8f899fc6527f23a15dc9a38107175a5fffd473db25bcd1fd4a","impliedFormat":1},{"version":"20a5515b81a828fc10b066aa5f88a5eb68323d23b8a10d8e9dc7edb6ebdd2bd7","impliedFormat":1},{"version":"c197293eabaac9dd40c0a298493b78c728bbc79b1f37d1f95ce23ef93bc31872","impliedFormat":1},{"version":"1b2283af9536429b918477c58c1ab8f176ec435d7b5514eeb7be17d9b1f37f5b","impliedFormat":1},{"version":"954f0b817bc3a7814ca7b40d6099a4b690846b4327a74645bbeac7da146deb20","impliedFormat":1},{"version":"15aba6a4199ce9e4f3c1ec397a468f6aaaeba973649ca4f1c016225b46a5feaf","impliedFormat":1},{"version":"a1ca7f7788853a2ff3670bf1112a92fa503686b10d58339318fec5862bd209a6","impliedFormat":1},{"version":"9183f175f885e98000fb3e8e3478c4c7f5b6374d7f580a3071b37ed2f8422c5c","impliedFormat":1},{"version":"45a149d995a3a76a4adb1aff9267f57dba9a81c6ec75aa07351352fe426849d2","impliedFormat":1},{"version":"3583432d31bc3a8314da422000c1c6e027b903085d749858440918f3499321f0","impliedFormat":1},{"version":"982abe1a1c36e6a4ce3c6e8ca12bac8f36b04319ca378ad889fcfbb62c633e29","impliedFormat":1},{"version":"91b681431258c2b6edef7a40b64f455edb2c33d5486e3543eb246cc1beb173b6","impliedFormat":1},{"version":"060c0dcf0c791fadb137766d0dad41414e85fe0eb4d80f8ed436296755540e55","impliedFormat":1},{"version":"edb7055a348bc1ee811ea9040998797ae3097951b4af69ee96f6edc4c47fb817","impliedFormat":1},{"version":"29b408824df9dfca5ce4e4de1702ca382036f422653d71a36a9ba00a9818c6f1","impliedFormat":1},{"version":"e92ee6e3d7594a90ca038a2ac77693cd090b3989d13be7cbea4fc5af6a3a5ab5","impliedFormat":1},{"version":"528f3448c98e09174ca4186540000bf77f81fddcb587e0db9626ea825dead0ab","impliedFormat":1},{"version":"2203c47042792d350a9ac67328e541fe9c8627c0a2aef12f2d30d6072c210004","impliedFormat":1},{"version":"de18addada26bb0c6a7b795356bcbdcde7ade8a928d761b90ad2673cd9b97a56","impliedFormat":1},{"version":"e5a093183415e4c25343e717144d1bb051eebd65bdc05569f314023c8c16c315","impliedFormat":1},{"version":"6b141b2932d1592b315fc91b2ccf9ebf860c84e13aee14637559449b4573d54a","impliedFormat":1},{"version":"9c3cc6249267ec556f7cb3d3935e16bf5ac7459b74150e059f94fc803d6d83d6","impliedFormat":1},{"version":"c1317ee4831c2c325ea7f348533e8c1118282ef092332978e699f775d08d5e44","impliedFormat":1},{"version":"cea7c28a328bfd8efb8d4db3c8333479d95c43737e13164513811d7a0eda1540","impliedFormat":1},{"version":"fdb137a5008e4093fed0d39bd969c9db55d7c3c2a6a88156ef2bbea3625ebcb4","impliedFormat":1},{"version":"2e84db8bdd705b0041fa382197527062d2853468f8c4f6534ba869b700699b1b","impliedFormat":1},{"version":"e375f01fcc9cf9949d85d884c0e77181ade7ddb35cf75ec7510a238e0cb8e3d0","impliedFormat":1},{"version":"376fba160c82508f4c003cbb0c1731ce06fb044a6741123f2685a15187784c39","impliedFormat":1},{"version":"24a639753c651fbdd930131ecb0e6ac87ad27fc831390fbfcb98d994674236b9","impliedFormat":1},{"version":"e20bc9827aa221755718de4bea01cba89715fbdf0f125c5ae57e591767e9f29c","impliedFormat":1},{"version":"39ecf86c05473aee4e6f2befb7c1767e664cdd2b7be27ab038c412273dcf03cb","impliedFormat":1},{"version":"fa80fe842fd2b1465fdf713f125c6aea9c5803f89665a5daf46e429e1e2d9874","impliedFormat":1},{"version":"28d7d661eb177715c728ebe6ad165c8a3c187cf32ceea52f99d8803cdb1663bc","impliedFormat":1},{"version":"4a1744726d4293daaac3a1bb0bb4c4d400d51d4525933093a059b1795552938e","impliedFormat":1},{"version":"2e558eb0508798ab479e63c074027828f95ba2e5ac620e3b72b61739d23b8365","impliedFormat":1},{"version":"f3eca6b9a668c7872bb132fafe6750c582771c40a66606745c2c01dbec8d4c5d","impliedFormat":1},{"version":"ca2136477815999750c637596c1f10d9bd22bf4d740c9f3bdb7587e88ae66360","impliedFormat":1},{"version":"32e8a9c74f4dcc2c0564791939e001bc26c0e689a33736f9e1cba168b06b628a","impliedFormat":1},{"version":"9de93044640e453de8a572bbafb4169d9463592c2d4abd19c27fdb7b2e3f24d0","impliedFormat":1},{"version":"332680a9475bd631519399f9796c59502aa499aa6f6771734eec82fa40c6d654","impliedFormat":1},{"version":"191bee6605de2b5210f29f22df04f5b5e6bdcc1f6e21fb07091d40eeeb75fd72","impliedFormat":1},{"version":"d83f3c0362467589b3a65d3a83088c068099c665a39061bf9b477f16708fa0f9","impliedFormat":1},{"version":"180e527dbc1f5ae2bbb79d0a3db1ada49258783d7e6299559e0f2ed663b4afec","impliedFormat":1},{"version":"29994a97447d10d003957bcc0c9355c272d8cf0f97143eb1ade331676e860945","impliedFormat":1},{"version":"f4260022f7af38e533d364ea62eb7ae01b0a32050033d7f6772073e1dc908025","impliedFormat":1},{"version":"9cddf06f2bc6753a8628670a737754b5c7e93e2cfe982a300a0b43cf98a7d032","impliedFormat":1},{"version":"3f8e68bd94e82fe4362553aa03030fcf94c381716ce3599d242535b0d9953e49","impliedFormat":1},{"version":"63e628515ec7017458620e1624c594c9bd76382f606890c8eebf2532bcab3b7c","impliedFormat":1},{"version":"355d5e2ba58012bc059e347a70aa8b72d18d82f0c3491e9660adaf852648f032","impliedFormat":1},{"version":"311cc121259b3e0c3c08304fc25b525aa02ba0f9bf55b3e7c60b0dbb7422014e","impliedFormat":1},{"version":"74c269b43d39e5ece20b2cca49c14e64c05b01e46407200d7558301d0fcaabf4","impliedFormat":1},{"version":"ec09bd95866efe38cd00ebb79dfa7a26563d600fa4a30db0f7c6d68f8f6d2b06","impliedFormat":1},{"version":"482d0ac70d56aa79941be30da6df28e926a007f835eed70cf7b5f3135368d1f6","impliedFormat":1},{"version":"7dd19397d5a090c9f8cd762bae67bd0ad6f782abe422594fb71168fb578673b0","impliedFormat":1},{"version":"84cbf6204ada0ee2f80493e55e45befa079954788718efd6dcc103183104e3c0","impliedFormat":1},{"version":"9a0a0af04065ddfecc29d2b090659fce57f46f64c7a04a9ba63835ef2b2d0efa","impliedFormat":1},{"version":"10297d22a9209a718b9883a384db19249b206a0897e95f2b9afeed3144601cb0","impliedFormat":1},{"version":"034b8b5912823744c986986f24432bf3fa7bfa671e69316b672f3f2db5166ce4","impliedFormat":1},{"version":"34d206f6ba993e601dade2791944bdf742ab0f7a8caccc661106c87438f4f904","impliedFormat":1},{"version":"05ca49cc7ba9111f6c816ecfadb9305fffeb579840961ee8286cc89749f06ebd","impliedFormat":1},{"version":"bdf6977392a12184a1b3df5cfbfc04c14ff2017b393cef515474ec969d9edacc","impliedFormat":1},{"version":"bad36bee6dabf12fa12a691bb6a33924a12a82f045ecf4f7480a9675a3e165d2","impliedFormat":1},{"version":"d0df7c281fb7abbc259787cc1f9d90d302709a48c01cf63de917aadaf3964a9b","impliedFormat":1},{"version":"08feed8b713001f65bb348a8ed5d147af8f857140fed5c33adaea84754b015e0","impliedFormat":1},{"version":"38f657b03aee076686600e8a60b9ea02adb2fe9f1f1303543d9434cf89348ae8","impliedFormat":1},{"version":"426be40525994401b3257a091505994baf6f28cd3815fe30b31c8356cb8787b5","impliedFormat":1},{"version":"3083eb82f05d0571275df4d750d6ec4b252af8f2b9ff7e9c90d04d5089375caa","impliedFormat":1},{"version":"db40a032da4125991017f5a56fb5e5066fd3f2d7a35416622cffba8fbc8c1d70","impliedFormat":1},{"version":"8e4b8643c48bd53ec10c1d31eb3c055a4e79742979e31a1e32001b839d21e466","impliedFormat":1},{"version":"2156dec90be4df770fec875e651f5e4a37ca05bd24775713836cd2e1a21ccdeb","impliedFormat":1},{"version":"f9d34c95eda3aba08eb49a4c4d1c178ebf4b90564b07b6d9bdc2bbc6530717f0","impliedFormat":1},{"version":"77c773c8eb16662caf86832c70143a9c6600a2fdeaae04a598c4ff5e5681fb1b","impliedFormat":1},{"version":"ca9c7eafc5d9869968d5dcaa52ba8f647059f39555e4653d75585c2e9e0f6740","impliedFormat":1},{"version":"dbd19dec18939088cf3766590b33bb27d19c505211238db09bbb83c9985e5561","impliedFormat":1},{"version":"49fdb09d000b0aaed1b703156083d91ac4942b4beb9816809aec2e00c077152b","impliedFormat":1},{"version":"333cd6f3dd20a7619513bd841d398f7be65d8124ba84c5e8f20084f8b4a619f8","impliedFormat":1},{"version":"b4e9b07e73f79509f30a7591c93ec15cb62666dd8521f2941b82bebfa940bff4","impliedFormat":1},{"version":"0cfba391d7c2d33e0f5fc70390ea5e5d80b203d0bfb01ad53972dfd68dd391c6","impliedFormat":1},{"version":"a096d8d2cb2d1add0a89658ac843387fc21f9232a06b6a9be0b487a7a7de2e62","impliedFormat":1},{"version":"76d635d0ce420a60ed078de16db4af06296c4c514c9b99cb2af6e83dd2d31817","impliedFormat":1},{"version":"e5524de223e1aacf2ac0e75e54adf8fe7caf99c7e280a2ab8a75649939f9581b","impliedFormat":1},{"version":"0f600b0c0ec501db22eb3eccb7f04199b8e29c593092b9b99a181d8bf01d56b3","impliedFormat":1},{"version":"a4e9e0d92dcad2cb387a5f1bdffe621569052f2d80186e11973aa7080260d296","impliedFormat":1},{"version":"f6380cc36fc3efc70084d288d0a05d0a2e09da012ee3853f9d62431e7216f129","impliedFormat":1},{"version":"497c3e541b4acf6c5d5ba75b03569cfe5fe25c8a87e6c87f1af98da6a3e7b918","impliedFormat":1},{"version":"d9429b81edf2fb2abf1e81e9c2e92615f596ed3166673d9b69b84c369b15fdc0","impliedFormat":1},{"version":"7e22943ae4e474854ca0695ab750a8026f55bb94278331fda02a4fb42efce063","impliedFormat":1},{"version":"7da9ff3d9a7e62ddca6393a23e67296ab88f2fcb94ee5f7fb977fa8e478852ac","impliedFormat":1},{"version":"e1b45cc21ea200308cbc8abae2fb0cfd014cb5b0e1d1643bcc50afa5959b6d83","impliedFormat":1},{"version":"c9740b0ce7533ce6ba21a7d424e38d2736acdddeab2b1a814c00396e62cc2f10","impliedFormat":1},{"version":"b3c1f6a3fdbb04c6b244de6d5772ffdd9e962a2faea1440e410049c13e874b87","impliedFormat":1},{"version":"dcaa872d9b52b9409979170734bdfd38f846c32114d05b70640fd05140b171bb","impliedFormat":1},{"version":"6c434d20da381fcd2e8b924a3ec9b8653cf8bed8e0da648e91f4c984bd2a5a91","impliedFormat":1},{"version":"992419d044caf6b14946fa7b9463819ab2eeb7af7c04919cc2087ce354c92266","impliedFormat":1},{"version":"fa9815e9ce1330289a5c0192e2e91eb6178c0caa83c19fe0c6a9f67013fe795c","impliedFormat":1},{"version":"06384a1a73fcf4524952ecd0d6b63171c5d41dd23573907a91ef0a687ddb4a8c","impliedFormat":1},{"version":"34b1594ecf1c84bcc7a04d9f583afa6345a6fea27a52cf2685f802629219de45","impliedFormat":1},{"version":"d82c9ca830d7b94b7530a2c5819064d8255b93dfeddc5b2ebb8a09316f002c89","impliedFormat":1},{"version":"7e046b9634add57e512412a7881efbc14d44d1c65eadd35432412aa564537975","impliedFormat":1},{"version":"aac9079b9e2b5180036f27ab37cb3cf4fd19955be48ccc82eab3f092ee3d4026","impliedFormat":1},{"version":"3d9c38933bc69e0a885da20f019de441a3b5433ce041ba5b9d3a541db4b568cb","impliedFormat":1},{"version":"606aa2b74372221b0f79ca8ae3568629f444cc454aa59b032e4cb602308dec94","impliedFormat":1},{"version":"50474eaea72bfda85cc37ae6cd29f0556965c0849495d96c8c04c940ef3d2f44","impliedFormat":1},{"version":"b4874382f863cf7dc82b3d15aed1e1372ac3fede462065d5bfc8510c0d8f7b19","impliedFormat":1},{"version":"df10b4f781871afb72b2d648d497671190b16b679bf7533b744cc10b3c6bf7ea","impliedFormat":1},{"version":"1fdc28754c77e852c92087c789a1461aa6eed19c335dc92ce6b16a188e7ba305","impliedFormat":1},{"version":"a656dab1d502d4ddc845b66d8735c484bfebbf0b1eda5fb29729222675759884","impliedFormat":1},{"version":"465a79505258d251068dc0047a67a3605dd26e6b15e9ad2cec297442cbb58820","impliedFormat":1},{"version":"ddae22d9329db28ce3d80a2a53f99eaed66959c1c9cd719c9b744e5470579d2f","impliedFormat":1},{"version":"d0e25feadef054c6fc6a7f55ccc3b27b7216142106b9ff50f5e7b19d85c62ca7","impliedFormat":1},{"version":"111214009193320cacbae104e8281f6cb37788b52a6a84d259f9822c8c71f6ca","impliedFormat":1},{"version":"01c8e2c8984c96b9b48be20ee396bd3689a3a3e6add8d50fe8229a7d4e62ff45","impliedFormat":1},{"version":"a4a0800b592e533897b4967b00fb00f7cd48af9714d300767cc231271aa100af","impliedFormat":1},{"version":"20aa818c3e16e40586f2fa26327ea17242c8873fe3412a69ec68846017219314","impliedFormat":1},{"version":"f498532f53d54f831851990cb4bcd96063d73e302906fa07e2df24aa5935c7d1","impliedFormat":1},{"version":"5fd19dfde8de7a0b91df6a9bbdc44b648fd1f245cae9e8b8cf210d83ee06f106","impliedFormat":1},{"version":"3b8d6638c32e63ea0679eb26d1eb78534f4cc02c27b80f1c0a19f348774f5571","impliedFormat":1},{"version":"ce0da52e69bc3d82a7b5bc40da6baad08d3790de13ad35e89148a88055b46809","impliedFormat":1},{"version":"9e01233da81bfed887f8d9a70d1a26bf11b8ddff165806cc586c84980bf8fc24","impliedFormat":1},{"version":"214a6afbab8b285fc97eb3cece36cae65ea2fca3cbd0c017a96159b14050d202","impliedFormat":1},{"version":"14beeca2944b75b229c0549e0996dc4b7863e07257e0d359d63a7be49a6b86a4","impliedFormat":1},{"version":"f7bb9adb1daa749208b47d1313a46837e4d27687f85a3af7777fc1c9b3dc06b1","impliedFormat":1},{"version":"c549fe2f52101ffe47f58107c702af7cdcd42da8c80afd79f707d1c5d77d4b6e","impliedFormat":1},{"version":"3966ea9e1c1a5f6e636606785999734988e135541b79adc6b5d00abdc0f4bf05","impliedFormat":1},{"version":"0b60b69c957adb27f990fbc27ea4ac1064249400262d7c4c1b0a1687506b3406","impliedFormat":1},{"version":"12c26e5d1befc0ded725cee4c2316f276013e6f2eb545966562ae9a0c1931357","impliedFormat":1},{"version":"27b247363f1376c12310f73ebac6debcde009c0b95b65a8207e4fa90e132b30a","impliedFormat":1},{"version":"05bd302e2249da923048c09dc684d1d74cb205551a87f22fb8badc09ec532a08","impliedFormat":1},{"version":"fe930ec064571ab3b698b13bddf60a29abf9d2f36d51ab1ca0083b087b061f3a","impliedFormat":1},{"version":"6b85c4198e4b62b0056d55135ad95909adf1b95c9a86cdbed2c0f4cc1a902d53","impliedFormat":1},{"version":"31534118da6c78d17058360efb6c6138a2d708e80a239c9b996ce450cd510c87","impliedFormat":1},{"version":"067ffeb7ead113d9ae4758aa919cad4d29ec5c1c2c510e121ef732309afec17a","impliedFormat":1},{"version":"30e705a40525fa10f3fd6b923cf3b5a396854799f556f6de1427040bf327ab5d","impliedFormat":1},{"version":"fea6ae80a31e54412b2c3bc6436f61156e7953692f7b3e964e6a518309bcb0bb","impliedFormat":1},{"version":"1b05e13b1af84cf2a9a0d2a3b5abc007df6a279f5042f3a3f9f5cfb70fc2b23c","impliedFormat":1},{"version":"0c543281c6308734f05d553605e33cc3ad49c018ec8d4c8a643beca372616eb9","impliedFormat":1},{"version":"876e8088396cfca84edbedc02c597048b869a8c8760ba564d6d4a584739ba699","impliedFormat":1},{"version":"9032dfbaa1d55b66d9a0a8f997ae3567346c163a2af74065a6c21acdb9990b42","impliedFormat":1},{"version":"83b2d9b53116b605465d91d5aee0ddd813ea82d3ad99d0826512c8ddb70a2d7a","impliedFormat":1},{"version":"623a64ab0626b6b178dd12f09e18f4c2a49ca3830cf39c273ecc660658e6f8cb","impliedFormat":1},{"version":"63891bb3401192bf9100167d2adfed7e5a1f07d012c5e59afb445bf599e87181","impliedFormat":1},{"version":"7ea286ba4f6362aebc5115cce9dea0bbc139f3347db03c6088f2643e2b6e56b0","impliedFormat":1},{"version":"5d9a6fb39fb75fc9eb3faf571354dbe59a99a68a59359b373fe95a229548bac7","impliedFormat":1},{"version":"73f38c9cb743e19f5935415ca4d9f0a8cd73e2933675f7f73587f90d4199412d","impliedFormat":1},{"version":"cbb38e8af40794f3c78590ed75da9cbfc3b042e066c89dc55a62067d63065bbf","impliedFormat":1},{"version":"0d9fd3729915049884e64c7ac5f9ae71ab94c662169c54f34cbbc58e5987e770","impliedFormat":1},{"version":"b770116fa75575be33df4d0959ebc66cbe4c0c7dc62ed5d2cb8e7958e544e709","impliedFormat":1},{"version":"dd254b0f5d430c6b1cc4c75ed86b35ddc11d084b733dc0db6a6e08cbf9a167b0","impliedFormat":1},{"version":"b6debb4b1a76fc400984ef42964c77ba7b70f13203a435b5fedf4a3f627a9bfb","impliedFormat":1},{"version":"a4328b51b353f4e14a08473909bae58894518274f82ef92be2e8a33ecce3dedf","impliedFormat":1},{"version":"2b0369749a3012f4b5f71f0b1d64d171ff38e83de3ed811977b542e16d671dca","impliedFormat":1},{"version":"12e4047f780f6239647833021aad41155a8827251dc7b0c14aefceff9ece6b8d","impliedFormat":1},{"version":"a06abed188ab078cbd02602e12011433fd5b205c1e3cb3624e89bbd2048255d5","impliedFormat":1},{"version":"384c6ec95f38740cf87dd9ab45f5bd854cb793d3b8ea6544a4b755432e942eb2","impliedFormat":1},{"version":"97cbb283381a08070408548fe8e3fc45300d8680917f00a42669b6e404bebe69","impliedFormat":1},{"version":"de7adbfaae7f54244be6bd1662089ee10a4673af1ad1c85ab318905e6184bb73","impliedFormat":1},{"version":"361626e4ad8686e046866eeddbec3e5b8c757e79051bf62d9fa92b6f16d09d67","impliedFormat":1},{"version":"2718fff83ca1241c5f03cf11d13ab8537e649065b91e820ecac14c509e2a91aa","impliedFormat":1},{"version":"78ccd8f880fb0a87fa5b5ebefd7aa4f43a408cbd3230516c825f92cb54d0591b","impliedFormat":1},{"version":"c0244fa649a07cf786b4a212b9f20542b701f077bff22ece91cd65255f71f25e","impliedFormat":1},{"version":"c3b9e4c1dbe58fb28ad45e0c924a468f5873eed478bf8ec23608fd13e11005eb","impliedFormat":1},{"version":"57c940e0f8fd4486a162a189fe9fbc4e6cd10fbf41748d1a1e3fcafbe7ee5de8","impliedFormat":1},{"version":"16a4bfdcd8310a46e6257ec459c394772106ecacdabbaae6aa7e62f372615a34","impliedFormat":1},{"version":"1603f6fac7d20b4d83065f6ed0b54fcf190cf998fe86b1317f36846f44aaa396","impliedFormat":1},{"version":"0526d4751ba5958c8c417b8db7667fc6ba8a44d2d51bfe047840e3435e3b41b5","impliedFormat":1},{"version":"f0b12aa281d92670d60c12b0b5c68fde25dd2e5a201158008d20c720309de598","impliedFormat":1},{"version":"8c28d39e108ba627d334d27425a10151e22d6e8e457061d549bc9f919a9feb74","impliedFormat":1},{"version":"2ad5a0706abe3f8700f6c89041899ecc40872b815dce21e63336d8f5c1b08eb2","impliedFormat":1},{"version":"c2d3e6f3d3138b0fb8e29ee4e40fdfb0c13d1e22b70d4fb81b97acf815f609aa","impliedFormat":1},{"version":"0d60cda772d8686cf802623f432d10a7c1ea7087eb49412dbfbf1faa10aba749","impliedFormat":1},{"version":"fd64744c5e57d0b7ccd53f103a82ebb9b56ad9ab6719ab96765c7b57d64f6e4d","impliedFormat":1},{"version":"6d91c9c3b416788ee9c1365de6c5138de30bec970f28c9ece9911261ffadda74","impliedFormat":1},{"version":"539c6bbe98550e7d23d622afe4e3855be0ea765db6daa479e1e3dc490c079b71","impliedFormat":1},{"version":"3f0373b68f5d14a844465b0152ce49ae5e9ce03f9dc2d95e355bc71828621bea","impliedFormat":1},{"version":"84a5ebfc059415903402e98bca6222dc05d3c774618b0c57f2937bfb06d80d81","impliedFormat":1},{"version":"8328711226ff803630e3668e23e78b29897fe6cdf51915cd5dfe85a3bfd96b39","impliedFormat":1},{"version":"a75441dcd99d081fa042d426a1bf58d9d49dfc37be73a68104d4687da4080a92","impliedFormat":1},{"version":"91797d609a461d3eda42a599c2e8d950bc3f9285e135d16691495f7f33e547de","impliedFormat":1},{"version":"b118f63152f3c9d8251c19d3d2d7df09180dbebf164d8b12bb148ff79ff1f9fb","impliedFormat":1},{"version":"6dadc4d64131b98ddbc6f9e74f67f37a77395bcd43b62b61e28a92d176777ab3","impliedFormat":1},{"version":"145d638b97593d60a93bceb8020b8df31ce3cee54e5656b20c6fdd4163fab620","impliedFormat":1},{"version":"eff60603c2efbb3495e2ae03db8e070acdeb7e22da259669ed60241753c9bc0d","impliedFormat":1},{"version":"bcbdd4c59385c0bec8c99923640e5b6423cca277d0233c503023fc356430237c","impliedFormat":1},{"version":"9dc833dcf6e2375d319b62516c2b681ce4354062beb0f2c79f9586e5c881becb","impliedFormat":1},{"version":"96e855d2b08cd12f152c557b63c6b73ad812fec1ee0d7cf07c094df06e1a6c7d","impliedFormat":1},{"version":"d0c20f46de0d62b5f905772ccb22ca6217a4c361c6e118e507d613559e9184a0","impliedFormat":1},{"version":"d1d526413f02ef1af71b2bc9f462e3220e37b591a09356da8f8268dc77f9ca69","impliedFormat":1},{"version":"e1052f29de79d5ec62ae1a31ee172d8d87c55299b869eea2a990feff5314070b","impliedFormat":1},{"version":"92929dcabd637c672157358003777785a3ca2b86d926272c5bdc4bb89eb97d82","impliedFormat":1},{"version":"cbacc519609fd5bc367ec19e0a3a560817b5682734126f9b0ad79e58ad7d84d8","impliedFormat":1},{"version":"3d4ccc84fd1463668da40364e20d4c61be9e040bd06ae95fee0ee8cf01674802","impliedFormat":1},{"version":"8071cbb70de1884e715cab304e447344283020b360db83f193e512deb5bd56b8","impliedFormat":1},{"version":"f47efb3f39dceb3018b0a023ee467221990a280b60dff29ead750d5e83757d8c","impliedFormat":1},{"version":"2a536090a9aa77f2d687e61eb7b2ea9b6feb569839b7a4043efe50d253edf29a","impliedFormat":1},{"version":"2d118a64c471fe277ec79aa4848007cad60b55c68bd29cf6102bd31e82c63198","impliedFormat":1},{"version":"ff9590ea90db4a3c6d194f50582160b52ef78f83a93145a3d9d25541b03bccad","impliedFormat":1},{"version":"b90c23a457c16f77a282531a5caba5c911d2252eb097f3193a8ee2df6a3f21a2","impliedFormat":1},{"version":"18a78c980596d0c645668abcdeb14ea32b119f5535f0cb6ee28e7e16b61844e5","impliedFormat":1},{"version":"b734d9f8d146421fd3be1b092c12732f726399f0a2fb8f7365d0bd2de7414111","impliedFormat":1},{"version":"d5be608b445099a10fdacb72200005012ac87982a1802eea12df7ac3c632f705","impliedFormat":1},{"version":"d044a98e1fde755852170ab358e11488df920f1f7ffc503352056481b2428310","impliedFormat":1},{"version":"315dc985e663d0ae2e093a554082b071b0d45b20ebc59bd6d41cbaaf3cd56865","impliedFormat":1},{"version":"428eb3b2604193a07abe50752317690e20828aa6e6d77c5b4ca5c28f0586729b","impliedFormat":1},{"version":"5b0e8e252304754eadcdb7ba0980429459eb54e2ef6466a9717249ccb56d37c1","impliedFormat":1},{"version":"f5746d75e8d224d3b896c79fb02b0ff9f25bffd28ebcbaf847b94ad4aeab1059","impliedFormat":1},{"version":"a493313486144ef7287c1d2aeaddd73375d70e922cfb1c327393763c58daa1f9","impliedFormat":1},{"version":"32d4b667d2e35297bc7a4609a9e24e6802422f5889155d6dcfc2623b8c5ccf55","impliedFormat":1},{"version":"2ffa727b142dc60fa2d1df99993c169ef9fb83fbcea94c80eac5256560f83d88","impliedFormat":1},{"version":"c8b73ee9369e3f9364dc58157b3dbd2929ae6a43beb9cc8eef6282b01bf095c9","impliedFormat":1},{"version":"b406a7687cbe03e1e5e1e491045d49c7637cf32386668a873eaa794bb026357b","impliedFormat":1},{"version":"75013c07d278b566f66a33f8e48ac9b4bd6e59961181d6010a351a84f70f286b","impliedFormat":1},{"version":"98c5134ac2aff33f992b08c44dda386a4ddb08a597445954657761ab3827737a","impliedFormat":1},{"version":"155d5820e24ed3528f291182ac9072c1c36ac484b6bc92442e72e0df918fe625","impliedFormat":1},{"version":"c50301a1a6e8a1f47604bdfdf8fa8bb2c138875bb62f15c9e24736de423bc40d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d2db193706b23385bd4ecbc3eda013e0a9f574f091b4c4706d1efd31b83c979","impliedFormat":1},{"version":"3bce3d30d4c8a3d21e94ad17ed0d8761ae8cec5a6ebcda9a895d1cccab0dd1cf","impliedFormat":1},{"version":"57f6a2cccb9545d79ac4b966705779a258b614c85b6020a9330bfce093e1a5cb","impliedFormat":1},{"version":"0abc82c7a0880d608ff23f00006bd7d9b73f57c289d94054b7d5aab13861dec2","impliedFormat":1},{"version":"6d23ffe7f1b73f16b08f5baeca430e6655b46fdc5862fd7bff1483b71fc6b28d","impliedFormat":99},{"version":"e9ad8b3e21ff0df33e1fbf658461d85fbd977321e5972b6d4522a50157c47eeb","impliedFormat":99},{"version":"abb337d9cc9a8f04c1fe061d8413c70d51c2119cef9f11eac7bfeed1e5e700b9","impliedFormat":1},{"version":"70fa22e06362d7fcf6c40540daa95c48298845cb098b629a2ce53c61be2faf27","impliedFormat":1},{"version":"397eea316fb96e682f12d43c9bb7b5cc86b9f65cea24c8a8bf8a8acf4d7f1ebb","impliedFormat":1},{"version":"174b2c19e451651f3a99a9d211f7400b029e508325f54abdd653864cff7180a0","impliedFormat":1},{"version":"177b724effe4a6e75b2f2c2bcd7f083d62a30081492603ae7d29e6f1a7875868","impliedFormat":1},{"version":"84d09cb0cf9bfa572ee2e8561382412c547c09d5f11182efeef0f1609f8e22b0","impliedFormat":1},{"version":"b3e1d6b2ccb70c008269ebe9cf906208aa0ad346d511c711e1517e5a459629e0","impliedFormat":1},{"version":"46d08ac2a75efefecd96e46ffb5d9a4254025f5768e0a04d9c4eeb6d0ed0ce4f","impliedFormat":1},{"version":"09473c7df1b52fa689fbbbb6dce0df08141bf3a073581079079196818947b051","impliedFormat":1},{"version":"0f7f7601c7fb37facb072185fed122b97971f66a4d7529a1e6229803c93b66cc","impliedFormat":1},{"version":"890b32c020e414e506e19d266b7eb338b77e3629eafb26708eefd137460add33","impliedFormat":1},{"version":"53849389d4276c43b75f7aa6a6e973bff06a79efd166ddfb2318636c725c3d6a","impliedFormat":1},{"version":"0fc4590cd63007339832fda1f9ef343aa6b0c7f8c2d247b9c72176be49a21296","impliedFormat":1},{"version":"d53beb2090e40e7e65914f21cb4659a479f2d7fcd498e2bd61a3ab178e01b2a6","impliedFormat":1},{"version":"89308a528290f199dbec22c8b23e2618df0f762bc8626aa302590b5a42c6fe0b","impliedFormat":1},{"version":"160b24efb5a868df9c54f337656b4ef55fcbe0548fe15408e1c0630ec559c559","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"95da3c365e3d45709ad6e0b4daa5cdaf05e9076ba3c201e8f8081dd282c02f57","impliedFormat":1},{"version":"d121383c508b2f18d58c5de445c0f85ac389847132e1fdafdaa417381ec83419","impliedFormat":1},{"version":"12d1767ab0c67aa497fa293b27173e429ee6adacb27cd18d2237680055fd2997","impliedFormat":1},{"version":"df34f4fd82d3a31de5d68f6d3e6c742820d496b85181ac4b95076aa3005d8315","impliedFormat":1},{"version":"f63cb353cd53da6be4a34f6fdece6316dac14fd62cccf9a4d2ce6bab2c37bc8c","impliedFormat":1},{"version":"705f2f47316c603344bb9e1aeb80be9f761feb0cd92bfee0bbc0cfd7abe9aae3","impliedFormat":1},{"version":"79727863008185c7584fb4995421bced06e6fb909eef63ec664715f4132e7a0c","impliedFormat":1},{"version":"6825eb4d1c8beb77e9ed6681c830326a15ebf52b171f83ffbca1b1574c90a3b0","impliedFormat":1},{"version":"1741975791f9be7f803a826457273094096e8bba7a50f8fa960d5ed2328cdbcc","impliedFormat":1},{"version":"6ec0d1c15d14d63d08ccb10d09d839bf8a724f6b4b9ed134a3ab5042c54a7721","impliedFormat":1},{"version":"ac393d11e2c585763ce7a8b9118ba4a809cc19f9bf6d647657d38268ed5d3b56","impliedFormat":1},{"version":"b61028c5e29a0691e91a03fa2c4501ea7ed27f8fa536286dc2887a39a38b6c44","impliedFormat":1},{"version":"a4bf154e0f9d56112713c3a7d2d60c85d667cae17e69f7869a32578881b652a8","impliedFormat":1},{"version":"d5f65e3a5277cbd0b2c89da26703c5879cc428da7ca816d1d1fcdfd7c0a2500e","impliedFormat":1},{"version":"c784a9f75a6f27cf8c43cc9a12c66d68d3beb2e7376e1babfae5ae4998ffbc4a","impliedFormat":1},{"version":"feb4c51948d875fdbbaa402dad77ee40cf1752b179574094b613d8ad98921ce1","impliedFormat":1},{"version":"51d4fca2239d818a6254ba46be06e4def3be685ec034e9255cba403d3b27a07c","impliedFormat":1},{"version":"b457d606cabde6ea3b0bc32c23dc0de1c84bb5cb06d9e101f7076440fc244727","impliedFormat":1},{"version":"859cf43771b68e589bb12c6e5cde3edcde4b530c7d324f455af2b9e61d4f4768","impliedFormat":1},{"version":"9faa2661daa32d2369ec31e583df91fd556f74bcbd036dab54184303dee4f311","impliedFormat":1},{"version":"ba2e5b6da441b8cf9baddc30520c59dc3ab47ad3674f6cb51f64e7e1f662df12","impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"b4da2f297179bf7f9f73d401f8c62c5dc2628adf714c312940f92cb658d17184","impliedFormat":1},{"version":"2cff21e4b8f1c87ed09ef0c1bf9669406d05162444ff1ad480df8fa757ff7891","impliedFormat":1},{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"523d9919e5280347059e04f2f05ea4787d6c52587d070750093c643957edd2ae","impliedFormat":1},{"version":"f373786653e1def474eaa857ecbb7a37ce0ec44d59cdca0f3223877ccbe57c12","impliedFormat":1},{"version":"87ca4ec957fd7b2044e72f0b2412eb19a11383d1f3d7d8932b4a7f6ad0297d97","impliedFormat":1},{"version":"8ba5d70fcdf6e037a5617618efa8d91feda214520d754d4de042c45f9e3d75c7","impliedFormat":1},{"version":"333f09bee08d08b6a18fda53299b63e6ccacc71a383c17700b97a0d24914f6f0","impliedFormat":1},{"version":"536b90ecabf44306f85c326243640d2837b04f168f491000850630a98ffa5fc8","impliedFormat":1},{"version":"eb766503252cd8f86e8c86c9f35e5c2c015573633aa451639f8d1a2c86956ec5","impliedFormat":1},{"version":"8d353a4fb6da4ab5be13b34accd4a78ca002f271bc144a1763e061ea94f64dbf","impliedFormat":1},{"version":"7ae6a4d1f020c558b442c90878c9c43bdb250181ccbcbc7d31e23117496780aa","impliedFormat":1},{"version":"826e817616b792f26f8b8770a123d17541dccc75a95489ef8353fd5abd8e5d52","impliedFormat":1},{"version":"24d47b7d7229917e5ea250eb92246aa86c7ba8afe4038467f515c1dafac130be","impliedFormat":1},{"version":"53ab00bde3764be64ce6917ef1d4c4bd9252adcb953a543a403b5da6a0cf97e6","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"d77695645f5fc2bd85ed997c1fbff15bb7644f123584aa187381050158a7f735","impliedFormat":1},{"version":"4e1fb7c41577ecb941994efb966bc9465dd05123a1fed07abff747b298702cc0","impliedFormat":1},{"version":"307a5ef1850442cf9a46044370f915e80a910ad9fd66097e07ad541ef0ff3d3d","impliedFormat":1},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"7965dc3c7648e2a7a586d11781cabb43d4859920716bc2fdc523da912b06570d","impliedFormat":1},{"version":"90c2bd9a3e72fe08b8fa5982e78cb8dc855a1157b26e11e37a793283c52bf64b","impliedFormat":1},{"version":"a8122fe390a2a987079e06c573b1471296114677923c1c094c24a53ddd7344a2","impliedFormat":1},{"version":"70c2cb19c0c42061a39351156653aa0cf5ba1ecdc8a07424dd38e3a1f1e3c7f4","impliedFormat":1},{"version":"a8fb10fd8c7bc7d9b8f546d4d186d1027f8a9002a639bec689b5000dab68e35c","impliedFormat":1},{"version":"c9b467ea59b86bd27714a879b9ad43c16f186012a26d0f7110b1322025ceaa83","impliedFormat":1},{"version":"57ea19c2e6ba094d8087c721bac30ff1c681081dbd8b167ac068590ef633e7a5","impliedFormat":1},{"version":"cba81ec9ae7bc31a4dc56f33c054131e037649d6b9a2cfa245124c67e23e4721","impliedFormat":1},{"version":"ad193f61ba708e01218496f093c23626aa3808c296844a99189be7108a9c8343","impliedFormat":1},{"version":"a0544b3c8b70b2f319a99ea380b55ab5394ede9188cdee452a5d0ce264f258b2","impliedFormat":1},{"version":"8c654c17c334c7c168c1c36e5336896dc2c892de940886c1639bebd9fc7b9be4","impliedFormat":1},{"version":"6a4da742485d5c2eb6bcb322ae96993999ffecbd5660b0219a5f5678d8225bb0","impliedFormat":1},{"version":"c65ca21d7002bdb431f9ab3c7a6e765a489aa5196e7e0ef00aed55b1294df599","impliedFormat":1},{"version":"c8fc655c2c4bafc155ceee01c84ab3d6c03192ced5d3f2de82e20f3d1bd7f9fa","impliedFormat":1},{"version":"be5a7ff3b47f7e553565e9483bdcadb0ca2040ac9e5ec7b81c7e115a81059882","impliedFormat":1},{"version":"1a93f36ecdb60a95e3a3621b561763e2952da81962fae217ab5441ac1d77ffc5","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"b558c9a18ea4e6e4157124465c3ef1063e64640da139e67be5edb22f534f2f08","impliedFormat":1},{"version":"01374379f82be05d25c08d2f30779fa4a4c41895a18b93b33f14aeef51768692","impliedFormat":1},{"version":"8e59152220eb6d209371f0c6c4347a2350d8a6be6f4821bb2de8263519c89a8f","impliedFormat":1},{"version":"c0bbbf84d3fbd85dd60d040c81e8964cc00e38124a52e9c5dcdedf45fea3f213","impliedFormat":1},{"version":"b7e5408914f257cad0f5a34e99d603c832c41a0468077241c16b95ecb5b1d1ce","impliedFormat":1},{"version":"bd290e7ac275592ef0e1c1e7d328c13590557ba1b5b5f44aebed475c2e11fcb4","impliedFormat":1},{"version":"4cc2476d4261cbbe72a854601a33433e7cf0465198102b5beae62ff680f553aa","impliedFormat":1},{"version":"1a2e305c79375ab419ce2b519fbbba70ba3022bb9547aac5a94a2924da268cb4","impliedFormat":1},{"version":"ad1e3ae2abb2ffead9e829c0a85b4263ad9a12c8e08683cda955e5c94e65fe78","impliedFormat":1},{"version":"86c0d826a796edc79887882b63ccf31940e53d938bb5f9c0c840b86cfbfc1ea8","impliedFormat":1},{"version":"91bfc77bc17fde47c6aabc24c87fd199bb49edf4555ff4008d47029d3d3d30c6","impliedFormat":1},{"version":"331ce4c0de07de8b8c15dc5a0c46438113a24b7db9d389dd7b6c4e8e9bba950c","impliedFormat":1},{"version":"bf92efea04e6c78dc0fb8b5087e0230a091795698742d7dc9225bbe193d73919","impliedFormat":1},{"version":"54a8ab90135de090f7bcc28c4181abf05b50ceec10fcae55908e90b3653d1629","impliedFormat":1},{"version":"669ce6c38142e9a6e9ca3a95a6e0165473e9fec4aa605a483707f2489ec51346","impliedFormat":1},{"version":"eed2bd097ef50c7f50d6de0a60dc6bc0cfd8a2695f414a825ec7e02ca5c7d4e2","impliedFormat":1},{"version":"b4a969f59b4e1c360cd32cbf05cd0a19f6dbb2dacb590a463878fc8833d70a78","impliedFormat":1},{"version":"2e4bc178dc1d1c84f824193b467106ccf818df88dd31d61af0ad07f0b986f4bf","impliedFormat":1},{"version":"0046b35b5d60b013a0b3be5d93cc20b3bf1c81fb6524074ddccc3ce46f24dc49","impliedFormat":1},{"version":"cf12b099d833429c377770aa3ebbcc4ed3e013e866cb0293d882bfc2f51dc319","impliedFormat":1},{"version":"e5db8858d0b3734899661305fe8f0977006fa7a1d65da78d6335da9a9e084ca9","impliedFormat":1},{"version":"195615e77c02689e1731d38bdf63da6bbe185e420e0abc1f22fb308a5792ff4e","impliedFormat":1},{"version":"8f82ea3a953aadf71d6de753793c1dbe91d7989f092a9b4f471764af11470b76","impliedFormat":1},{"version":"652019b49fd05575814b87ffcafdc2c845d76d1597519948001cdac9f90549bf","impliedFormat":1},{"version":"913e67977743084c57560365b44537784208b9bee68a1eea50aec617634d8c2a","impliedFormat":1},{"version":"3d3bb997e015b612386ab7d41fb7b5c1a365e73d6fafa3d38d53ce146bb063ba","impliedFormat":1},{"version":"3cc5606583930afb78edf9e5a4ee0279f2b36b084140a4a72011da69e6214bc7","impliedFormat":1},{"version":"d1e4fb36a61f22fe3955c3964957da3516aa858625e24cbf89caeec3b6bbfcb2","impliedFormat":1},{"version":"76756437f90e499eb3fcd36dbc4f71551690e74dbd4a1a75307763b3008e867f","impliedFormat":1},{"version":"dbcbca3da8471ad599a74a4e6127d31af5eaa13eb80ff348fc9a36b6d8ccac87","impliedFormat":1},{"version":"b20aeb575bc99b062e47360264d626c8e42af20963a3f394855445d280a01b4a","impliedFormat":1},{"version":"74ebb7bf48cad04b6e4a27c96e11079ff818830eaa5bc20d93f09789dd6f330f","impliedFormat":1},{"version":"a724b69397b2b9bd14baca667eab735bd7e7dbbb050b88ef82ab3484524b984f","impliedFormat":1},{"version":"5259423e4145035cf6b132e458cbbd38748b0be00569498101b8fcb7b708a99a","impliedFormat":1},{"version":"8fa93d4039e1b25f274620f0de6394335cb018b5766ed0fb3b55fa14fbd5edff","impliedFormat":1},{"version":"9c4bac47ba8afcd1ce693573e3783e1b36b284ec9c3c7438d4b6fea7492a7831","impliedFormat":1},{"version":"1906bd54c89b2a61461b70bb4d184a4a643a5122b60eb232153cf2c8753dc90a","impliedFormat":1},{"version":"80d49388ab065a8ce1ca79def1ac7c12bbf83ae2b41d91534c9db89da3b45bec","impliedFormat":1},{"version":"3458d16d5116b4544a6bd4aac2861337f585fecff9bb85043ae7214709830ec0","impliedFormat":1},{"version":"1379a47e31c8a465c237a79bd4ea45d386ecc42e3b09bc98bef1934990b6f4f1","impliedFormat":1},{"version":"9e2753cd52b5609662e9f28e70a8198f3f58db56d05e57d80c2f36c14c647c56","impliedFormat":1},{"version":"d6c2ab5418ac5cf0449ec2aa2b44c8d31a3690a7c6ecad1a0c15fb94296ea9f8","impliedFormat":1},{"version":"e8172d9cd473d2573bd5d4adb9537850c13059906043e56624455457e3d9cf2c","impliedFormat":1},{"version":"6585f14e5366c3779affc17b724102b7bbab7eb18e80e6d4abda2a7525647240","impliedFormat":1},{"version":"427f57f0ceb3bfb80b5c8576103106663e0c426b4df4a729dd4e8dc2bd8416d8","impliedFormat":1},{"version":"c7fb4441f870f66998fce9088c6b3fe92d426a0a9fc06013ff643f8b91ef5a54","impliedFormat":1},{"version":"e410dee77b1c9cbda80371a88003b9af22cc923d387eca1131db6e0b5a0f2f29","impliedFormat":1},{"version":"2d642e216d761f88cb0f366b2ac56c092912c50b65e62b57f27ce0a664253c5d","impliedFormat":1},{"version":"c0d32a523a1e6cd61bf3ef021e948f81802ec779646f47bcde4cf7264032f063","impliedFormat":1},{"version":"d93d51ea08ab5abd3ec8a92a946c1932f37696d9bf064618523b5a321b01ec20","impliedFormat":1},{"version":"154bbbac378fe41c3af7d10d254a5b325cb268eb430501f671313af8b9484fc5","impliedFormat":1},{"version":"e9618b25e89be648659e1fb9dc98fab80f3915bc382d6f9bd08cc4c622dda928","impliedFormat":1},{"version":"282be40c170b779f7dbf47d3629fb696375403e0015044062f793ac2145572d4","impliedFormat":1},{"version":"90214c6a86f8ecd7194ec504c85676a12a6007c752d37af78e38b6d7f7f88940","impliedFormat":1},{"version":"c08ecd78a58b8164255ccef4c4e98834d31f6f6edaa5347e372d9144b6538d40","impliedFormat":1},{"version":"a4e25751eb465f2eafe8e2e03fad0ee09f5e301356e8897083b466de9bd7d64c","impliedFormat":1},{"version":"7162aa6ec39d01971ac66796cbe5c655f9667d00c153e2c02954b54c3bc2ba55","impliedFormat":1},{"version":"8811cf0822434700b5d7a562537beb39f6ba39edd98c8ce36b32c5ef278c04af","impliedFormat":1},{"version":"c3699c5ca4df585b3b13d28186af587ff548488a464b390f93641654ec4ef1ad","impliedFormat":1},{"version":"ff823768e1212f68f49ce2735b8ba1bca55471bc76e2326ca26a14d5a11424fe","impliedFormat":1},{"version":"299e6202d8f1363efbe505129a66b57a24ff08d7766b1614d1a2cc01b4bf6ac2","impliedFormat":1},{"version":"7acffffaeeeb0774a9495467c9f6bf9481d4a9b4e24af5b88c7fc897d6aa6d01","impliedFormat":1},{"version":"26ce486758a7494ee69e26b69a063018e5c19811497a424e3a69909505722e75","impliedFormat":1},{"version":"7b633405cc5e7806c2798b9cce92dffe20748de5760b8f35c71b2c7e09664e5d","impliedFormat":1},{"version":"104a0c66c890cc55ee790e6e959b7c79d951d1fe4f98f3e1c5cdbffc295785ae","impliedFormat":1},{"version":"4a82633192e6c5214d388f19f6383f28923b53d3db52575d194be414e19e00ad","impliedFormat":1},{"version":"5e075bd6a9a10600d30846cc3f668f9adf3317ec91e4ce30a1620821e6619332","impliedFormat":1},{"version":"6e014aa95905c4042adca3f513dce058b38d82d6f9af247683974f5446388d6d","impliedFormat":1},{"version":"824f1c077e6fdd4fb51dcc02e25a8c562651efd9aca23c6cfc040d5312640b41","impliedFormat":1},{"version":"f740c12f7099377de24ccb35dfa19ee16ce8d320e1925de353e73bdbf472bd5c","impliedFormat":1},{"version":"0c3e81f324213691600bedd638cab9b3dc51b576bb027037e89f1ad7e899e9f5","impliedFormat":1},{"version":"04c4509d1f92912fff1757a2ac354cd1bda09cad48d0215968a9298f9456a353","impliedFormat":1},{"version":"100f9a496bd8d04bf34a14ab23bddee155dd4fa7ecd1d8f65a68d871c09580f8","impliedFormat":1},{"version":"86ed42596c031fa899d40adbb6f3095a98e13c7dbbce3872c032e428c6f3bebd","impliedFormat":1},{"version":"e076bef607f0fd9e5636fc3a55ff4b2e88ecab78ee3a0f5115c8d9df1c3245d7","impliedFormat":1},{"version":"9c5815bf4c99b2889950a11a060628dc8304eaba245cffb7fa03a8014462e0c2","impliedFormat":1},{"version":"77db76e698e83910ab1c40e6bb2cf83ca7b25c68a88a7526fcdb3db0ca245f6c","impliedFormat":1},{"version":"4eadbc80a36ca4a18b3e348bca008717cbc2ea0e446b45701c4f3abcb57f0686","impliedFormat":1},{"version":"ce8f260cf460c59bb0fe517d9c358c8396b9b3be59a1b897447fd3677de05e4d","impliedFormat":1},{"version":"6f7e11fc492153d8654a0224b7da65fdb720b202a44abe664e54dcdff29629b4","impliedFormat":1},{"version":"e3d32b0f628acf1147344fb67f1afa7d1e3144bb47287727018b4a3fdf0bc21d","impliedFormat":1},{"version":"21e80adae8f3db84532c9771d2cd4c5af66265edb811627ba5c6316175a85567","impliedFormat":1},{"version":"fb6b98bf7d4a141247fc0648b6e0aa906611742f7e356dd4d6880b4c9adbbd8c","impliedFormat":1},{"version":"3b661aee0265d0e2a0bab4237326a877debccc5ed7176bd36ff487dd106b3a84","impliedFormat":1},{"version":"f02d452ec0fa63b28a5638660b6eab0a7431ebe486c6b9e08c144e42a925cd74","impliedFormat":1},{"version":"4ba09f2149f0a459dfc51d0defca44606e7f100db76272517a5222b15a1d519e","impliedFormat":1},{"version":"8d4fd187f44fdce41faf0b547b5b60cf62265ea1229b80b9b46f711effa04661","impliedFormat":1},{"version":"64089edc83778914d8a71dc3033792254d0c6b290d724070cef8aa90f1abf4d2","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"5791c18e28a34de2eb955d8a4936d7e77fe8cb876618ee388eced7f405a001b8","impliedFormat":99},{"version":"ec25291a1070d43f79f28f45b9ba8235036acfb61249315b952146865841d2a3","impliedFormat":1},{"version":"049b67fb3aabb131ae180753ea21d2f8e51535f49bb38caa4274c59bfd5cce96","impliedFormat":1},{"version":"004360740ab4dc33049a70c82f50e261f72c1eca485d79839b2917fd49f12352","impliedFormat":1},{"version":"43d697a93e1ae17206118fdad195d6e9e6ecf47da399a01479d27a47938a14b8","impliedFormat":1},{"version":"20b53c455a7b3c034d158cba0588eb517f72c18a0df3ef93558033cbe32e2977","impliedFormat":1},{"version":"30aa90d3e13be1c601b9221edacd016d81469f952a8ab3a615a503196bac86bb","impliedFormat":1},{"version":"446c355d9b5de49c702b65878503bd414af85d48ce2416b908c1480c8431daad","impliedFormat":1},{"version":"df9191a2d3fd620062b4b6f144e71d044793478bb1e72c9bb691bb5531507e68","impliedFormat":1},{"version":"60a75cc2f56bb84283b831cfa2ba13b5c0aa8453b536d0182e4af3e6cc0406ba","impliedFormat":1},{"version":"7a1d82e520454e20ada66d4ab012942154d57fc221a0d47d5cc282fe57733747","impliedFormat":1},{"version":"a17b8efc4405a8aed316837e49fee23b7642f18300ca18fce3e5279d710f279e","impliedFormat":1},{"version":"569a53a90e24c546b67016839e66e888074111a6437f9f392ee63fed339a140d","impliedFormat":1},{"version":"641706ed3b31f01389b93036b3c39e84a17829241a5b81a5635c202cef8cecb4","impliedFormat":1},{"version":"3934ff40d5af41d638ba7b1f0850b833901dbd936390fa251beddf0f9495f309","impliedFormat":1},{"version":"23f121b6fa546ef05c21f06acf01b9c50b924473e5c9528ec5e8398ee848944d","impliedFormat":1},{"version":"281f29f0da609e131a06edc87b2fa053ccb1cc59039adff70010fdd605cbe36b","impliedFormat":1},{"version":"bb3e8164a1a1a4a8f1b91f7034241171e4a5ff5c57ff5ab630c04fb638770f95","impliedFormat":1},{"version":"dd81855d536aa94fbe8d8f0daf606ea2cddc1278fe0b366eae848434b10ef3c4","impliedFormat":1},{"version":"41ac5c6aff0589ac230848962b7880d4c7cdbe6ee582880dca618bea730372aa","impliedFormat":1},{"version":"062fabc9132d3e5489e19afa7ea835568251910fba7c294b85fff2ce7b599d20","impliedFormat":1},{"version":"7bc71d52df9d8e5cc55218d347a91b1758b38341f9cbbac0b80057aa9d93daa6","impliedFormat":1},{"version":"84606cedd02b8e7d23044f2df15b6c7cbba553d58aaf48344e4b299fce3acb05","impliedFormat":1},{"version":"d3a6e1ff56a0a760b1b36eb34925042a8148d8e0ab4c2d28fcbdbf40fb5a8acc","impliedFormat":1},{"version":"839114ddc4236b8304df6a6c7cc6784913b7c69a63afd4ecb36fc5c9c57276fc","impliedFormat":1},{"version":"cc4ecb6238b32248c6b58577a2ac2a6223c002c1a9e3f1f9424a89f44aa84f0a","impliedFormat":1},{"version":"46324183533e34fad2461b51174132e8e0e4b3ac1ceb5032e4952992739d1eab","impliedFormat":1},{"version":"d3fa0530dfb1df408f0abd76486de39def69ca47683d4a3529b2d22fce27c693","impliedFormat":1},{"version":"d9be977c415df16e4defe4995caeca96e637eeef9d216d0d90cdba6fc617e97e","impliedFormat":1},{"version":"98e0c2b48d855a844099123e8ec20fe383ecd1c5877f3895b048656befe268d0","impliedFormat":1},{"version":"ff53802a97b7d11ab3c4395aa052baa14cd12d2b1ed236b520a833fdd2a15003","impliedFormat":1},{"version":"fce9262f840a74118112caf685b725e1cc86cd2b0927311511113d90d87cc61e","impliedFormat":1},{"version":"d7a7cac49af2a3bfc208fe68831fbfa569864f74a7f31cc3a607f641e6c583fd","impliedFormat":1},{"version":"9a80e3322d08274f0e41b77923c91fe67b2c8a5134a5278c2cb60a330441554e","impliedFormat":1},{"version":"2460af41191009298d931c592fb6d4151beea320f1f25b73605e2211e53e4e88","impliedFormat":1},{"version":"2f87ea988d84d1c617afdeba9d151435473ab24cd5fc456510c8db26d8bd1581","impliedFormat":1},{"version":"b7336c1c536e3deaedbda956739c6250ac2d0dd171730c42cb57b10368f38a14","impliedFormat":1},{"version":"6fb67d664aaab2f1d1ad4613b58548aecb4b4703b9e4c5dba6b865b31bd14722","impliedFormat":1},{"version":"4414644199b1a047b4234965e07d189781a92b578707c79c3933918d67cd9d85","impliedFormat":1},{"version":"04a4b38c6a1682059eac00e7d0948d99c46642b57003d61d0fe9ccc9df442887","impliedFormat":1},{"version":"f12ea658b060da1752c65ae4f1e4c248587f6cd4cb4acabbf79a110b6b02ff75","impliedFormat":1},{"version":"011b2857871a878d5eae463bedc4b3dd14755dc3a67d5d10f8fbb7823d119294","impliedFormat":1},{"version":"d406b797d7b2aff9f8bd6c023acfaa5a5fc415bfbf01975e23d415d3f54857af","impliedFormat":1},{"version":"7d71b2d1a537fe41760a16441cd95d98fcb59ddf9c714aba2fecba961ab253b6","impliedFormat":1},{"version":"a9bd8a2bbd03a72054cbdf0cd2a77fabea4e3ae591dd02b8f58bda0c34e50c1c","impliedFormat":1},{"version":"386cc88a3bdee8bc651ead59f8afc9dc5729fc933549bbd217409eabad05ba3e","impliedFormat":1},{"version":"9005ff613f060db9698390c74576fb1a3be54867011fccff9976c486e63e6592","impliedFormat":1},{"version":"0093199377d2d328c7ceaf77d76bf518d0520f569ea04a8e10d76e3f691022f9","impliedFormat":1},{"version":"c9d40f387dad53ab3510ef147872fe3e28f1fad96ccd36006a5410733e2b7a6b","impliedFormat":1},{"version":"51e86f953657a8226f59c82bd22e2d1b2ece468fb1beac6f16591ba778fec2c2","impliedFormat":1},{"version":"f9d6586afc335a86d826509948d820369f837d8ea06fe5be065be02dbb3fd00c","impliedFormat":1},{"version":"6b7b8218850f21248a311812c4d6c196ffc293e0e41c71eacceafdfa6c74eaf0","impliedFormat":1},{"version":"f1b960f33f68bcb6685806b9471dc415676108541ca0db3c0c6cae512bed87dc","impliedFormat":1},{"version":"6a7572e29ba3dbec7a066a82fa0f7b57268295a8120467ba81ce3165e0e63aa1","impliedFormat":1},{"version":"4ac0045aa4bc48b5f709da38c944d4fec2368eda6b67e4dd224147f3471b7eaf","impliedFormat":1},{"version":"dbfa8af0021ddb4ddebe1b279b46e5bccf05f473c178041b3b859b1d535dd1e5","impliedFormat":1},{"version":"7ab2721483b53d5551175e29a383283242704c217695378e2462c16de44aff1a","impliedFormat":1},{"version":"bcd53fb10140012c84d7440fcf5e124643bb1b7898909d6220f1308bd8a94e7d","impliedFormat":1},{"version":"15c662fe6ce3e8d1bf0d44191296e37420e0823a81958f2c79618890282c0a59","impliedFormat":1},{"version":"1538a8a715f841d0a130b6542c72aea01d55d6aa515910dfef356185acf3b252","impliedFormat":1},{"version":"68eeb3d2d97a86a2c037e1268f059220899861172e426b656740effd93f63a45","impliedFormat":1},{"version":"f521ab6dd9c7d1bffed41fc69f1c7f763743ed4bbc07a4ccae664e65c84711ee","impliedFormat":1},{"version":"0d65250cfc0a084baa749f9d00d0d772fb4ddcac6e0542ca33b61da515b65ddc","impliedFormat":1},{"version":"675e5ac3410a9a186dd746e7b2b5612fa77c49f534283876ffc0c58257da2be7","impliedFormat":1},{"version":"49eef7670ddfc0397cfd1e86d6bcff7deecf476efb30e48d1312856f0dc4943d","impliedFormat":1},{"version":"cc8d1de1eae048fb318267cc9ddd5a86643c46be09baa20881ab33163ca9653b","impliedFormat":1},{"version":"d6025465105bae03153679b3241805998316f492a6a449f14cd8b92489c2a6a9","impliedFormat":1},{"version":"63de4f4c8ff404aa52beaa2f71c9e508d9e9b3250b2824d0393c9dcfee8ab8d6","impliedFormat":1},{"version":"27b33e3a7a19563752b13d0973039240b549ede107009dc02866e12c5dd2273e","impliedFormat":1},{"version":"48609767cd72c5b4714dc76f3ab7bfe1c54c245d4fea5bb5122b631d9a8ae963","impliedFormat":1},{"version":"a7f590406204026bf49d737edb9d605bb181d0675e5894a6b80714bbc525f3df","impliedFormat":1},{"version":"533039607e507410c858c1fa607d473deacb25c8bf0c3f1bd74873af5210e9a0","impliedFormat":1},{"version":"c10953c3930a73787744a9ab9d6dca999bbf67e47523467f5c15cf070bf7d9fa","impliedFormat":1},{"version":"4207e6f2556e3e9f7daa5d1dd1fdaa294f7d766ebea653846518af48a41dd8e0","impliedFormat":1},{"version":"c94b3332d328b45216078155ba5228b4b4f500d6282ac1def812f70f0306ed1c","impliedFormat":1},{"version":"43497bdd2d9b53afad7eed81fb5656a36c3a6c735971c1eed576d18d3e1b8345","impliedFormat":1},{"version":"b13319e9b7e8a9172330a364416d483c98f3672606695b40af167754c91fa4ec","impliedFormat":1},{"version":"7f8a5e8fc773c089c8ca1b27a6fea3b4b1abc8e80ca0dd5c17086bbed1df6eaa","impliedFormat":1},{"version":"d2c19aa3fe2b5fab220c5f1e911ac5a936ad771a9c5cd3d00d1e868112ab97ad","impliedFormat":1},{"version":"3f7081ce9e63775009f67c7fc9c4eb4dcf16db37e0b715b38a373bad0c07df69","impliedFormat":1},{"version":"724775a12f87fc7005c3805c77265374a28fb3bc93c394a96e2b4ffee9dde65d","impliedFormat":1},{"version":"5c37b7e2b41f0a8af443cb1d589c171e0dcf0dbfbde2569632af87f24e5ea893","impliedFormat":1},{"version":"5b0a37625653b878a2dea8a2bd3606b08afd4c5435c602123f93d0abcee7278b","impliedFormat":1},{"version":"3960170989120c4776de46353f760dc83e625356120c9f4ec551a100bfad304b","impliedFormat":1},{"version":"5d2c3510e9435b1425701545b7256f54ea50f04d90ccefbb1c59630437574f27","impliedFormat":1},{"version":"6de61e2bd3f74ca8431d013bdee0667ad140f6c33e86ef0bffc3eecd0a177c0e","impliedFormat":1},{"version":"2da6a88db7c63476444b4f86836a181afc665a27a76216e2573228e31945aa20","impliedFormat":1},{"version":"4e1a7d04c48095bf58b4d412d2032026e31f0924eb4c1094366fbb74e4d9ad3d","impliedFormat":1},{"version":"0f67da0334f5cfe857d3a691d77b1b77969b19680ca17a4d5257fb2ee7d1cdc2","impliedFormat":1},{"version":"be1df6dd59c2cb384f8c6d67637ec39c4bba868eb132d890999704c2b891a53f","impliedFormat":1},{"version":"2b809c20f0f23d1b7e136cbb1f20dbb04ac781e2bb53059938b183e42a1a37d6","impliedFormat":1},{"version":"aa9a80428c275bcce3ef886f726084ad858678cdd8fbad418c044f449c8eb42c","impliedFormat":1},{"version":"09a7b3e963e5fc1cd24cce8eb15f52bfd45890f398afeff8aea4e67031458719","impliedFormat":1},{"version":"4990ff30f9b1f09013cc502acacf9986f161df8ec94220c997a674da29a12d34","impliedFormat":1},{"version":"29eb3afed89c7362edc4c490a7ce5437079a5d7cab7f56b2728fb503e266c6ca","impliedFormat":1},{"version":"cb01a788fc87e8359538284b34f2dd160798ac47417b356acd9c42c83e9a6e9e","impliedFormat":1},{"version":"901716549627e07fb0e37968cfba8bab25df470d409376e19ea69ef06409dd3e","impliedFormat":1},{"version":"a1e8ec7e9901514002cebcf3b0eba3c9e5b6a043d4507d3c0e0f11917d570d95","impliedFormat":1},{"version":"f7841d94fe925565ecbdd070fa5fe07052b1e3bc46167beb247bb1dcf4442fa8","impliedFormat":1},{"version":"31e320e0e0c1402d0ee9106856fe61bebc9ea5a6a36db3917382341b6569bbfb","impliedFormat":1},{"version":"3bf9606754f29616647616a0d650355a63fe6ca59a84007a2ddad25d83338909","impliedFormat":1},{"version":"406cc85801b49efd5f75c84cc557e2bba9155c7f88c758c3fadd4e844ad6b19e","impliedFormat":1},{"version":"212e1c5d8fdc6a8dc56fca0d49eb259f4acdfcfeac47703cff9dea655cc0e7f8","impliedFormat":1},{"version":"f7663954884610aeb38c78ffd22525749fab19ab5e86e4a53df664180efd1ff5","impliedFormat":1},{"version":"3e717eef40648a7d8895219063b1e5cb5bcc404bc1d41a22b91f3140b83bce1d","impliedFormat":1},{"version":"600acd6b479b1da5c0ae64fafaae5c64240c91d0de813874551654cf4009a160","impliedFormat":1},{"version":"4b73e6d036a63808de72e3ec923c9c7882190c1c11125c38bd79d576c7222ca7","impliedFormat":1},{"version":"ee745db646de4c5cf019e495ff5d800ed6f4ee9d9b3aaa7b2c5ca836928bc80e","impliedFormat":1},{"version":"e4e1fc1477160e68acc00771da34e7fdbe8f79df9ab44180ab5399e93e5f19d0","impliedFormat":1},{"version":"bac9f213ee4dd92d46fa5b0cd2e37700ded37b67da9baffa9e018be13af3a325","impliedFormat":1},{"version":"579e6decfc186b7b51fdb0827a04d5f82447c5e4df7eda5e1b30112f933e8616","impliedFormat":1},{"version":"02829418a7f51f2c055ebe66b5517c78e96a8d2046f127da1f76315c5f85f123","impliedFormat":1},{"version":"57e9b5eac33eea651be65388850dae662e3ecdb46a2fb881e3d03a674f5b58f8","impliedFormat":1},{"version":"e9192d5289af0e83197efce93e27a1a0d7285fe326b0dfcd52671f257f2cbd74","impliedFormat":1},{"version":"a7b605aa6a6f6911f84fabb0a41b0c2db0f06686a29f543578062d31f41571a9","impliedFormat":1},{"version":"002339117cf8443ad8660bc315c8a9208a061ea585f0fddc8d0d71600fcfbd24","impliedFormat":1},{"version":"754e8646783a88ec36b1b3fbad5948ade71d9d4baeadb2b631fe1238d4edd7e5","impliedFormat":1},{"version":"b442a0fc07bc071670c0f464bee4dd4ca28c50e1abeaebc674b021f8ee2cf9ff","impliedFormat":1},{"version":"a8d04c73d75a651d8614cb2f2c7c23aa8e4bc24a74248374a4535f5691a1639a","impliedFormat":1},{"version":"9d29d392c65cb1dae171422796ea0aa150fe945ce1fa684168a8a7b74fe91551","impliedFormat":1},{"version":"dd295a5bcbf58d6f94e6680a903bc726788f6f7ca072fbbb1779fbf44dfe7d3e","impliedFormat":1},{"version":"f1fb5afcf72b7dea209dfc1f4426a8c503012fccedf5072290acdcae95327a6d","impliedFormat":1},{"version":"f2a9893b419b6293ee3f0a7bc4c4ccff023271e561e9214520d7e93d7093ce57","impliedFormat":1},{"version":"b0b8db3a03d7bcb79ff645ae94b0adbc7c3965912ae0e496f3559a00f4d45dc1","impliedFormat":1},{"version":"01fe30f362863ad39a18347976be4e527e16fd250c211ae122ed128a50bb5383","impliedFormat":1},{"version":"d8d8c937d0167d2121f0b0bd32bc7a5583fa4d62beb5d110d0ab8e5b8424cd66","impliedFormat":1},{"version":"5de039490a4bae1646ab1c0ffb561b24b334ece7e02f14fc8a81dbab0d795c44","impliedFormat":1},{"version":"b5d546af0284c6c15aa5e2cba304bbce15ac0b319c5683c77f9f9424588df97a","impliedFormat":1},{"version":"52e2f1efa9e36f3edb9abd6148a0b110b1d4253cbf4641389913e6e5fba7c8fc","impliedFormat":1},{"version":"5ea39732426f0fbc03af1915382153c0693f074067e83ec06cd0969e00b308ff","impliedFormat":1},{"version":"ac30e1db4591b60bf96b57e68d1caba0f0e34ddf67040584216d1cf007b3aa8a","impliedFormat":1},{"version":"cd0e652d83a41ac79f9c343e4a8dd629c44ff009857b7ae3e26e1f33b613fd6e","impliedFormat":1},{"version":"56dba2f61eaeac928ef53a9c4b6df96df33834f0b8d39f59ac820bc4f0b65f5c","impliedFormat":1},{"version":"cd34fe236632c8c8cebdaa374d5b6ca4edfdfef0bc29d365f6613498970b4a44","impliedFormat":1},{"version":"e009f9f511db1a215577f241b2dc6d3f9418f9bc1686b6950a1d3f1b433a37ff","impliedFormat":1},{"version":"a82f1cae07471a353623bedad67e7fb26eb626d7791142cfe6037cd9c4e7bde3","impliedFormat":1},{"version":"64d15723ce818bb7074679f5e8d4d19a6e753223f5965fd9f1a9a1f029f802f7","impliedFormat":1},{"version":"2900496cc3034767cd31dd8e628e046bc3e1e5f199afe7323ece090e8872cfa7","impliedFormat":1},{"version":"6d2089f3928a72795c3648b3a296047cb566cd2dae161db50434faf12e0b2843","impliedFormat":1},{"version":"97e8c3a9ffa71c62eb745f3eeb41d493e42127baca20b7cd03e4a53702e99254","impliedFormat":1},{"version":"6ea62a927ac2607a6411804617e52761741fae66e533f617d5fbf3f3eff1073b","impliedFormat":1},{"version":"ac8582e453158a1e4cccfb683af8850b9d2a0420e7f6f9a260ab268fc715ab0d","impliedFormat":1},{"version":"c80aa3ff0661e065d700a72d8924dcec32bf30eb8f184c962da43f01a5edeb6f","impliedFormat":1},{"version":"42ac0a2d5b1092413b8866603841ce62aeaaf4ee51d07dd872e6a2813dd83fd5","impliedFormat":1},{"version":"800336060bed9892ffe5b618002e55a6341589d49f33f0b4f0aeffd950e90180","impliedFormat":1},{"version":"ece1e5ebb02df1f9a6dcc24dd972c88b065b2c74494b3c475817b70e9a62c289","impliedFormat":1},{"version":"cdec09a633b816046d9496a59345ad81f5f97c642baf4fe1611554aa3fbf4a41","impliedFormat":1},{"version":"5b933c1b71bff2aa417038dabb527b8318d9ef6136f7bd612046e66a062f5dbf","impliedFormat":1},{"version":"b94a350c0e4d7d40b81c5873b42ae0e3629b0c45abf2a1eeb1a3c88f60a26e9a","impliedFormat":1},{"version":"a4fafc9e188dbcd3f030170698b98d0610290b923baa6dbc5ef73652fa73239e","impliedFormat":1},{"version":"ceea84e44e119a15325c107bb6a9da6f567fc0dfe0c7c0f0e14e01a6c414965a","impliedFormat":1},{"version":"bfc0481f643bb66acbe6ff99773257c7d7b46b3a675faa4facc7bf50a8ba2208","impliedFormat":1},{"version":"f218c747145eec6830f8e0efc8d788987f67fce6dabfcb70bde3560bf47d0511","impliedFormat":1},{"version":"f13c9631dc6452116f3a986087dd9a7821b22deeb0c786b941d1483b35189287","impliedFormat":1},{"version":"4bac0f7f581329423f654f76d113f9073b4d18fd6e83b84beca4af9b5ed4fee9","impliedFormat":1},{"version":"1ba3a5fb02029c4bb2e542ca700e3308c972a7b34b153b344b078e45ea0db005","impliedFormat":1},{"version":"94d8bc3c878752ee289d7c3f3549f32881e29fcc561c8bf9d9f2cd67b558ed93","impliedFormat":1},{"version":"832818ee76c21953841e09e96746111036d81c4c43347514f3efe95d1a36b435","impliedFormat":1},{"version":"506f020d57f0533306ceea918d20b9750693bd41276100f39a13a88bfe51a356","impliedFormat":1},{"version":"6a54f042169c236a081d5b1a5fb4264a9f96a9da36d38ea1c1c70861516cee1b","impliedFormat":1},{"version":"27e2205915bf8367b3f405ccbb398e568a11d20875195e7cf1c830a021d6ff2f","impliedFormat":1},{"version":"33bb615855e9cb95ab454048b66152fc189cfcc815a71968f3fba0568a493dac","impliedFormat":1},{"version":"b779faa2a3191da938e452c648c35b9aa6fc86f8c8917d32d510d99b5b9ea44f","impliedFormat":1},{"version":"798367363a3274220cbed839b883fe2f52ba7197b25e8cb2ac59c1e1fd8af6b7","impliedFormat":1},{"version":"6ded4be4f8a693d0c1646dfa2f1b6582e34b73c66ce334cb5e86c7bf8c2e52b7","impliedFormat":1},{"version":"6d23119f30c32c38641427d412d1cf04d0119d22b4b12016043e261e89291b5f","impliedFormat":1},{"version":"ccc141e8cef1778f472f5c926bf164deced9a1260ef8121338aa862c1e81d5ea","impliedFormat":1},{"version":"9b1323fb6eb0cb74ad79f23e68e66560b9a7207a8b241ac8e23e8679d6171c00","impliedFormat":1},{"version":"c91045fdc3c29b254f43cfeafa16352bd096fadc4fce049fabb27dcf10da3095","impliedFormat":1},{"version":"f24a4036618daef36e431afd8417117c929d5604c60965ae7964583ea0f09c31","impliedFormat":1},{"version":"7a9957cf7c1985b926411d7d793478f0bc799153ae132d2e50b332f191656ced","impliedFormat":1},{"version":"e15eccb94daaa4d448274028eb3b1e58d349a1297266587b2f0fd13673fed463","impliedFormat":1},{"version":"4d87d725598b4b8bdd2a3118c1f127d7dbb4fa95e6afaa445ebacad54c8e0e12","impliedFormat":1},{"version":"7ccb0ae2d3e1bd2caa8f58c8d1b02748beff62864a03799b77e43d9be81b357e","impliedFormat":1},{"version":"86eb11b1e540fe07b2ebfc9cca24c35b005f0d81edf7701eaf426db1f5702a07","impliedFormat":1},{"version":"ee3457d827475b9e64ea793f49a83fffbb4b8fefe534b8f0a340b0e47d786e76","impliedFormat":1},{"version":"fffa170e6cdc3ea77232266f5c6d755f224bcb2ec28aa2a9275e7538f2d5902c","impliedFormat":1},{"version":"2cb440791f9d52fa2222c92654d42f510bf3f7d2f47727bf268f229feced15ba","impliedFormat":1},{"version":"6cff5de4b41e77461810f8e18591208b9a2955287de3cb4fbe50707863f5c1da","impliedFormat":1},{"version":"64e07eac6076ccb2880461d483bae870604062746415393bfbfae3db162e460a","impliedFormat":1},{"version":"5b6707397f71e3e1c445a75a06abf882872d347c4530eef26c178215de1e6043","impliedFormat":1},{"version":"c74d9594bda9fe32ab2a99010db232d712f09686bbee66f2026bc17401fe7b7e","impliedFormat":1},{"version":"5cebae0ade5c1cfb00534f5159a85b71061f59d45e48a3714e42e47f5431d1de","impliedFormat":1},{"version":"7c2a1f2b048cad0c92b6efee620299a26d09fb1890b631077e6c2fd43a00b488","impliedFormat":1},{"version":"07ea97f8e11cedfb35f22c5cab2f7aacd8721df7a9052fb577f9ba400932933b","impliedFormat":1},{"version":"89d38c7653de0c74c3752f77ef50472e158fd37304c58dca3ec3ab0e03ec40e7","impliedFormat":1},{"version":"b646e3d74123131d98458615cd618b978d38670f5d15e87767eb7466b04017bb","impliedFormat":1},{"version":"5461f831e6afb7c73eb8216500d5670f5ee89644dc7835cb161825895776cf8b","impliedFormat":1},{"version":"ed6d3024f7812bf10119bfb0e14ae6ed13b4080caa08a6f8704ff1c3fe78f919","impliedFormat":1},{"version":"cc0e834c8cb2733d07941d61b178ff4600bb98f3a85082a5e2f20728f1029a96","impliedFormat":1},{"version":"bcd3257c5486e9c4572ede5089524f899824dd86fd910f5b826d6838019b745e","impliedFormat":1},{"version":"4330d600b00d422bde3bc445365b3724a13ebe8c1fd63b79ef9889c01932c445","impliedFormat":1},{"version":"bf22ee38d4d989e1c72307ab701557022e074e66940cf3d03efa9beb72224723","impliedFormat":1},{"version":"39aa4e7fb238e24c127b6b641dd7f20eb0dd99a0a1d994d6ff1d82a6ac251db2","impliedFormat":1},{"version":"1f93b377bb06ed9de4dc4eb664878edb8dcac61822f6e7633ca99a3d4a1d85da","impliedFormat":1},{"version":"53e77c7bf8f076340edde20bf00088543230ba19c198346112af35140a0cfac5","impliedFormat":1},{"version":"cec6a5e638d005c00dd6b1eaafe6179e835022f8438ff210ddb3fe0ae76f4bf9","impliedFormat":1},{"version":"c264c5bb2f6ec6cea1f9b159b841fc8f6f6a87eb279fef6c471b127c41001034","impliedFormat":1},{"version":"ff42cc408214648895c1de8ada2143edc3379b5cbb7667d5add8b0b3630c9634","impliedFormat":1},{"version":"c9018ca6314539bf92981ab4f6bc045d7caaff9f798ce7e89d60bb1bb70f579c","impliedFormat":1},{"version":"48a2488687e14191e50930fbd59058638af6c35c7432ce99d87b575e566816cc","impliedFormat":1},{"version":"b83a3738f76980505205e6c88ca03823d01b1aa48b3700e8ba69f47d72ab8d0f","impliedFormat":1},{"version":"01b9f216ada543f5c9a37fbc24d80a0113bda8c7c2c057d0d1414cde801e5f9d","impliedFormat":1},{"version":"f1e9397225a760524141dc52b1ca670084bde5272e56db1bd0ad8c8bea8c1c30","impliedFormat":1},{"version":"84672c9c04b7196492d5ae49eeaff8a7986415898a276c73c0e373e05f99a045","impliedFormat":1},{"version":"717242c9a1be7039ea5872293a9acadcab0e578221f9523d1534267fec31d60d","impliedFormat":1},{"version":"25ce1a008a22dde9d87f246fb6333326ffa25e97638b0fb089bbde98db162038","impliedFormat":1},{"version":"205782c84bd8fefaec53ea1fd8f39f0c24edec5646efc3e0ae3f845e3c25a64d","impliedFormat":1},{"version":"0a59618dbe7d0f908d0f3048ea531aa800efaf90333e9c35c93739c58e5ca690","impliedFormat":1},{"version":"d49ebb15bb1c271dc76288224b63cc44b3f02c79a1d948e337c18adeef90cfba","impliedFormat":1},{"version":"8f74411dee5fae6beed6853c3801c341a4450f8f96584fdb3ad5a9c0ae53fbaf","impliedFormat":1},{"version":"aeb0397dd2a327e08ca26c4c994cc1b717760fe84875a26a68942afa962335d7","impliedFormat":1},{"version":"3d3ae6e52db463bfdb75c6b2eb072347f92e69729121df5a3f483357bb1f5e87","impliedFormat":1},{"version":"b8f82d41cea56ff946edaae17a48632ab0a751746acedd576e4e2f1c549d5897","impliedFormat":1},{"version":"67438cca5c7a20da8da6a6b036d1e955a17a649c9e7d4b6d501d99eac545a632","impliedFormat":1},{"version":"17ad231ed3910a740c20ea768f883b1abfe34b5fe5c2df1ac667a8cc97a0f616","impliedFormat":1},{"version":"cd64480a054428377936c0f548b20efbb4ef6fd1ae8e7ad2d3056cebca826e04","impliedFormat":1},{"version":"e5857f849c8b5f4ba9e68bc5db841033aec581307b89fd4488ab9618d17899a0","impliedFormat":1},{"version":"f6cc95eee2945cc5a2442efbbc65c701c64ae728d3214db9706ab93b73e0ab40","impliedFormat":1},{"version":"9a0ed58ea04720cb86e0612ce945c47d60fc08d99d2692d6599aa6dfa795f761","impliedFormat":1},{"version":"94843041f5c123ffa4b2a65c9d48a702dc0979f432e87b3dd20d10b8c2e18f7d","impliedFormat":1},{"version":"d8e58a2f260417ee50ba8617e9cfbff33a60dc7daaeebb0b45ee8bbb481ab69d","impliedFormat":1},{"version":"0b8aeefbfb9457c77539bab00cea9b9a5cec324a25e78dbfc3b7a4b9df916a63","impliedFormat":1},{"version":"70f7634df4057b4589a7237f8f5bd4e9b4a87090e3a229daca6a77b0aeeedf74","impliedFormat":1},{"version":"41ca214cf922678daa4dbfbe0f72cc9ac9c9858baced90041a64d4b29430fb25","impliedFormat":1},{"version":"e6872602b3df829d8f917a3041aa2d6d65cfde2bf02c881f0a623139aa30771c","impliedFormat":1},{"version":"793b9f1b275af203f9751081adfe2dc11d17690fd5863d97bd90b539fa38c948","impliedFormat":1},{"version":"beed155a5e1afea3e1ef98c6683c50c1847289aae642311d4311b6e593a5244f","impliedFormat":1},{"version":"4d6739cdb0281c821c4b32c34fd27bd645f44ecb1d94faeef3778ba56f48e849","impliedFormat":1},{"version":"a089122411d0b1ff69f29c69bb6508f7b2a05217ec4dc59cfbf4ca94438eb335","impliedFormat":1},{"version":"fc2a37ee713244cb7637c234c7a5f9e28a528f9c57900b0d2115582c5b1ca1fc","impliedFormat":1},{"version":"9defec48792eb36d98b1f70a0f40f774e3780ad4e425b0d8e58d50c1f8369305","impliedFormat":1},{"version":"641c352ad84e531b132e64b265a465268fc3f1696614167b09a06de38f1ac970","impliedFormat":1},{"version":"c2255e6161b53f68119153eb8934826f88598eb16497a8d8317118a6b063d91d","impliedFormat":1},{"version":"e2cd39ab95a65eaee2da3cf1f7e28384292700b654f51577c6a5ce8cddbf13e6","impliedFormat":1},{"version":"f55960e83495d1fab2114dfa2d736757c420ee09eee7c2046c9ff437b467e4a8","impliedFormat":1},{"version":"f747de81c3649375ee6501e9d94d8fd67a71917e125d9a317c90f11011459659","impliedFormat":1},{"version":"7faa2aa6965c47bb2d6f5b33dba91cb4f70a5719e40273cb757c9adfcd72da41","impliedFormat":1},{"version":"815ea6ee026297c44af5d9b963c012b0da38cbe3d3dc830d5ebe05079317cad1","impliedFormat":1},{"version":"eccb3963a8d27716d653a4caff025f7c89c1245832fe6870ce24089405b1a63e","impliedFormat":1},{"version":"c44eb4739aa8f1e4214aa319e9cca0cf425925f89e37152ceea0875ef04dd46d","impliedFormat":1},{"version":"cd880a1c05e7c24d40aded27556b90453088638c9b6e7220f290774c86d71bd1","impliedFormat":1},{"version":"420002e73ee299efc12baa093df460f6a66dce91dd7d0a2b0e3fd01245939353","impliedFormat":1},{"version":"0db041c0ea399e13a1fe96dd271f45c696d3d27a56265e90d9218071b2500d2a","impliedFormat":1},{"version":"b061bdeff41c41b184f19dfec83d14833b0b2c06bd9a150e9e4e9cca17fa7544","impliedFormat":1},{"version":"a954ea4697209119cf5ebf33f510954edee0425f693b59b6b9889b9657137b5c","impliedFormat":1},{"version":"d1a0cc6bba7bbe5000160a783f1bb0dc75b0e1f542e2c5e7d6f50a9f689693d5","impliedFormat":1},{"version":"f01094b6fe8a646ff692619f5f94bfce776ca4883cf263f4e09163cb6ef3998d","impliedFormat":1},{"version":"6aac2c5ca00378e4d1421a03f614643dc1e9fd02279257cbf2e8e2a713b00907","impliedFormat":1},{"version":"254510b0a3c2e04f55e98ae89a6aa42f67852c192c3502b3b8488e578b21c9d6","impliedFormat":1},{"version":"b75be7355591118207e7f24143b27a860da4043a1950c746e034313d9ded4137","impliedFormat":1},{"version":"da15f699f56ab6a37b4eca73eb14a356f5d175d979f0c8197d325d5f23c91bd6","impliedFormat":1},{"version":"066658c82798043c6858e95275532be5db2a7250171552ae8434ab2f7bc1fbdf","impliedFormat":1},{"version":"d8c3b3c16a4a8656dcdd394df0df07d3149816cb96a89935d62cafe4dd84009a","impliedFormat":1},{"version":"e982879e6ea8ddf8899f637e639bc225996a729e07f068afb120d32fb4feebf2","impliedFormat":1},{"version":"94616e40e31224cb261a78c5cb96fd3f65f9ead7052eac20fc6c975714f3840c","impliedFormat":1},{"version":"931574e125523649902eee2db57c221a1b36417db4f2c4665bf38ce2170ea06e","impliedFormat":1},{"version":"cd0c8c8b5002ec4cac9e8a5e26d853549c5c446a670fb375b9c052b345fb5da1","impliedFormat":1},{"version":"7d27796c034612b6016db97555b84f1005dc3d55e2286379d48ec8db475b6430","impliedFormat":1},{"version":"0d59de214eefc455e13a7f747c011729ee76f1554fdef55554ecf4bfeb20568b","impliedFormat":1},{"version":"e16ecf37f6f2ca79ff19ba2e4c3697ecd9d38b8d01bf6682bc4003d0d5719651","impliedFormat":1},{"version":"845154327584247966f7dea7a3e4960906b7038cbe23ab43fb198539ca12204f","impliedFormat":1},{"version":"cce34c68dd760a55d002eaa02390985f4aeaa39786679f54ade28be6229792e9","impliedFormat":1},{"version":"1245b8e5e176fc21ced594f675f3c8504eb0d026378fdbf69720df8d26a36d51","impliedFormat":1},{"version":"16a83ea1aa3ec1565c0a5ab8f19e561705b9cf4906ac3cc8ad0241005ae9220b","impliedFormat":1},{"version":"162ffbed80dad8ce0cf81c330c88dccaae85425fb457a6afcae0110419bdedfb","impliedFormat":1},{"version":"a85d6e7924c263fdb7a9e28a578401f2f96950ff9fd0e250c76f25de5ce3b9f2","impliedFormat":1},{"version":"8d5531ae448e6ed9e35170d5abfea411fadd991cbebee85f95f0462ae69f1a8f","impliedFormat":1},{"version":"57947d16b34a3811f854965fe668e81ccea9dd6321e412ea1a2c75d4fd2619c1","impliedFormat":1},{"version":"e9d4bfe42849ba995ab572beba5f30bd484e88f9441a4eb223a54ddec0c4d490","impliedFormat":1},{"version":"0c61d4bd98466fd7fbabeb25f4c0005bca7afcc116a01fdeb5e4fccd88d5d26b","impliedFormat":1},{"version":"4bc4c7612f5cc6298b01f76f7a21674181ae6e199a0b07c518107c15bde32344","impliedFormat":1},{"version":"64ac258ac5b6438953854569b48c5f5fa297aa9ea9f98b9ed00744281ae6e6b2","impliedFormat":1},{"version":"1e2ef7ca205a4cfc4b4831b826a233841a87219eea0008de0211c43d8a265e14","impliedFormat":1},{"version":"548f56153b3ffbb32200800b8eddfdcef493e8f8c822a5c9ba261f8d25cb556e","impliedFormat":1},{"version":"b3b60b049eaf9d26c4b25ec2b18ce5256b85b7b4da159321e1c1636cc07107b5","impliedFormat":1},{"version":"d7a9f58ab3377091225b27e89f1beb1a988fdfeb2d230402392140ed21c4acb4","impliedFormat":1},{"version":"7a1dd1e9c8bf5e23129495b10718b280340c7500570e0cfe5cffcdee51e13e48","impliedFormat":1},{"version":"089a6395595f1cc7935914a2cdd1c549df5fba54a1f84fc676a64055158e455f","impliedFormat":1},{"version":"e2863ddf5702451fb356d28648eb12e132713eb6497c9ca1e50cce108e5914cd","impliedFormat":1},{"version":"b4d3f86369d7ac2286243f4dfc9dd7664491bd973e5442c1ec893bf7e1a26d1e","impliedFormat":1},{"version":"9982c2cc3c68f4b1aa3a9c7fbd5498ce19a70e1fe4b836926bd66424247001de","impliedFormat":1},{"version":"198f4773abdcfae0a973a27288ca741a706c18047967a23acf06caeb9f437a66","impliedFormat":1},{"version":"de37265369c848f4700af0f9619f8c166a5fa609eab6cb29dd2b6abe9891d676","impliedFormat":1},{"version":"a17c86713faa7fe77753013fdff24b0252863554da3dc55105558a725e2e770a","impliedFormat":1},{"version":"670f447c640b5d8736a1de907fc5ae441f4466a0d90814faf2600b30298d71ca","impliedFormat":1},{"version":"1cf4c4a0243a7309384eb53e0e5da641746db53a1307c13396549682f3ed0967","impliedFormat":1},{"version":"6028f04ef024af08b98625cf258805283104ad75c8a2c3d42e1dd10bd6ced591","impliedFormat":1},{"version":"7f7f345bde08e3b9cee1ce46ad8102f4b6ce96910b544a1a443f56e14a0f76e4","impliedFormat":1},{"version":"48f670079e435a3b12648e2030b26a5ac8f9a3fb54f5085ed3a432caffcec30e","impliedFormat":1},{"version":"435d25a5b10af2beeff94f5e4affd3aeb5c47c734e562cdf4b0de85628282201","impliedFormat":1},{"version":"7e2c579409d82f952177a0e574c1cd0de789e0a89a41f1a45562386f25ce6a76","impliedFormat":1},{"version":"884aab8c07224434c034b49e88de0511f21536aa83ee88f1285160ba6d3fb77a","impliedFormat":1},{"version":"130b39b18c99e5678635f383ef57efaa507196838ddabb47cb104064e2ce4cd3","impliedFormat":1},{"version":"2556e7e8bb7e6f0bb3fe25f3da990d1812cb91f8c9b389354b6a0c8a6d687590","impliedFormat":1},{"version":"ad1c91ca536e0962dcbfcdff40073e3dd18da839e0baad3fe990cf0d10c93065","impliedFormat":1},{"version":"19cf605ba2a4e8fba017edebdddbbc45aea897ddc58b4aae4c55f382b570ff53","impliedFormat":1},{"version":"7618d2cb769e2093acd4623d645b683ab9fea78c262b3aa354aba9f5afdcaaee","impliedFormat":1},{"version":"029f1ce606891c3f57f4c0c60b8a46c8ced53e719d27a7c9693817f2fe37690b","impliedFormat":1},{"version":"83596c963e276a9c5911412fba37ae7c1fe280f2d77329928828eed5a3bfa9a6","impliedFormat":1},{"version":"81acfd3a01767770e559bc57d32684756989475be6ea32e2fe6255472c3ea116","impliedFormat":1},{"version":"88d0c3eae81868b4749ba5b88f9b6d564ee748321ce19a2f4269a4e9dd46020a","impliedFormat":1},{"version":"8266b39a828bfb2695cabfa403e7c1226d7d94599f21bea9f760e35f4ca7a576","impliedFormat":1},{"version":"c1c1e740195c882a776cf084acbaf963907785ee39e723c6375fec9a59bf2387","impliedFormat":1},{"version":"137f96b78e477e08876f6372072c3b6f1767672bf182013f84f8ae53d987ff86","impliedFormat":1},{"version":"29896c61d09880ff39f8a86873bf72ce4deb910158d3a496122781e29904c615","impliedFormat":1},{"version":"81ce540acef0d6972b0b163331583181be3603300f618dcd6a6a3138954ff30c","impliedFormat":1},{"version":"a82f5ba70d26e6ad9d432ab7556506d807c49f35a44af99fb8054004220aaaa1","impliedFormat":1},{"version":"5b8fe7a2087f6c15c4b5fc81d91c6f3a500d903edea129097f3d10970678427d","impliedFormat":1},{"version":"a7d604e14f80aa0c4d90a3af165af46e9a0779d744794a26f6b60e165907dd38","impliedFormat":1},{"version":"c06e1d2c793b609908a9843d4adbe5e39dfbfd696679b76fcc4426489dadfb3c","impliedFormat":1},{"version":"953a1c8c17fcbc8d4adc60912a7230376a5649600352dd34f7424ecf0dafd90c","impliedFormat":1},{"version":"3607dcccaccb94d625e56d1fcad603e065b0beeb9fa1373eb8f0f6b43b27eaae","impliedFormat":1},{"version":"381698d7719b352cf9ed1ed3c293fabfccae266ecdfb226a3c65dee594ee413c","impliedFormat":1},{"version":"5d4045cb7a3635d592e15ed063c702b0f7a49ee85fbb19bc0b51cac33de99b6b","impliedFormat":1},{"version":"a504acaeee6cba00ba788a73694de803b47f9d7d17d85a927812edf040bc58c0","impliedFormat":1},{"version":"9657e3c276b8a724a00cbd6aab8407b90bb5dc9ffee1376a097969129427d405","impliedFormat":1},{"version":"1f5090e0910c6435f2532eb943bed34004ab51c91165fe6d064407a3d44c215f","impliedFormat":1},{"version":"9831da94e382e730f7cf13a3d518de07fe6dd1a23c32f388657fc82eb8d1e378","impliedFormat":1},{"version":"a0e61ca1bab804eb5da882cd9c4ad829ad4457d2f7b87ea0e96cd9769d1d15d1","impliedFormat":1},{"version":"8b30104d4a7b2dc41cfe83f1ba0050d0436f89d08a634672fc3e75e0c4f9c699","impliedFormat":1},{"version":"295a5599fc659a6d6539a18de5f5cbc712111eeef7786a881775c8fba082a84c","impliedFormat":1},{"version":"62233ea74c1bf9917eb1ae257b912e7680e8aa7c373568eb075fc3e46e5c9d05","impliedFormat":1},{"version":"ea0ce17b66801f32b720210a9a6b898db12349c9ac7ad70edd09709794d4cebb","impliedFormat":1},{"version":"3ceacca134347239050f906de965496198bff2a7f96c311dffeacbe4cc5a39ac","impliedFormat":1},{"version":"d96a04630660016bf126c92ed0daf1c8d6c3a77fd8b6d241553126d1f1c4caa4","impliedFormat":1},{"version":"d928a3e7ec8967d325f633e26dde99086de47bcc6bf7835abcb1b60b20f99362","impliedFormat":1},{"version":"f29b1c62547344fbe3e02054eb62f793016d3855872497dd351f0c17426791e5","impliedFormat":1},{"version":"7438e05db16df5f5c47e593ef5cccde5666cd62b73da4b5ee521bcec11039dd1","impliedFormat":1},{"version":"c0ca1b2fd8ce75709f4b1f5df7a464599c28a9c46e486e71b17a35109f796090","impliedFormat":1},{"version":"17d716b12c230355d207d8b464a3359e13041c0cbb94c243981618e279f57670","impliedFormat":1},{"version":"08323a8971cb5b2632b532cba1636ad4ca0d76f9f7d0b8d1a0c706fdf5c77b45","impliedFormat":1},{"version":"84ed978ec09bcd9acaa479aa6fa307cc7eafcd9759ff0fa5f03da9499fc1a1a7","impliedFormat":1},{"version":"e243f7d314cb8d05f393a5dc9904b3bcbd769ac082596402ab197df75bf582bf","impliedFormat":1},{"version":"fc55f9f6c902e967e7d79f2b264d3bec205a1465b1274fbd38e733f4f6cc8718","impliedFormat":1},{"version":"6a29284c78941d22c7e2590a29716dd98036acd4916a81ca4520987032cd06fb","impliedFormat":1},{"version":"21271850a109497fab5a7fe9fb2c49b4d21043e0d89563834ff79cc43a29e2fe","impliedFormat":1},{"version":"d4f2836bfaeb0709f90205f9dbfa8e8b56b3c5757793cb1cc6d2ae68e709f301","impliedFormat":1},{"version":"4ceec69d8052310237a3da9c7d5b1b13a9f6346c1b6dac2f7ac3c58e2f1b43ca","impliedFormat":1},{"version":"9a11bfcdfefddd302ba9afcdb7beb3cbc190a4d89ad1b35fca3fea7aa733b21b","impliedFormat":1},{"version":"e997d5735fff184787017ad34b865215f9d83e8ae82f5464eaa6a976c72ed35b","impliedFormat":1},{"version":"f71d335412ab3d5d8b5728127ef1a0c656d6bf9fdd589f0397cd66eb5e3478d2","impliedFormat":1},{"version":"6f4c9b810a4563c63abe7903507bb10231f2b5e9954ae91777245bfd249dd06f","impliedFormat":1},{"version":"ae0e9a346e3799e48ca1ca02ca9cc9dcd22754ac16aa290c62ffb3a2d0683072","impliedFormat":1},{"version":"8300c7133c1ee8576d1a0b6551a932fb22b0ea4a24954e812eee3a7cca473348","impliedFormat":1},{"version":"49b34dd82b1a9c7fc1f6b7d54f124fa058fb2dab6aacd1cb22df2d4f76ab4de5","impliedFormat":1},{"version":"2c1da7f76b303c578f082f8e3234d0c204775db35f6659a0c89106913373e7d3","impliedFormat":1},{"version":"d69e23b46f816ae17855a9b7568a52652393c037311c0949de7353f62320aff5","impliedFormat":1},{"version":"d72ae10d4b0c5d835bc0d013a9fc21f09da408ec1c5356772a347c7fae7b45c3","impliedFormat":1},{"version":"9ea1cfc084a02bcf213c927cb86859cd79ae0b67f9d0914bd7bf2c0325a60d4f","impliedFormat":1},{"version":"a4b779037869ebd415f31730ee6ae0ee3d7c75dbc63aec37c8ff03ca7e666b24","impliedFormat":1},{"version":"475e411f48f74c14b1f6e50cc244387a5cc8ce52340dddfae897c96e03f86527","impliedFormat":1},{"version":"3683e4be4a3487e8484523b8b30236dd895cf27aa7c928d09041deb3d3cb10b8","impliedFormat":1},{"version":"87c32492d0a0db641a447460d61340d9ca3e8bce71cf8eff770ac64315f56511","impliedFormat":1},{"version":"4bf3261ec9c9a8ef5d61beb70e88d1d62200d338b3f0245cf6997dfdb95d5056","impliedFormat":1},{"version":"cfebb38384cf30d4cbe056bfb8bb8fb7c36fade0d397d6acc31cb3e7f0113b60","impliedFormat":1},{"version":"a462f4387eafc88332435d4d447b2c5082f5b94fe0f37588d68ca69a07fef14d","impliedFormat":1},{"version":"0bace41ff335d4d4216cae19fdd3bab324ff20a9f4b7192ca2af0c3445317b69","impliedFormat":1},{"version":"4fa722f3ebd7373b836dfc85858392bac172c124408af3dce59dbceb016791c3","impliedFormat":1},{"version":"2bdf2a02e826841c62ff484aa26834b69bde58255e5d0bc72665a2a1437ae5d8","impliedFormat":1},{"version":"e0e8f3ddc7dd4534e14f4545879f1661e4fd0dbfe8efe44492e5bd727134b43f","impliedFormat":1},{"version":"9881cf39fc06bfdce39a1fcb20d092784c706515db22da6f5364bf87b791d8a3","impliedFormat":1},{"version":"e14bec6522b7983ec572e4ae691db068d8cceceea1d055fcff0ccf375ec7bba0","impliedFormat":1},{"version":"3880a3c854d894e42b4208dab66b31a824f331b7e7ce02ad5cd3524b91d50329","impliedFormat":1},{"version":"563994cf3d7dac6287a0547575dd31f216c8e961621565a3b3ed9609e00a61f4","impliedFormat":1},{"version":"d7722aa0ae9eaa7c68996d2df42370e79d0d2f452f232fde7b84fac837809897","impliedFormat":1},{"version":"0c44333641956144158a42cf9ef1f86cd08451cb7d8b4475739f27501a91a02f","impliedFormat":1},{"version":"22fa7366064d3715ece6dd711fc74b064dac4347d456b1cf1619b2c31fb50008","impliedFormat":1},{"version":"d6f74fa400c9efbd1e5cc84cd5e56321642ae53f2af3af9984370a745c8cabb8","impliedFormat":1},{"version":"ca2ecd087b0217a958ec48c8965cf2436747c9e92f13c19dd0a99a7a7fe8ca73","impliedFormat":1},{"version":"a2ff02b602ed97031fc2109fa488e37c812541eb96dd85c9905196bf3645dd53","impliedFormat":1},{"version":"33b4bd8f2e6fb9402d9db60d133faf5e0e13edd94a1116efd8d4646b73f0412e","impliedFormat":1},{"version":"d9711a9daac6fe95073d8237a9fff8dc7678300572f0060f4f5513de4f64ae8b","impliedFormat":1},{"version":"746afda40f0268dfa53a7e95704dfd537bba40b03b968fa214548710d0bad790","impliedFormat":1},{"version":"1e18c1b79b3f42eff1e85ad484bfac293394315bbc3f1c6b4a66c2950d86a963","impliedFormat":1},{"version":"a9f2b226947046d64512efb7047aefa5432f7cbc78bae5b0313aa255780af5ae","impliedFormat":1},{"version":"5095b24adfedd6d228b26565809249dddf77a4184d5157811d55fb33238c9fd0","impliedFormat":1},{"version":"cd0f2282c3d329bc5250ab377d99bf9f29b09cf0d69a9fb906515c507fe264b3","impliedFormat":1},{"version":"4b2ce978985cbdee9d41972713dc68996a8d1977d8e637b97ec6a81545c7adc2","impliedFormat":1},{"version":"9505e240d1c21aa38f45825abe879cdc9627a67033f85a6d6453fb7eaf632830","impliedFormat":1},{"version":"46ce6bdbb0b03578240a094ac40b23045b644642b6814e8640b4a37d7ffd0404","impliedFormat":1},{"version":"4ad0e9a375f9be40a02345c1ace8d0ad48639974f21817f24e8406a53b3019db","impliedFormat":1},{"version":"594c24b2b4919491f8178a5065d61cdf12e4a75ca888c0170b0b22951120d39c","impliedFormat":1},{"version":"ab6f3aae409771d56584dbb1b0bb8140c25b9a5752e73ffa2ddd9d64027556b2","impliedFormat":1},{"version":"f064277a85cabab71db9d8130fe45919ab6abfab8977df7bd489c286ab2d9fc1","impliedFormat":1},{"version":"ad6367467bc55e6a7b8f1195aa29866fe244b35f83127b2bab6e714dbf18d44b","impliedFormat":1},{"version":"43ffb0a90f6a53eb5b9b964d4831bfd874718b463378f6b73ac86964c5511b26","impliedFormat":1},{"version":"8cafb9feacf095211739cd5ea666b5cb500a24e9a2da00e967d490446d643d78","impliedFormat":1},{"version":"78b529f4254781f3f1fc5d9cb706e920ca03a9bb1d91262d3252a57330c687e9","impliedFormat":1},{"version":"1d1b70216c2e93bc15441e2aa565bd6371e75a7d36a9444f2cee9e60bd31c8c7","impliedFormat":1},{"version":"4039e8af0df45e32f83016f639b67b501a4755dc8b0fc718a4cd796454958f00","impliedFormat":1},{"version":"5e3ef7583a7ef2fb123cf6ffb4742f6b292b2c67dcd3f315d1815a5a9dca51f5","impliedFormat":1},{"version":"bfcd76f1a95d7adeb0769f24e80d9e5628e9545e12db172641028907971b6ba5","impliedFormat":1},{"version":"95f26e134cf46f4c2aec8c70a79dcbc00c5811bdc9734bd3f3535fa63f8448c3","affectsGlobalScope":true,"impliedFormat":1},{"version":"8efc466b92ca8036ec8578c814530df2dc73d7a8d2c8fbcffe1041fcfe25ca13","impliedFormat":1},{"version":"150be7fa3a19b2d4c25b4de1ea4c614d44bf62b3601ec9b9fd7fd8ba045aabeb","impliedFormat":1},{"version":"44fae567f65cd8ca1c887101cd998855e048097a8554b35dc58196d768dcdd77","impliedFormat":1},{"version":"4a0f10224a77c522a4bd211ebae65d1efdcb7cfae949343f11f91b2c63992341","impliedFormat":1},{"version":"ad456dbf29dcfbe23a6228df5611150371e02115be680dc3682e4c8f62ef193b","impliedFormat":1},{"version":"3d5b4b1ccfbf8b3672f86a468ce9aabb2a13f2da3b07b62c79d19fe9a270c531","impliedFormat":1},{"version":"3b914f292b5ac89f97c9be1754593bf48cf4acd824e444fe87ff6d2714da2460","impliedFormat":1},{"version":"87cd3b583b8523d3314ea6e7dae37e4234ea67cb00d549f57f0ea05742c28cac","impliedFormat":1},{"version":"976b3f92fb6eaf793ce2574b7f35b026f3f4072c3b643916b333596097c026d3","impliedFormat":1},{"version":"cf979bf8040c94de48eaab36ca5029f9aac1596d81f7964a3ff0fb69193e2a48","impliedFormat":1},{"version":"793dfcf3edc892a6ef4ca33d1208eb44937c4066ea8eeab5018eff270d768e2b","impliedFormat":1},{"version":"636a7af967cc349aa2868c80114f7ec8d939fd2ad3be6e3d563f0e99779a0253","impliedFormat":1},{"version":"8ba8078278f99db563f7d5fd32625aaab6561d7e752adef6b6a6b562f0d75b68","impliedFormat":1},{"version":"0945db317f1a3cf50bed6fedf436f1261967a111d10aa145ac99f80162ee28ad","impliedFormat":1},{"version":"17733dac9109779bd96846e378d8276c163c20992435d39857f4cb80acf3ecfa","impliedFormat":1},{"version":"dd4e45e92219774a02278936fea8f004b15140daf7f84f087ce88357222a5d14","impliedFormat":1},{"version":"576737d85b5a7401fa5bb91c3a7ed6be1a8a4d6dec85cf4c2f317dcbd7674e8a","impliedFormat":1},{"version":"3b4e239e7fa1ce1a9a19e6eea8480718fd8af22d87ae85516fe98ae39254523c","impliedFormat":1},{"version":"528f7fc7357e9e4e7301191c76a5f7d7512f372c6fb0298298e7cd95ea983a9d","impliedFormat":1},{"version":"b9e7a793ed9a6cb586deec4e4adda2381fa529310a05e48bf565a9d9a5a42e0d","impliedFormat":1},{"version":"745fa90ae8aa880f5edebad2b7d32ad144a87bc1570036dc1b9f9a3a907f21ae","impliedFormat":1},{"version":"9e5574fcbfff6469aec16eee34653a64c058ebe08482cc194bf4c0f44df0ebab","impliedFormat":1},{"version":"82584dcda20cad69e9dfac87dc13c58100cfa787264bb5755b630d5af8c92d24","impliedFormat":1},{"version":"83e306ba39e6b1b8f14b43eed4366537701d7ac7eb49d935af3a684ec90cbf6c","impliedFormat":1},{"version":"0f1ddc5f4e4f6dc80d4cf42db1ab763711b4d039dd6ed5596e8d4e59c023f6ec","impliedFormat":1},{"version":"e5bcf5eacaa41645bb96db21d880397950154d5cea99bdb86e5477f6bc98cfab","impliedFormat":1},{"version":"a363489ca90c8a7651e2496caad66ca08e483ea8efa1da09d5d210bac4411e9e","impliedFormat":1},{"version":"525666eae13d8157c3ca10c4eb21e579a8d46d3a4b4e18f47b8b9f8137432f75","impliedFormat":1},{"version":"b0f9ba2e1e9314a8d7251d7f02fb5dea4ca7cd4453b1146b032d4f271ce8a22e","impliedFormat":1},{"version":"c740740cc726969469d989520f4aa3b259433faa790110e27ce175c3c3a7ccee","impliedFormat":1},{"version":"c642882e0022ae2de2ab43b0eda353db8c7cc0c64a7e2aff462f30b3f4e56fa2","impliedFormat":1},{"version":"9401cdaa5baed3cbb4322d55469ab5744bdb0dc690dd24742409ded7c047accb","impliedFormat":1},{"version":"55f787a0a0617a58cdbab25c19d43d5b1e1107316d27215e511bde9394034cbc","impliedFormat":1},{"version":"8ce3b8e5e7ab12fc4b7df25ceafc9bd8970215280202a6a42f4f195c541fd914","impliedFormat":1},{"version":"95504762d69bcdf861bb8cbfa10e87480fd48cd2cad7c73b5ccff7f47b7383bd","impliedFormat":1},{"version":"2d3e4f09946908e36968ae63e1bff5f9ca47ea47a59d59ba43913f879068eb0a","impliedFormat":1},{"version":"0174ebf1294e5c637b39d2228cd9faf349665a34557f90e58996768d4abea839","impliedFormat":1},{"version":"a876a459178855351624ca2f9a8697a9df8420cc9decb0d80fadcdc41fb4743b","impliedFormat":1},{"version":"c3cd71b9d52102e13f62b0d89dd877618c581a5334371c48eb33bdfa388f55b3","impliedFormat":1},{"version":"1b395deccb9d7434d42e3595fb55ac8ca7c39e90d1f4b78dfadf70227424f0cc","impliedFormat":1},{"version":"275d6a7fde0822552e4e7cfbdfb008e300df18da6e728ca464b98f3196fd4950","impliedFormat":1},{"version":"6d919d36ad7c4bf0cf0bd51bc0b965a35ec524b470ef5f1f1efef980dc2304e3","impliedFormat":1},{"version":"0276d354e470c4a12e33a6035a8da4c71fb8121107c15217ba1ef79055657f80","impliedFormat":1},{"version":"8d7624d0260f9be4a369ddff2017300ca91115684c014359e1c2ece39e58c5bf","impliedFormat":1},{"version":"b97b952a834d04b3bfb45c217c7d361bda32f02d80e09db2376cd006e9e9ccd9","impliedFormat":1},{"version":"ba8033d90121f6f6f1f1451fde6e0d89a340c7f18ef88ee7b1a5657133e25399","impliedFormat":1},{"version":"4472b77536928b35a6dbc0aaf7863790d1a694885d15bea8b9d11317609f2a4e","impliedFormat":1},{"version":"6dd42d5a5e2b027ab3a036fcfe73989b6372a366e6c0fa8f13031b8634765d77","impliedFormat":1},{"version":"c86347e8a98e56461c34090f9620c02830c966bba007d05102d058b25b445486","impliedFormat":1},{"version":"3748e73e23e2380ed69df941835d656dc16ab2ddceff5141d62f7181b7f03d6e","impliedFormat":1},{"version":"d7a3a5ff54730b819250c75c2ed9954c5fd8d1941867675040cdb25afb06956e","impliedFormat":1},{"version":"178332460cc1524bdd39caee3962d73cd65f3b45dab9d2977fc76cc7c3de902d","impliedFormat":1},{"version":"3ce036ce49d7be51782bfe99dd347d46dd6363f655a0a360a5aa1558db3325f9","impliedFormat":1},{"version":"9ff2a289cd7fa88114aa2266ee6f9d0769029403caacb7d6bc12188a7f1bb0d8","impliedFormat":1},{"version":"218e3461006bd449a9c3e6dc45dc0d6d135729d66589bbedbaee8bd3606042ae","impliedFormat":1},{"version":"7dd279a8f45cfcd1d15abfc1c1ab9163ca2b528a57af59bef70c1292103d4103","impliedFormat":1},{"version":"60f1c3db3ff000ac00af18f1dd077c1e6f513e146c0b75fb6842c5bc1ac326f7","impliedFormat":1},{"version":"2a1e45a03f73f6ef2bb1064f846abe13def5da95768dfe55e053434df557eba3","impliedFormat":1},{"version":"3e2e02fd849c64adfe90e18a7a685a1450529bac69fe31c6c1eb5e3ebc4253d4","impliedFormat":1},{"version":"cbb5fe2732baba49f2791d017d405034405d44780d2f53f624d80db73c0eac27","impliedFormat":1},{"version":"0a48a263f40c63d76cf3f0264ee7e80cee5bf1ba35d9d20a7113c2644cbdcb60","impliedFormat":1},{"version":"19540da60c08ebb434f269b0956ad591fca77371b421ecaec389a663c24f5ed9","impliedFormat":1},{"version":"b3c5dd997b89919cc63998b85bb5c8a1d1e6c1de1c5dc0610deaf9038535ad35","impliedFormat":1},{"version":"1b9c3d65d9b85b8f92fe2ccff604407594141d7da0ce0f86b2f35e8ab6062c4f","impliedFormat":1},{"version":"ac519e9db858d1c229343983dc059231e49eaf95f9cc9b2e1c67ec5c69896643","impliedFormat":1},{"version":"31c85bec364fa28c449e9604dd13818964ad044d367e6780144bb91d1287aefd","impliedFormat":1},{"version":"7d47230963402516f80d92baf7aa763d317b24ae05d0f12894e0df02eb652e95","impliedFormat":1},{"version":"3c8f9dfde460135ef695cea7d6c73951105ed36d2aff45b3f2f506ce8624b0ba","impliedFormat":1},{"version":"2a4a9bbefbfece5054fa69664206f66f39856896d3decb1c302304ea00ad59b1","impliedFormat":1},{"version":"d5fa8a97cd81ae633ca17349a0a7b9940fa47cb931698a348fc7e98ad2414681","impliedFormat":1},{"version":"ad5a7684bdf84b6afc6eb0f3dfc75e863a29fd179e9c19692b7a786089b3e004","impliedFormat":1},{"version":"a910850e6ec837e2dca139bfe7e769e032855d2aafceb3c6f9ecd45cf0876ff6","impliedFormat":1},{"version":"862ef53e3e6ec43f73d15f0a5c113dbc6b95b0d2d757023e39e8db19e94877bb","impliedFormat":1},{"version":"e22fe5283f65c62cfab32e9cb8986dd8792a9044bc5d7dc4f49ea6c3c1ea7cde","impliedFormat":1},{"version":"03ded9020695461eafdb52ba5f2ab994d0bdc85c681757e1c8e1a7f6d654562b","impliedFormat":1},{"version":"c31116ec14a99506b840afbe5a54e41177811a39af2ef1b8bec4fef5b62a8e78","impliedFormat":1},{"version":"7da6662e95dbe1954004f29a467e49539fd248c68da6495dbfdf509493d6ff92","impliedFormat":1},{"version":"dee7c0642d7dbd1580a2f588c206fdf753438cdcbebfd0aa797932e045a08da7","impliedFormat":1},{"version":"843fefdee9304efe7e6dc0f8ce42e75ac9acb32ed849ea206552b70fb64dfb32","impliedFormat":1},{"version":"f466a571efac9cf7392064a01bb2df09ad4c4245bb62b578c67ba5da4a322665","impliedFormat":1},{"version":"1e2409d6e5effd0919bcf96ca99f66937b8757c83a321147a3ac13a6b62cb894","impliedFormat":1},{"version":"f77ab34aa3f0e860adeab6993f569d919a8fef301b6db43ed135ce535ab92c8a","impliedFormat":1},{"version":"5ba64d0099d44e5355eaa5c56b16fb2975dc11830ac33e98a945b4bad53dad25","impliedFormat":1},{"version":"51c0033ffda0786abbf95f5275935a6d23f8148917e62db9529c320a2d0a0ec1","impliedFormat":1},{"version":"7d5a035bfd92dace5e295d22cedb886b6f91211e658c9805cb3e7d1b93640c36","impliedFormat":1},{"version":"706ad67192931f9ee3e57496277d120732baa89fd0cc1441dd3cfb9d038c4b43","impliedFormat":1},{"version":"4b998368c6ae0ab8202952408719df2587a6087a8a14a512a613350ad926332a","impliedFormat":1},{"version":"d4f04196cdccf2e42c2b8acc024259fa91f54bc98626b100c9de53776cc9d043","impliedFormat":1},{"version":"9ed1635ab1c01bbf1f8959b788a0edf021e8b0e84f9420364eed9f9f1101a380","impliedFormat":1},{"version":"946a596f5225c55cea08ea7299e934b894bb5cf434828a4d59af60f5d19bd5ba","impliedFormat":1},{"version":"5fb5cf76fbab668255eda7c8cd0944752793fab7ebd141ccda1131e8ef2c48ac","impliedFormat":1},{"version":"eaa3ea6393f95895bd55a448ed0e630b99ac34c98770e2f82806857f45b66022","impliedFormat":1},{"version":"0c8a357662f58a9f000e18d76b8cc33f426ef833cfb6ff88f412e0a805054079","impliedFormat":1},{"version":"32a3e9f5343fd6d88bcadecf351318bb6c535a361c5263dd52a5b909058b8412","impliedFormat":1},{"version":"b98e18633779d16db5eb5acb5795005ac5f598eff17a32bdeeee45af271c190a","impliedFormat":1},{"version":"819a72a64de9952259906b3632110a7a621a4ae4ac696b5ae125a7f924e79552","impliedFormat":1},{"version":"c3004988eb554c4159e6dad932fc8db0bf8af2248af4da23c009f283ca39ea99","impliedFormat":1},{"version":"780d76bc66b61e328ba01ad94ed7c3b5f111afdbd6ff6073cda37c2721474ac4","impliedFormat":1},{"version":"6f446a579cb4dd695adeaed7fa620c74f4a9d22055803df528ba922afa376d09","impliedFormat":1},{"version":"590b238aed20788f6a5b50509ff17ad8bb89f8f32dbb4954e194c26afd1a58b1","impliedFormat":1},{"version":"85171844f047f4b72b045f13d2e1e82f1821936bff7b66bd479d45811a0c190e","impliedFormat":1},{"version":"5af2f605f305138025d06da87e27e08f81dd76bbf72b8a3d3cac82c7be997608","impliedFormat":1},{"version":"a7ecda1dc9b45719dfe343c37ccccae74fc3e95c04156babd058eebae77cfa38","impliedFormat":1},{"version":"f3000083020259920763cd300e83d95a09fede556d39c18c7eebcb06ff3787c0","impliedFormat":1},{"version":"dcfc7f146554cf73b931ed7fe97cb4dc17858479b31cafbc3ee4429bbc226807","impliedFormat":1},{"version":"96d489b47b1cb0668273fd1a7c610a8a256d6d5c68db40b222c4951aacb61c9c","impliedFormat":1},{"version":"ad74d836d29d8b061bb1446350b1e78ba897ce7cac8f18bad4a4716a8ef6232a","impliedFormat":1},{"version":"78665ca489e1c60bc8da514d34f66d85ad822613a5f0572d70503567286e83a8","impliedFormat":1},{"version":"455b9b496a518dbcd433678453ee0097c79fdb80d8aa374d5cd5a48109c06475","impliedFormat":1},{"version":"3c8fabb727b2384a2351b9f97420bf643745990dff005d359c3ea06747509541","impliedFormat":1},{"version":"525c11f6d58ded43181e5cc83dc193c82378a010d1576a937a5861684782ccaf","impliedFormat":1},{"version":"8ae5f77a947f3af79012421d027e8ccfdfc4b004eb753e77c26845d4a1907de4","affectsGlobalScope":true,"impliedFormat":1},{"version":"c68ee028609c8a0b5d1eeb23739edf055f60d067f4aac4717597cf1914df4d9d","impliedFormat":1},{"version":"17552884476dbf1edb420efffd4903f5aa63fb466a8e7178fc23f4fa8ddcae54","impliedFormat":1},{"version":"dd9897a48778ad01b3351d200b870fe57dca84c74aabdfbb73d3bf3e268beb9e","impliedFormat":1},{"version":"51613d1d49d1d1cdaa1631e04792ef7ada0e229fa401fe1a220570871214bb7e","impliedFormat":1},{"version":"5c13d939990b7abe86c71cccf0f31e20a9278e05e2b82a9c6cb5777efee4cfaa","impliedFormat":1},{"version":"84d172accf022ccccd92c3c3d09ff84b39713311faaf4c75af56db09484927bd","impliedFormat":1},{"version":"da0e2e2ae5bc3579e21dcf8006d9a01572b5d792fdb936175a0e76fe21615837","impliedFormat":1},{"version":"e64986e948c29f9123ec54e72c9f0d5cf4773629de96b22762183afd25c678f9","impliedFormat":1},{"version":"e97088d3f062e4e8e6a02f0aa9a9b537a5d4589307c0e3d9ebcf6dbe99305d1a","impliedFormat":1},{"version":"ef8d9ff30d170cee25ba4c249f91a8c256e87249db4af7ae0659b1ebad62a44d","impliedFormat":1},{"version":"5bcef2e9c19b970c6fadf1e0c2b67967cea10f47b3e97af3c7fd63c64871ee15","impliedFormat":1},{"version":"5b36b9afcbcd229b9fdb0b28390660a297da5a1cea4b656054bb5861db9a1910","impliedFormat":1},{"version":"73617c4f2f3d6c74a8b1b3ffb2e53cdb0fd5114af319d627b677cc91139fe85a","impliedFormat":1},{"version":"591b5872004981d73be8a660cd654742448fc435b7fc3ed0dd8bbc8619fe2687","impliedFormat":1},{"version":"2aefbf0d82ccf94c0595d43d0143bbdcd052cd9b6ae21b6fdee77dc3b1868be2","impliedFormat":1},{"version":"71eeb701a5ecc0f9a95c4a1d5f1a0c91b0412b8d5317d66b84115ccd9512a8d9","impliedFormat":1},{"version":"ffa9ff47c191e36694ff6bb3f5c9dc5fd1ee82aef5bcd12adf7d73c2fb6047c4","impliedFormat":1},{"version":"64d2d74e572f03761597219ac61396de491804102b9413cac1102286dec19b96","impliedFormat":1},{"version":"97c4faaa7e90c793ca665aa31b18b1f2141ea40f14777d6417107ae892ec9bae","impliedFormat":1},{"version":"56caf8a6e1fffa25ce9c7bc138bffee3b84fddbdab3588d788d7fbfad0f2aeb7","impliedFormat":1},{"version":"55c1d234eef794ce0195c8f9163a81b0eb614e78bda22e2e94fc11f1d008b5b7","impliedFormat":1},{"version":"091d503346c6dbbf96c44452ef419d25205c5b08907d9e886e6d3358c3085163","impliedFormat":1},{"version":"b62f866c6632de08260b6aca5cfcef9a8ea71b59499bf74d7df14f62530a7a82","impliedFormat":1},{"version":"19cb174011ab49323edd8cd3029a7a060da74bb4deddd0964bcd75d1beb83758","impliedFormat":1},{"version":"86ab7950e5569ebf6d16719461a26abe3ea74b94a23dd1343b44bed8dd560806","impliedFormat":1},{"version":"69dabc913d7b0b8b70b223ebd553198daafcad8e393e47ea7ca4ec7b48860fc5","impliedFormat":1},{"version":"ca3e23f806be249004709c7265db2703abea762250cffcc1df198f1dacc6a3a7","impliedFormat":1},{"version":"de921033eadf9982233cbbbcdf7283024b9c0baf23cc829d25f1179d38e8bc62","impliedFormat":1},{"version":"12af66d75540a7640a13bd29265710f940ab76bf72e69c8168df271cf9601dc2","impliedFormat":1},{"version":"96d3c4d6400e9ea18e09e8b44a4a20bf9265e728dc2268367dcb78481aabe970","impliedFormat":1},{"version":"885872f0682e8fd6609bb7859d6c4bac89f296d69c95eba92b4ea53ef6ca01d9","impliedFormat":1},{"version":"d22178190871bc879214983c94b1f0baa1c0e4af942b847cbf90429807d62f44","impliedFormat":1},{"version":"d70471626a921770595fb19b503b1278127b64b0143dc8b10df2a2adffb66386","impliedFormat":1},{"version":"6a9d0f7fef987d1846a09c3db7189643fa5e6d2cba0c55a6998e2fc569fa92bd","impliedFormat":1},{"version":"4bd5060b2bbd926c025ceaa24ff60f65cc86be1353018c0b377ae825dadfc007","impliedFormat":1},{"version":"52a64ca919406662b45e2c01f5a86472ce98b5547b84222371bfb939c905263e","impliedFormat":1},{"version":"696daa57c6cc2a16eb737ea74ee4e319f8575f5614347c9f4d37cedea2dd5625","impliedFormat":1},{"version":"3edc82d2b3563cc9f9d55eca2f67bdd82e67d54e5151377d1122f0e047d4f23d","impliedFormat":1},{"version":"b6622093d2466739e7e9943c9d7092f41c21de06864ccbd8b6b070374f78a593","impliedFormat":1},{"version":"9066a657d3d36b48128d82b467a99a28eda47e8584027f6c22a5b387c910c887","impliedFormat":1},{"version":"5b4c7847c39e263215852b46ac02ded976707d7ee02d6bb2d7f85817f9b694d1","impliedFormat":1},{"version":"a3ad6761ea385685a24dd3da3f9065839dc680ebee1dd374196cd4b3009b5ceb","impliedFormat":1},{"version":"9aafee58901d1d98395a6604635a8f9fe8ea54891f4dcf149b2923b6f77cde56","impliedFormat":1},{"version":"ae437a33961216e81d8e47dea33155fdf6fdbb3fde5ee74c211f6c516a36c8fd","impliedFormat":1},{"version":"b76077edb865675786d6ee0ffb7d31e92932134a44da9998ccfdcdfa98e27317","impliedFormat":1},{"version":"e083bf31d8ba1bceb2fd215e028b7b525a315eaf57311b074b7e2d187009daeb","impliedFormat":1},{"version":"392207aef52a1e4a8ba0448535611d2a01955d216404315d8b4ab7e67323a415","impliedFormat":1},{"version":"6990f2fb809692c89ecee29660a7680543246d0aee7bfc6756a1047a9918cc29","impliedFormat":1},{"version":"b84b0deafa5845fd2f21e49945eec5642fc74616f4b324e32e1f5bdf84a0eb54","impliedFormat":1},{"version":"884cd5093164bd0d95afa8854b426df08997a085668f123992ec1bb8eb2accc1","impliedFormat":1},{"version":"fc892a9c766a171ee80ae5f90cdb1276a509a10bb8a9cc4ade22a637cd849eab","impliedFormat":1},{"version":"e2f0a4be4ff986b254035536cd7a0326c3998807c107314c484461d286be116c","impliedFormat":1},{"version":"052bfda778ba1d93404739c42f8c8be8c8f35bb4df1f05740542de9c8786000e","impliedFormat":1},{"version":"db114ef2aba1c12605774caca9a12f389e23a084f007662129450c669da9e981","impliedFormat":1},{"version":"6061e156608df22580cdfe4a7a5458d94c459fb813f432fc39aaf1d4a33a9888","impliedFormat":1},{"version":"0a33b8bff876368beef794f5f08e8221103efa394f9e0e27e19f557a8cdaa0a0","impliedFormat":1},{"version":"60cdbbb719188968edc279c7a71f72b852765f249da6fe9daaf83828db4c15a6","impliedFormat":1},{"version":"ba04712c964ea6f12540190b7f721fc1b7c7e5e7bf0e332789c06a7da31f8814","impliedFormat":1},{"version":"a22e46cc840e5d916329f3df57f1964ebd31b0f338bf744dc45ed796d703f83d","impliedFormat":1},{"version":"b0408fd0bb986440d5dcea2bcc6439ab5ba40eed36d961d8beb41b814ae81a1d","impliedFormat":1},{"version":"a8ed1f967c9c98150cb420c73b872e18a6eccc4030d7da5d0ac1bc53c533def0","impliedFormat":1},{"version":"6e05bb7354927edb091324e207744cfcdd1db034c6b931c97fab37dc6a5725c8","impliedFormat":1},{"version":"890e81356e89585a68846ac22ac97316577c60754f198f5bc3122645fe789374","impliedFormat":1},{"version":"a1cc5a3d01de4885903a724c4ae3ec1a5ff8bbe035d3f97b5d5bf9ca3f31b518","impliedFormat":1},{"version":"fcd5a204f5a821511a56e67703060d8e4df15aab9fe9c851b861a071bbfe8335","impliedFormat":1},{"version":"dd2af3e280d82b797c7724fdfc5bd27969d579ac8e289e00ef665cfda0c82a3c","impliedFormat":1},{"version":"e8153af04c65f7ee85f0da044842caac6b780a88431a4ae48be1440ad65a829a","impliedFormat":1},{"version":"7362224e3853f9b173e6e87b4f8d9cddc0f1b7201397f69f4dae5f823f735e07","impliedFormat":1},{"version":"a110dc50a6c5a8b10304d3043b0f03e1d5fc7de06e0035f5814e229214cce9d3","impliedFormat":1},{"version":"48b5aeb15a96c6522c1d817a7392c17733aa922cd55c8bb7e6e5109d0e40abc7","impliedFormat":1},{"version":"945cd10861b25159fec30bcd898eebe040b998a7f96f264d30e7ed83a9359291","impliedFormat":1},{"version":"860a1e2e3a5eff3c3d8a74d1bee1b1d3088876398dfa346fe9f7417f5934b59e","impliedFormat":1},{"version":"6560bfb5772c16788945c6c18c12932c2ccc48c3d72f8ea3095538921a051cf0","impliedFormat":1},{"version":"708b2a0c1011c2bda2d99a6cf8948e2190a9ab2baa169a078992d34e5f74e56b","impliedFormat":1},{"version":"67cc83be1f111a453527acafc6845e61244bb23d85ebd4faed6c42087cae7b34","impliedFormat":1},{"version":"ce96ae46245f8e1d145d75148e711ab32b816f0e544636594bda4b5dfc5b349b","impliedFormat":1},{"version":"d2272cf32e822522ab2be798302461e5b58a6b59590abc197c19f2a7fc76cdfc","impliedFormat":1},{"version":"0b8281859c610fd3ea0baefb35ce604728e7dbf27b3ae976d8f638c967ac928e","impliedFormat":1},{"version":"50b063752010cd109d79e882d5c7db2728c5a2e7f25addc5444915d69af9c9c9","impliedFormat":1},{"version":"71400ccc605edc8d52fe57ebf3ad6817c1393586cf189048a64b0399b3259d9f","impliedFormat":1},{"version":"256aecf7ea964f2932d2456980825b9635182b230ef17f7a375c97168e2ffd4e","impliedFormat":1},{"version":"c73bdd93cf166b8b11dd623ff41098d0f023225f5725fead1cdac933cef08b7f","impliedFormat":1},{"version":"cf0a5fdd8bc4143040770d107b9c3810fe02b5c262204738eec16c1cc2bc10f2","impliedFormat":1},{"version":"b212290e79e5b619ee98000413d69335e0f3960533da9936fb2fb57ef02f7508","impliedFormat":1},{"version":"59d1bd5907093f1703fa03c73e4158f47e22933dc6f4a38b445759be79853c44","impliedFormat":1},{"version":"6e38cb51261cc4f565918e81ea78fa35734a428dcd729e1448ea22c83e969bb0","impliedFormat":1},{"version":"b7cd9c8e0e2bccf89ce038ba5ea708b5bef3e72475c15e752d33dec5446ec592","impliedFormat":1},{"version":"cc3210f0f66abd795c31a24da0d5bf89610dbb3728e044aa41e8a039233a00fa","impliedFormat":1},{"version":"e3edf295c057fbdf4ad87aec8a1e6399bb0d4e18263d3a3be28491a065a9c4b9","impliedFormat":1},{"version":"a0e411fbb39cc38ab4ae1701f76c1bdbfe6839381090c869b200b8ebf1187d08","impliedFormat":1},{"version":"a087d862a0877d645b19f3cc7ca25158871abcb1d6782077060c290aef42db82","impliedFormat":1},{"version":"fab6f37303adbb991dbcd54d526df988ea0977931415d5e61d1f731981886a5c","impliedFormat":1},{"version":"e7c0bf23018677e0f66f50cb521c6ff4873ed516907092325de671121ed78dad","impliedFormat":1},{"version":"1f5827e358c144a220ed02d4843b5caf741df5477116f7a4ccf9e356ecafeab5","impliedFormat":1},{"version":"d817c2790b54b7866110d6b60132729cf1fdd2d5ef112826f8fcb90091ef7208","impliedFormat":1},{"version":"2af7da933a7e85d582ee12f2fd06dab04ccbe193d2ba0e99a089b069e81ae205","impliedFormat":1},{"version":"48d178661ff1faf6571d153b8462b5f0abbd37e9a0112999773fe891e9a445ec","impliedFormat":1},{"version":"1a2e9df86c7ec4212ebb8d72b520f435ac4586a6078c24775da7ae1f7efd2ec9","impliedFormat":1},{"version":"b8a4cb1d77eee3b147f0e244c6740ec71d9876c62ca93e5f21d9630aea656055","impliedFormat":1},{"version":"b044bfa3c47078d64880b0a5efea0cbbd9b5bf90a33859ea9f56f9a91fb09bef","impliedFormat":1},{"version":"2c8ca8a44e6036ddf3700bd218da3e5db8f5d866f5c4137f8ccdd06ac9e40477","impliedFormat":1},{"version":"54beddf820146021c238ee33e8cf49820e974e9966292f99f4f6ae99bb6f544e","impliedFormat":1},{"version":"67b454c8013bf77d36b45cadfa1daca0f8cbf61d1fdbc5094944e0170fa77deb","impliedFormat":1},{"version":"98b94f1425b6f88eeecb6a3d395eb1ab4c0a6d4dee9d4d82309e4241f46858e1","impliedFormat":1},{"version":"348a88a2c1d28ef8c9df7c9e6929c3b21f3532bb5c5cad721bda43c70e3e6c77","impliedFormat":1},{"version":"f9777518f8896b0c76efe3d622e934606cc29f5412424be0d3ed4182510f4458","impliedFormat":1},{"version":"bc31f613d5e598350f68995a16963e6c1139a25003a3d8bee9a82a48c4962bf8","impliedFormat":1},{"version":"80034a38101cbbf8df2fc9fba489a676b39290f421d3e7dfc96b9d0a1174ccdd","impliedFormat":1},{"version":"9e9b74fa9bcdbf78ebb03d5596af45d1ea4f25f61d2ad716acdd3f6c8771f8dc","impliedFormat":1},{"version":"79611f3e92995480b365bf9245582410bc915d0c01a431b8bd4e1318acefaffa","impliedFormat":1},{"version":"e31e473c841185934f42937cfe06c246a74de6e25d8535a06c88c3f472a33d71","impliedFormat":1},{"version":"49c048c84cf3029119213e1d03ffd57ba554532e6f7ef16eed494010034d0eb2","impliedFormat":1},{"version":"a333ffb95b56d2f679ed1c6e2ea1b8ea4ab0e682ab5fd563e8280407cb38b774","impliedFormat":1},{"version":"31342b5796eb5cd966cbb75e5c868ac0e60bc28b9133bec8cc1123759bd7a5d7","impliedFormat":1},{"version":"2fd07e88fa02368b6ca9e19d3387e8db472e99e7c244e8723f3cecca0a436d23","impliedFormat":1},{"version":"8f13795a654f3c901d03e5e32e8ae23b9863c5d5fdf32bd7c3b2d0f005fc2e94","impliedFormat":1},{"version":"2510c1c3dba23082b978d1b5845e0866a400a6896c5abf67beb67e366f0282ab","impliedFormat":1},{"version":"d1c69c85705f9ba3437a9e9d380f07ea960edd5ef9710410f597b97c48b5e264","impliedFormat":1},{"version":"f8b6101ee5df0732a10bfda46fd3de1dec1d424ce1bb4ec804578f28ebc05dc8","impliedFormat":1},{"version":"8f2d70343fcd639b1d1c04741e3b504a8303f7ca51a2daf35acf0ef14a497a01","impliedFormat":1},{"version":"e21bd82b9eb7e6ce0d0143553badac091495b4e49e88e9858a3b8e8a2626638d","impliedFormat":1},{"version":"0a1a4588cbe5d0c7cf79e192dea435d7f89164c4980631dc2e63b24cd93c154e","impliedFormat":1},{"version":"3004c7815d9652391cb53ce88fb87f8ae478a168842dfb5d76bd7677713b7021","impliedFormat":1},{"version":"39a761f9094915b326c23b59b8b4fe9e6016647a525542a720b0b76e00780132","impliedFormat":1},{"version":"e22083a1857923e950dc2229f454b623e0ac93040ce35782bc943adf02a64bd5","impliedFormat":1},{"version":"e0e8ca2ee4a6e9b27a851dba33fccd5456424ded7008affa48bccde461c1ce26","impliedFormat":1},{"version":"b1b7242e5b9f83b1175b2d3b758c77c309ee54092d1eab048949e5b73886621f","impliedFormat":1},{"version":"9e32fa94fa41bb4ee3fa77311f40562faa4d40997e07685e8b5db7c7d897f934","impliedFormat":1},{"version":"13cffa233445c09efcad1039cdf97d1315ac4f32f87d99b34767b8e545b89e93","impliedFormat":1},{"version":"9cb69a1df6df485d00f0b0133b5f279716da127b04a655e3feb5dfae1688c8d7","impliedFormat":1},{"version":"d6f3f558ebe18d20c3f613946c77374b4f4fd6df5cfa8e458b80326326d4d6a5","impliedFormat":1},{"version":"1c6fb2b87da5ca83cf86c5c8c1427a3d5d320672f15131dedfbae907feb9f945","impliedFormat":1},{"version":"49de6198d9a18cb2955d55ae26214dfecce9ed164e6da6c6f838b554de051fd0","impliedFormat":1},{"version":"1a039dc4c8889f6ec018043f2e4914d1daf7ead70f43e4f98d370cbaf1bf340c","impliedFormat":1},{"version":"7fbe68cfb8453e462da866bb08695491665fc567f300796e1e56a684621c863c","impliedFormat":1},{"version":"601e9f4bb9fc85ebf0757886897e1a2c23df0528c24e9b0c0cf09165c7e9a6a5","impliedFormat":1},{"version":"91acfdc589417dc2020a84809723ed5e6bce23507487f0f169fea22fb6b74206","impliedFormat":1},{"version":"871e0dfb93eb2bf580c239f20fafa8ecd8b2a48bab8162151d03c8874b9def78","impliedFormat":1},{"version":"e768367459bae3cb8c9b72ded6fa9d8caf0204676b2b9649e6c31845da5f06ea","impliedFormat":1},{"version":"e14b6206225aad853deb8af993b499ddb1fba42226e9f88dcbd5973eebc4a44c","impliedFormat":1},{"version":"d8e521499964a30bd1855bd93e4d0599af72b38d7935f5beffdce2a8a261d1d7","impliedFormat":1},{"version":"89f19347d749e705918393fd2676e5d945ac4154549e689751eb30e8128931e5","impliedFormat":1},{"version":"1aeb98a91a0b087515df54c8ed7fc1ade445137f40afb9d7d332e050722357aa","impliedFormat":1},{"version":"cf12b7205358a8e560aba93c7e6bc89f6edf8981c1199aa9c38bc3ca2eacd1ee","impliedFormat":1},{"version":"effcfa9387a1842798d4873e16c19a5aea9e80f5be6202e8032f43a0a27fbff3","impliedFormat":1},{"version":"4bf414c1962ade94ea5ecca293a85468da176a721feda12fd1b9f48944b4cc7d","impliedFormat":1},{"version":"31776021cb6e39ff94ae89974effafe0fcd36b2fc494e92f4e4690c76c336eb1","impliedFormat":1},{"version":"a6723114d50d96c6b7b2e6e7569c10fcbdb7b313f36eb7f3e07b7a1387d44514","impliedFormat":1},{"version":"9f3d70ef795f8f8a758b35f0e6171ea8453252f87d3f15a85766ca90010eb939","impliedFormat":1},{"version":"2551ea09d8918fdd96438248434601f4a73c16e4819e383362dea4c1580ca0a5","impliedFormat":1},{"version":"0b629924a2bb0de7e8375ee46b990166ba94dccf5c8b8b93d5eea0cf04ad4fc0","impliedFormat":1},{"version":"80ea5525c7b771c21545169f990016d67373a127a4f8ff8d1df317e722148a49","impliedFormat":1},{"version":"6bbac1aebc5b662eec81f1cc49654a7274e954c406a28250638a12467879dda2","impliedFormat":1},{"version":"8c47456f2e26d4520f79e97aa5eb13481d8964f782529f7d648285c5bb0dfe30","impliedFormat":1},{"version":"7bc4f47bf73b2775e7f4eedda45dac60e8fb2b30c38e7a7a010d219f8163b3eb","impliedFormat":1},{"version":"2be147cc62ad76853deb322e223d4ea2d421843ae9841cab1704421212e63d07","impliedFormat":1},{"version":"58c22f8ab25922afa8c4c6126fc427761c46f0b0de032eafe47af661cebfb0d5","impliedFormat":1},{"version":"258a71f597c43c18e7f33cd5f0c3b1bb09910179466df0829ffc34e9b4e914e7","impliedFormat":1},{"version":"fa67457e93a53aaba5e8d3a296118d4d28c56f4703792e85ad18be9efb0c1f47","impliedFormat":1},{"version":"9f2e196738b2fbe0a7ba0ba4c6af0b6df06891a4444f799f1719d612c8730c8b","impliedFormat":1},{"version":"198d81c4eea4ac9515a697b57da4e9bf8271578d7df2c731dc20232fa678f415","impliedFormat":1},{"version":"64f3e4c147deb4d57d92dbc5e556ef081110923f08953865bb0bba36312944af","impliedFormat":1},{"version":"f0b3a2178d6f515216a0bd15b1cc565303642937d0d843a289da0ab37212ade1","impliedFormat":1},{"version":"294782f8a20631e456053f4e2c91e7c2d6703b3c171d6c32cec597279f6ea426","impliedFormat":1},{"version":"b39dfd91424860f9e439794a28eb05496ff63d1d35db4a5c8874720719c3be04","impliedFormat":1},{"version":"a309fa9f9a7fdd2916e5f3280b94f79c292df2c2a48be1715b961892910dc6da","impliedFormat":1},{"version":"5c54a34e3d91727f7ae840bfe4d5d1c9a2f93c54cb7b6063d06ee4a6c3322656","impliedFormat":99},{"version":"db4da53b03596668cf6cc9484834e5de3833b9e7e64620cf08399fe069cd398d","impliedFormat":99},{"version":"ac7c28f153820c10850457994db1462d8c8e462f253b828ad942a979f726f2f9","impliedFormat":99},{"version":"f9b028d3c3891dd817e24d53102132b8f696269309605e6ed4f0db2c113bbd82","impliedFormat":99},{"version":"fb7c8d90e52e2884509166f96f3d591020c7b7977ab473b746954b0c8d100960","impliedFormat":99},{"version":"0bff51d6ed0c9093f6955b9d8258ce152ddb273359d50a897d8baabcb34de2c4","impliedFormat":99},{"version":"45cec9a1ba6549060552eead8959d47226048e0b71c7d0702ae58b7e16a28912","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"13918e2b81c4288695f9b1f3dcc2468caf0f848d5c1f3dc00071c619d34ff63a","impliedFormat":99},{"version":"6907b09850f86610e7a528348c15484c1e1c09a18a9c1e98861399dfe4b18b46","impliedFormat":99},{"version":"12deea8eaa7a4fc1a2908e67da99831e5c5a6b46ad4f4f948fd4759314ea2b80","impliedFormat":99},{"version":"f0a8b376568a18f9a4976ecb0855187672b16b96c4df1c183a7e52dc1b5d98e8","impliedFormat":99},{"version":"4d2887fb8e436d8ea1dbc219b1e714e7fd327b663bfe4537d075dafb8c4dc9ff","impliedFormat":99},{"version":"77f7424c7653ca571b6aad3323a73da7a23a97275ee9e14c04901b2fc3f75859","impliedFormat":99},{"version":"36921e15078d2fc229fe0c76611ab5a0df260b66cdfd5f99e6c76bc3ae9bcbb4","impliedFormat":99},{"version":"d162abec4ee08a8912ab4d4f1ef890f726497b564f203b71bd5a60cded913cdf","impliedFormat":99},{"version":"8603b66aff9d8ffec90b2f515e337c4f19de03945925ad77c8759475168a8343","impliedFormat":99},{"version":"8b624e12fc25b0c5f51a26ef1bec5c31c314a479de0712785c8c4b8e4185bedf","impliedFormat":99},{"version":"e63033ff7522e994e0e1d9faec3fd84bc0894ce885dc933fc70e0528e397957c","impliedFormat":99},{"version":"6ee110da2af8f04936653814badc2df73fa893d4db0b4e1ebac957f612d63b55","impliedFormat":99},{"version":"838a11e68cfb3688925eaa7cfde7166cadf86f9950fed4853fb1923dc098cc99","impliedFormat":99},{"version":"a602eacab7c5a2398b7a4131a4e4b8a5d2faefcddf51bc230286e5286285d70f","impliedFormat":99},{"version":"9e44d5f53a9c293b004d24e6b3e709902419ff26059e0d22affa93462f157d67","impliedFormat":99},{"version":"4d3907c1514d751e3fdd00da4640377dd00756b4e172063f7e2c6eef9f074760","impliedFormat":99},{"version":"e24d8dc9dcbaf8fb062d4ac97edbffba1c572e040d25bf0860dcbccf1e9f3a88","impliedFormat":99},{"version":"1d5968735d6a01be14f39f3709ee729e2e3aae3309c2b7542c601c4d9369dff0","impliedFormat":99},{"version":"0cc9481d549ee09909165fbb9ab12cf1cf5b4f6748e9f8b68dec6b9583133818","impliedFormat":99},{"version":"05a97c8d50bef9e99aaa97149b3239f37b78576850aa698b3fcaefa32f75f092","impliedFormat":99},{"version":"106db9f3b4ca7980ab7744804d67678ea81a76756cdfad8342577e1b2af46342","impliedFormat":99},{"version":"b4bd38e8b0044564d129b0c81ba7d7999a2ed2affe5babbabc87a2d991210f31","impliedFormat":99},{"version":"556121d6cfea199c95472772cac2f719b834be8b9bd41eb6d8d91bf2cb8aef3d","impliedFormat":99},{"version":"c4d5184203d55e125c00257681628e038089ec04bdcc9fccbd81398af48ce45c","impliedFormat":99},{"version":"9cfaeb5d4d823615342550fbf0bf707d38027a8896d080464c6f6434e5bea811","impliedFormat":99},{"version":"c9a0186d419c1a2ac0867c8d7c5f753d068ff88e506b5810ac4b755443cef93f","impliedFormat":99},{"version":"e5276d294771106d9103815911e0bcc759c2b69437b2eaa53ae6ce3b31698f93","impliedFormat":99},{"version":"a849c1aa0f8fbf850658ee098099e30fadec5bdcae322e43d3715b13d28b166b","impliedFormat":99},{"version":"69b82e214e484e7428af5dc522675ff70f05b07a4cdcc168b0de3deb9a74c034","impliedFormat":99},{"version":"eaa27dfa46cdbda4aa20b27881245d5e38ce4dd0403d229c0cbba5211190e3a0","impliedFormat":99},{"version":"49637532054b1f32aca1a2e37e36acb6a063ec145f398bbd806ad4ad2d610b77","impliedFormat":99},{"version":"929672b92ae2eeb40eb1171a5f1551c90b6d55928b8d3c13a119ee6bad25c648","impliedFormat":99},{"version":"018c169aa65c2e199c1256a50229fc2476303a7d229109c76920734533715302","impliedFormat":99},{"version":"769eec6f55b0fd03ba1fc9c2c806ba347d4007a9307cd5e78f8c50488407b755","impliedFormat":99},{"version":"ee8caa32e966d21923391aaf139eae98fb58a865a74ecc3d55950781da964549","impliedFormat":99},{"version":"1965c99a27f819fec1007321018cf9552beec40799fd7bc080c2e64ab521e064","impliedFormat":99},{"version":"f0cd5f360be33c4507df7fe7491388b6890a14844fb1e26a5c779ef0ceeb3ba8","impliedFormat":99},{"version":"58b79e76ac3062bdac3bfa5851abeaf66b7432f2cfd2fa79c969a1d619f31277","impliedFormat":99},{"version":"570742c5ba7f2e8f4b3e6741814030d2a282111a63d42bd40e6e48d5b070e48a","impliedFormat":99},{"version":"e42e8eece168b49b0a95212d709831e979049e583ab50c31f22d7c7863def456","impliedFormat":99},{"version":"5a8516b0d60aca2895ed18ebb5f1bb61fe99dbb99383420c1038679bf258be7f","impliedFormat":99},{"version":"98708f9ff38cc2b2738a82d862deaf190fe50c76256c34d877531b5add891480","impliedFormat":99},{"version":"e61b8d8c4c729e967d332c3c1a2ba7576786d218e21685c47440e02d123f51c1","impliedFormat":99},{"version":"ab98cc4cc649989f185f8e23da9cb2c27847072cd7a071b7c7dcf8bda7f361be","impliedFormat":99},{"version":"69631c578eae77a24486a548df6272e17318cd2cc3742b301c6e374031ce15d5","impliedFormat":99},{"version":"85e7e505b1eb7b86efb53992ab5638253ba698d676397aa4aef68636a0d92db5","impliedFormat":99},{"version":"c523515c0bdc2fbb0119ea564b1952ffc042e6692c22aac588c99bddd89fe280","impliedFormat":99},{"version":"7a8fbf8a1e38dca11ef63c25ce81b0c9cd3a2b75d32b2a1aabb22187a884f65c","impliedFormat":99},{"version":"ee07fa266671cf9ad5522e425752bac7d1149e9d66851058ab1094cc4b475565","impliedFormat":99},{"version":"6fea7054de404b9980cd44dfdd416d03a44477ff3e1c929493022abd7244658c","impliedFormat":99},{"version":"08297fbb15c5b09a2170bacc090f295aad6267f51ad49c836ed9cdec93d57efe","impliedFormat":99},{"version":"adc160518fe54967314e9a78132fe1630341b743acbca7a40366a7118d64d8a0","impliedFormat":99},{"version":"aa0db1558cfdab86a71c88c4369b0e089749cc17dad751e4b824d0b44892ea04","impliedFormat":99},{"version":"a4e4ed7aeebed4f15bfc68ef9e719b154765d523681a69aa38d9f4be10ec41a4","impliedFormat":99},{"version":"79da23daf791a61c15b6adb2c8030aab11d2b96b12fd7cc1381157e64ebc2fc4","impliedFormat":99},{"version":"64e0b717c40a38d507f38117c2363cd582cdd58d971d3d57d413fbc239f6e612","impliedFormat":99},{"version":"64c7a10dbba5405299f30f1ba2e48f680a99a1d9ca56ed3b25fed37802e49f0a","impliedFormat":99},{"version":"4e89358beaee0660a66f27120ce892880fd6e4ff50a20ad17dff711b0531ccd2","impliedFormat":99},{"version":"b49349872646f50772934a48fef4c95ecb328160f60b80d412a9f7210d6ea817","impliedFormat":99},{"version":"58be3671cce553bcbe1236d16c451c25b84f1d0a9fe32bdb70bcd672b8d84026","impliedFormat":99},{"version":"848fb3a35212155e7320e4d412a56d2ef082fd954f281e6a221720906d8e24d5","impliedFormat":99},{"version":"b130f22d08a15bb6c3b47ddf1b1f14ea0def8acffd486f1668a28b4ffa6809ba","impliedFormat":99},{"version":"4a2061c6cd6193f86dcedb3f2dffc38e57fab097eb29e2c857f2ac8608f05349","impliedFormat":99},{"version":"a037be29361879cebb09992466be99c3bf52dd7426986005026ac7c9351970da","impliedFormat":99},{"version":"4f27ea452fe87e5614c79bdfa06075c1d7afdadabc3213299a4597fd005998bc","impliedFormat":99},{"version":"aaac531eaa95b1c4d28bc03bb7fa1d6cf9495ab14b61494ca452514d60133a0e","impliedFormat":99},{"version":"d7442be0f659458eefa72616260b16fca92e97c03e951efd989966b5e7ea5e91","impliedFormat":99},{"version":"fec07695d9acdec37e1922969b4d6625f70ae89adbd4afd7d268e5d523bde38e","impliedFormat":99},{"version":"f3eb5627a5494e0207831df2aebf5df6ec2265b9ef94cc1e3bf2d810f606be14","impliedFormat":99},{"version":"48cf15e70db5b3b6ef026d613b091464604640c8b8272f83c4dfc612498c4f50","impliedFormat":99},{"version":"75d4c68ff23ea1875f4886bb79b273fc4736ebcc92d55c75da0d0515df20eabc","impliedFormat":99},{"version":"d76a111579f9ae213c059df3ea6490fefeb44d501cdb0f18bd9b9fffd8fd142a","impliedFormat":99},{"version":"3709251f4d3f80cc7dbdb0398f4cd1b0fbf1d68b88ac2c2c9a2819c9f4d93b42","impliedFormat":99},{"version":"a9fa1ca3f563a463e3dbc7f08b846512d570450887ae2d144589cc723e3d3fd0","impliedFormat":99},{"version":"c8b8403a54738582b19f7a4f93498b6550bdcb665ffae98a907c91358ffe55db","impliedFormat":99},{"version":"fc8adcb7f270b42bcfc3b22d0b170f0eb1599d8661d15d6cd4538ce053e1b9ed","impliedFormat":99},{"version":"deecea988e1412aa38b360b0fb071fb86bcaf5c94ad1b1398663c8dd4871e6af","impliedFormat":99},{"version":"e2d7e3f27356ab2be630a4405e3f60499b9dcf466775932f371c7ad30d305f17","impliedFormat":99},{"version":"20035f181bd971cb94f5742bd91131b79c1b114706e20b2663d2c40c055fa53c","impliedFormat":99},{"version":"fe5af5ee1bfb821694b6a026c509511c6d8540cdd285131c81a115b7eef56e11","impliedFormat":99},{"version":"54442f15c1d35a773cbcaeb7520e0e09ac991a1e00d6be72d65a078288e6dbe9","impliedFormat":99},{"version":"e41d8da000ae9c3619e6c16606af32b3d70f933faa3d6f10d72563b5b0f65bce","impliedFormat":99},{"version":"124c22139ae091889925c5d1ade97be21890a5135d98b17d96b3c6f382efd196","impliedFormat":99},{"version":"c36c30592da0b0667ce5c4215b660ab5370b21412320be13115e9eaf22987c57","impliedFormat":99},{"version":"91386cb2bf54cad36b0a7b9ea9790afe894050c17ed40cb2d63552fec4961e85","impliedFormat":99},{"version":"d77786dffdd483df22bba299465b01ccc0b48c3bd41b0af66b43ee9b280629b5","impliedFormat":99},{"version":"4aaf5a0f504e99332220b7189fdd94ed71c1f3db7225bdceb6148b985139fa0d","impliedFormat":99},{"version":"8ff5f071f877ffcb31d1476c59d4c68ae05c0ad9b022d0145970c7dbf5e40214","impliedFormat":99},{"version":"a3fcdb8949307b5481b66479a4168fafe3d07647cf91b856f22e4556bac78df5","impliedFormat":99},{"version":"72fcb3b2ebe9102201635cd731f5e655afd680a7edcc5804435827e994948700","impliedFormat":99},{"version":"9d9dd4371e7e7ec4968fc506f7dab3303e70c4baae96cedbc0f25fd487994d29","impliedFormat":99},{"version":"9c3033264cfe0084b80cce45f90db8b2af60ba8771748a22d14e6a30bc467cc2","impliedFormat":99},{"version":"e9cf28fb0bc429b94cf4c0069954edc5da874eafdc5c967865e184eac9a3b5aa","impliedFormat":99},{"version":"bcd73ee4dbb40711d57b4555d222453b3cbb3824f7fccdf355e43e6e35a9a4ab","impliedFormat":99},{"version":"12dd3b0dcaac8d69f273b9f03d316eb29cdc4a35fccef29583254310505d32d7","impliedFormat":99},{"version":"38077de13fe290c3fb4fdcd8f426c260c06e7308783bed33e5ff8921dcae5194","impliedFormat":99},{"version":"5ec96b9e4148f817ac89052509f6a9db1b434ef37b634c9cfb54b0be3b81f7f2","impliedFormat":99},{"version":"bff50b812b9a6bdae45bc5c4025eee90a6d37516f5c473729b590abacdcfc00c","impliedFormat":99},{"version":"e102eccbda45533f54617e5a53b143d0e44aea1f251551eb6e237085ece23806","impliedFormat":99},{"version":"f12b02156d76749c81e4b83185d3b814b8352f5e21ab5b7284e2eea2f1b17a90","impliedFormat":99},{"version":"4c612460e5871907fd0182ae1eae612b7915609ca78139ef110ddb4e1af605b6","impliedFormat":99},{"version":"e4519b1ad63f51fb64fa0db0fc963f83ffba0ce449693c3b754a2315449f7cdd","impliedFormat":99},{"version":"6a8106c44c9de23fff7e01d74805857b5702da8c72f1391a38b34460063aecc4","impliedFormat":99},{"version":"80492a9617e654e7fe8e27bab491d51e1548ea4bb9f8c51357267a92a435dcef","impliedFormat":99},{"version":"89aae61ac71e83a0f76dc14179cca84dbd1dcb6f7dff0b112dc1bc6b1c887800","impliedFormat":99},{"version":"b43a1d1eb7fb5d8b3c7e99c020b4313bc614de10665a0cf26d7d4bb78ff008ca","impliedFormat":99},{"version":"8f1dd9a724520513ceb0014819e9169525bd9a020c74458e85689cab061a1f7b","impliedFormat":99},{"version":"60b6250ba1516b1eb863514b3f1ae52403f781eebb5b798ad8765dea5dc79dbc","impliedFormat":99},{"version":"61a8dc1eaeb0a50f9304858e79a4f1a7b72a0901a27ef046e9465911ffe1ebec","impliedFormat":99},{"version":"f75492d33e2be3eb66f9fe7f01c8760fd18505d724e6fcd687f6c2e806b40046","impliedFormat":99},{"version":"b5e40372d34e1f0704131da3a8526e12948295e64b4d05a11e1fd8570c411e39","impliedFormat":99},{"version":"2c879cf6a84b92061c13bdc0f4abdca88834242ffb7b0765176eb44a0602a762","impliedFormat":99},{"version":"da67be907089d1d406cac1a6286a4cea9d430e099c34464d00e7d7791bf2d3c4","impliedFormat":99},{"version":"d3820ad364704a21b13bb585852e968e3184b4662b185c9b53cd30f1d4d00510","impliedFormat":99},{"version":"8d7659793df95d53e1757de966b7e1c1fa809dde2c02fb87e53df19b124924ef","impliedFormat":99},{"version":"2b384d6463c4ed2cbaaf58ae46a17753a2b729c0d17fe346265f39901a89c301","impliedFormat":99},{"version":"f865cf13bb812986c308c80ec8d536356f91addd45a9f850968eac0c740c6528","impliedFormat":99},{"version":"cb35c26fb8933531969fdf198d70d91fe10d445028bade6632dab0e884573b79","impliedFormat":99},{"version":"cd6b5c72ea7d660affad9cb41859046e79c4e363c22700a6f86a7f7578ef9a2a","impliedFormat":99},{"version":"5dafab1e5e9ea9835109fd2766b154c1499dd17d935e4ff49e70ffebda3032d0","impliedFormat":99},{"version":"5db698db35aa63f4d2debcc34101a5f5a2d01366c3f15bedfa9050ca85d9aa35","impliedFormat":99},{"version":"c55c432c38692edf9f918f385d536c43073cc8077ff44850091442722bcd01a4","impliedFormat":99},{"version":"17a295c1b1dccb8cb4f854bde5ff33980fef1d883c6d481f8593240ccaed60ca","impliedFormat":99},{"version":"47ab38c7c74019bd347aa1c812e6eef86d2163669e50242cd27d0de30b6c3fbb","impliedFormat":99},{"version":"c8cfded6c4fd715b52de664d21931bc6a55b225894f5792d05ae29568c623def","impliedFormat":99},{"version":"1bfe5cc8bdb660318b30da6f47460605b06f196335705af4cdbb510ffd8c8fae","impliedFormat":99},{"version":"d4aba31dd41819bd87d70843438a935ddc142c0eb1d0cdfa164e5dbb9fead30e","impliedFormat":99},{"version":"9aca4a305574aa60617b94cb25d8d585fe169ddf92f7dd0197d89d636aa1c19a","impliedFormat":99},{"version":"d23800041ae0858327ad3b47c3876e0191c16061c33c0550fbcff60b695d7bdd","impliedFormat":99},{"version":"b809557adda13b9bea2ce69cea6405d1345d85f7d029a28d092fef440edf6141","impliedFormat":99},{"version":"b9f39d0dd2bc56a387290ec42a094382ce91de1258a6f5f3b89655d7aabf65bf","impliedFormat":99},{"version":"c8e72190cc41dac064febe56f97bc89351be5a83832918797fe8c36cbb604fe5","impliedFormat":99},{"version":"250a161356fb615263402697679460d0b765a249404a78125168d3fddaf9d090","impliedFormat":99},{"version":"41d93ceb853cc53debd13fd440e4b71f089bfec10768811668db17e7df55a3d0","impliedFormat":99},{"version":"4fce10097a5a81c6811ef81adfb03683518a072d4c0d87f5347d4d7b4400cbc3","impliedFormat":99},{"version":"f5decc77d27c3a64f0d38a8ed69fc60159706b12a7f5ddcfa574ea29f0e59f80","impliedFormat":99},{"version":"6d93506d3159b47c8651e353095a333fad5211363b5dd2aa48dcdf9e9d69871a","impliedFormat":99},{"version":"8289780f7f1f94951d01e6c4aa2bc9fee7720c9807fd5dfb77e6a8ada8242cb6","impliedFormat":99},{"version":"cc52591d128faa36c09f3aa27a5054ed3cbb651331095380915cce77622f0fab","impliedFormat":99},{"version":"a39c28ed9ee3e52c975278adcb84d56cd0c3ac07f339481219c67aac93b78c32","impliedFormat":99},{"version":"acf12bc7ab7f2521ecc517b2ab4cb61014a384f16d75809902ad7cff8696169b","impliedFormat":99},{"version":"96fcce579cd105b23b74a6e39c9f62d478a0e4cc88f51cce130c106a92305603","impliedFormat":99},{"version":"bf58326ddd44ea8c9e3377e6355bdcfa46b2157162110c692b3014adebdcbbfd","impliedFormat":99},{"version":"28f4cbb0f2b77cdaf8f638286cc2844669a496f687c2fce10f9f8ff14e407fe9","impliedFormat":99},{"version":"5d5a15194cf1e9bb670d20624d80474368d2894d46d3196ec7aabf80acdd0ea4","impliedFormat":99},{"version":"e26538b0d04ad1ea982c6ada5dfd1f340e98137cbf0d57075e754462d86f7611","impliedFormat":99},{"version":"99a12659c5daf9dd6ae79d11f8df6d34c5943c6ebae7f424e21cdb963260a91b","impliedFormat":99},{"version":"473c6060c3923d6beceac97cac7a684113090abb5363f50915ae0fc29492c928","impliedFormat":99},{"version":"bb64643948ce89cca03b8252ac01f3beb1e504f2e232bdfdb1cdc81da5d4687e","impliedFormat":99},{"version":"c4239abcb2ff0e4fd1a7ba09e88986e718d4612d13929d30b4d02779e3d87aaa","impliedFormat":99},{"version":"dcb610f5aa4b8627c9676839320db26f357d9ec75d31490892a1fd73be1b1314","impliedFormat":99},{"version":"7a4e7b83a4e920dd574f8df7d3bdab8dcac6d31226fa1eda728628508188a977","impliedFormat":99},{"version":"eaff8a935d00b2586318cc5c3092e59bcdb61b687415978f8adc78778664ec72","impliedFormat":99},{"version":"6d170802c45620c12a5ed32aaf2b239f1c3f3cf76aee3a2e955cff1b6c6144a1","impliedFormat":99},{"version":"d249734a690bb801bacd2afcc0432b5be224dd91ec88ec6ec43848c37858add5","impliedFormat":99},{"version":"3a0d55c5d62914650d86fb0402277a1fde4bb25388c15734bf3c4a9354bf52f6","impliedFormat":99},{"version":"6789838f6daa7ddd03fa4be97bfcc6fe3449c9a04a7f4c9008c508898124bdf0","impliedFormat":99},{"version":"b4e1f8785a623cc58e37ad538b9a5de1de1218e154c9f5a0c03eb18a2de9bcb7","impliedFormat":99},{"version":"767bee06d602aa9510358818e71db67140a3c2f056566e41be2a079a29c41979","impliedFormat":99},{"version":"206260b1670649a465319961ee478ac2fd1e7852259efb9e04112e4651fc9544","impliedFormat":99},{"version":"e8de9704319ec1ba81145df7a6c97a409c572fe5ce22ad11a9ad6737807ae620","impliedFormat":99},{"version":"747b9ec353a6bb35d732e4691dfa3ae8e4406971a08f4199cb2c91003c03d0de","impliedFormat":99},{"version":"f2ca59e16388b431b8e912ee51d31e192c4792bd4335ae4ca2f59af622dbc302","impliedFormat":99},{"version":"cd631db9f450f9a18015c23ffde0cfd030e44ebfe4b10f5c72803de30ef0e8fa","impliedFormat":99},{"version":"63fbf377cefedf70ed0aeae96eba90abf65c2e92679c459b325b2bd37cd4983b","impliedFormat":99},{"version":"e23f60fba2fcd179fc2152ac4f6f3498059f21c76bd74e64147fc3e1365f3311","impliedFormat":99},{"version":"78f304cb1217b823ebd9b79dd9b4adc75b0d915432456afb140fb2188e1bd748","impliedFormat":99},{"version":"d8425128980a85913c1f5fb9ece9fe237a4e70eaa9845a5527995c2d40b89331","impliedFormat":99},{"version":"39b5d3de3c64f6b268cb843ffa399e5b0d8f17c3f65be35b05b9038c987346bc","impliedFormat":99},{"version":"9069f61b6a5eb7844d89571ae96dd492fbd5f33534bf621abf3bf29579f0484f","impliedFormat":99},{"version":"468caddc2aac962edebc1d3b8a5a9e9a173b9e75d36d84dc263502fb2e49811a","impliedFormat":99},{"version":"08b0911ee98ea9f9f4629fb6c3ad2f52a9a5aaa0aa9a80a7c8041b8c27e8f69c","impliedFormat":99},{"version":"ca787195f6134b4dac541a629f9db12a30162adf5467bd343f37dfd562b7c329","impliedFormat":99},{"version":"7dcb30baed58d49e6bb15bad648185d3c198959e7a3e9f063d1838a8fba7c91a","impliedFormat":99},{"version":"ef8dccd817a571ec3fa073a965d5d97b785cc43222c7854121ba31fa97d2bdd5","impliedFormat":99},{"version":"3a52eca069515967c1b43594091abc98d51004c68011b4b7d3335a830a19e906","impliedFormat":99},{"version":"85008e5bf42ef9dc1c4b6924c78c8b911334cbf91a7a24ef70efadd9fa88ea62","impliedFormat":99},{"version":"028cb9a8ff4335a9b239b17cd381d61b65af2384fdb866c47200c6beed7674e3","impliedFormat":99},{"version":"ce1ed5f9d243c8378bd4099ca7258f4492b9c41f7764af07fda38da659f0fc57","impliedFormat":99},{"version":"d6e00f06be5750686d5646ee1ba49b73050968d7d68968e3c815d24a08c383d1","impliedFormat":99},{"version":"1c0472bc9182a884d74d7e8f2bcc46d34b6b16342ba3cffec03be817b2b9b042","impliedFormat":99},{"version":"c097ad4cab7d86210476ce41e964e806c9946aa231bab21cec2aae3ff2795978","impliedFormat":99},{"version":"060d300e05a630bca1752385d12f8c7283bc8c572e4c2e797abd51019a0206c1","impliedFormat":99},{"version":"3e2bfc42812d3a879308227c956b958c0e5256a57c3549da9ef982194951a97e","impliedFormat":99},{"version":"b158543642d5e0d7d86926e135c3bb618428b65aff3cfecab549b04725469f5a","impliedFormat":99},{"version":"c6abed8a1c50ae86892236bf08e5890798b939bcf263a7b25fabbed8dbf70b07","impliedFormat":99},{"version":"2aadf562886279ea28b6b469b2396c86f54a6e80bf8427dd895218e58b4bfdf0","impliedFormat":99},{"version":"e6b66ba6f695ee96ce5ad8e0e39bf2c5630e9b6c2f7a91eccee70f8ba1a82c00","impliedFormat":99},{"version":"af8546e25450ee35e8b24c5f46558c3f0fd7c92cd6e8b6024036d2918994af76","impliedFormat":99},{"version":"d96f38005197dd03404a282b2c2f399c845c233ec16800bce394000fa5a1a727","impliedFormat":99},{"version":"1b2aaf0cbd2b9c6592c40f476e6053dbe52edcc9cc96dbe03db1ae8085e50e7b","impliedFormat":99},{"version":"d7d173a78b314a1749f45ef644f1baa1d769a64e72dd1a225990ab858279a1e1","impliedFormat":99},{"version":"c919340f2b125d0fa4e9179cc9b53c225e852cb70e321576d83a4068c6d7baeb","impliedFormat":99},{"version":"f2ab946b2481f725ebb90f42504db6c43bb967b08b6e6c7c84ab4f6abd3f3890","impliedFormat":99},{"version":"b0d96987e7b7219db0af2caebe36fb0470fb351d532ab483582032a1e38696fe","impliedFormat":99},{"version":"91a325d80ba995754a3a8072dbc20a28da4b84387f09f8f4bd549bd174e83b82","impliedFormat":99},{"version":"f9a43d9390efe0c20d22ec866f6f892c2a1e338c72a512809125f9df53cb92a7","impliedFormat":99},{"version":"b73d2f6f38ca4c1ec4a7151cddfcf0f144bf4364b2e81b082e35ff5361c0f57e","impliedFormat":99},{"version":"7801cae57a7497244c5243ea6f549cb3a4d1eb65c08268b09e544f902c48cf22","impliedFormat":99},{"version":"a9088a68eb7057a790e986cb60835dd190691642ea759e0f249ca9a555e6f4df","impliedFormat":99},{"version":"561e83c572ac51be3ad30f2d52e4e21379dbb7fd06cbc6eb0a8d4410741faa16","impliedFormat":99},{"version":"948c68479773ba7430f49d9aca11a27cc634ce921beb0ffdeeec60e3ba175a3d","impliedFormat":99},{"version":"2bd820079a9688d1b11fdbd4ae580563fed1edc6905d8ec08dad853766a38fa4","impliedFormat":99},{"version":"66b7178c218793c116e9b1a9871dad446f51618fcaee8730d9a3462a2f99c2f1","impliedFormat":99},{"version":"f20eeb62635edb76f3bed0a0341dc1c543684d8c2e280192dbaa9d815a2b3e03","impliedFormat":99},{"version":"f68ee6b0fccf8dff34d25d155ab88a1a699be67beaa3075f695f130f9c20b975","impliedFormat":99},{"version":"5aa560f601510ee8bd0b34b2d6a92316c46b43bf27c582b168242632b1613aae","impliedFormat":99},{"version":"0d3b3f2f3c92e2fd9b56d75bd949c74ccd3cd2d6e89a553e59f58568ad90dd78","impliedFormat":99},{"version":"c09eb94f5f890522952ce366442a1fd12052bbb76e84a6d2ca87238307fd5d4f","impliedFormat":99},{"version":"1460af367d2f860537a9dde995cc06d0cc2b86c5761b2f4c0350840caf01e7c2","impliedFormat":99},{"version":"a02d3f1988da099c920b3209211840a299db1a3c20d7aba929ed7ef0442f3e6a","impliedFormat":99},{"version":"75aca9b08ddf95a78154a8a261e3ecef1f924ee269348687978d187b872d1535","impliedFormat":99},{"version":"18e61650cab316550f346f688c1dc7933cb3184cbcd88407a77748a75dc844b3","impliedFormat":99},{"version":"f17d24c6f8d381e61c99f13e4f38849e72b72c44e59be96a97dd212e2e6679ca","impliedFormat":99},{"version":"b64b8f2b635c69a120183f741ef3eaedddb2e4b021468c62f780c6ac287deef1","impliedFormat":99},{"version":"11e434214064759b5c95eb4f026adf239b1bf4d79ffa2a4f00b398111feea794","impliedFormat":99},{"version":"05d2836490172eba648524e51117dd5dd98c5438aa89e15f6890c9562f8b4004","impliedFormat":99},{"version":"f2d58e2a95faa9b9ca10bfd9333a445ce6eea6f2a1504fc7c8c549018adaa59b","impliedFormat":99},{"version":"9d18b7270255629a0e40053a36d9cfd4c765c3df73313422fbdc077e6f411ca2","impliedFormat":99},{"version":"32b791692403665af92cec27daba20c02469748e2e0602d3ae96350ee08d2a6f","impliedFormat":99},{"version":"6332e40859f83f0446c33167825f4436e2ded25edc7974a5b42c7f6a59124f23","impliedFormat":99},{"version":"50ae56aa0973ac45d8176c56d105af95cbe8b6301db6ff5fc3512b4c684b4255","impliedFormat":99},{"version":"622f748b9de2b1a65392aeef2e18c6dbb372f3fb82d8e5ee55234cb9763b3fe9","impliedFormat":99},{"version":"a6150b170cc88ac46d7005318447bd161982c091e0224dfc63dc2a8cd6d12f20","impliedFormat":99},{"version":"24f2b131e4b2d9aa929c24e68328984de1b9ae0bf4bceba5ee40e6cc5b0bdc67","impliedFormat":99},{"version":"d7fe6edb96da75ea3fa6b76a8613e61d13aad20b7462b42f4f3492091238b215","impliedFormat":99},{"version":"5e9ba2bfab8ce1e5f94a7463969a64ea6c22d31919faa888ec940dd770af1248","impliedFormat":99},{"version":"a2b13db4828108b2406f879c2cb93d6a497fe936aa14f0f3d3dcf9c9ed03f75b","impliedFormat":99},{"version":"b533b94c5ce70318fde3772b3221d46941d2f359d81221da079c2ecd477f887c","impliedFormat":99},{"version":"a8794bcff57ed0c4f880a948f4b85dd1b22d925ba090871dbcd88b35c5ebe968","impliedFormat":99},{"version":"e2f77b057053d31d7fe1a3648908095bf987bd96f73855889b5ce9b7a8e250ec","impliedFormat":99},{"version":"c897ceccd46b2c55f8aab887a246417b0520143e8a96fd26c0c84a12ebfeff25","impliedFormat":99},{"version":"b762e986d91311985863443a278ce6920e3541312338a8b2ff5026644f55cc52","impliedFormat":99},{"version":"d591d1559ae4fc82c4c582ce269b6023a0caac336b245b78fc556a9a37a60bf5","impliedFormat":99},{"version":"9a133dedbbd96d3415cce1bdda55f08ec1ba38bab7e7139aae3afcc56cbc070e","impliedFormat":99},{"version":"1796c4fd3085ac25f634b30378e000e1b985ffcb2f04eaf9ba7c6c2785500308","impliedFormat":99},{"version":"ceaedce2f9989592a1f2bb970c679c167e8a3b8973b046e1aaf85bccf9859cbd","impliedFormat":99},{"version":"784e9840f78ca32d9f8d6d69f3b7b5a955b9cd134fc283d84e7777cb63276d05","impliedFormat":99},{"version":"c48e52a9c4c8c3cd841da9cf35f2a6574ab0c45a84171c075ca9c6cb6b715768","impliedFormat":99},{"version":"98afdcae0697df3fbebb0d9cd46a4865abc9c47378cdd022063ebccff58239ca","impliedFormat":99},{"version":"135e72dd70117b78dfaa72723885feb45b296f61bf60cbf9eea7726bda03c154","impliedFormat":99},{"version":"61c43c4ba9a7ace834e443cbfe4c7cfcfe23b6a81505cc0716564fdae9597e3e","impliedFormat":99},{"version":"87f4c6dd964ac87d6b45d5663b917b74ed83789a232bb9419670a922913aaf30","impliedFormat":99},{"version":"7c901df77ab9b0b7e932042aad3629729eac81157aef01e377aa7eeefd9d8f83","impliedFormat":99},{"version":"432e8de8444fa333c21e5b427b3cca5d2ece5177043af26014a87a2de779a8a9","impliedFormat":99},{"version":"b0f1373cb8fee14b5a96c2083d9e06aa5329d9329f1945390c3da55b0e475612","impliedFormat":99},{"version":"6a07210d3945b68bd25158aea4538e8fc45c8073aef4f18a6fb71fc4afde8e16","impliedFormat":99},{"version":"ef608b53fdfb8ef2ce08eb30f411c1c1500c4990541763b48d041fd3ce970676","impliedFormat":99},{"version":"9c9da2b7e0cc3dbc5323d17420ffa7c694b9cd635f7928670f0821637b1efe54","impliedFormat":99},{"version":"9dd18f8953ad665a1845871c0bac9a11ba128951f4481e522842d8a7e7999fcb","impliedFormat":99},{"version":"618b4ae5336a47df468d4f71b3884048f5e6e7bf7ecc9093b98cbd7b18daabc6","impliedFormat":99},{"version":"7f97435638b9523edb4870b4e805088108d874a777172bc8a46caf63c6656f99","impliedFormat":99},{"version":"31ff93b370bb6c701d287996b955c5ccd063360f363fef206d60a9848a48e3d2","impliedFormat":99},{"version":"1934c6418bd4f3130e7a98e8e4b701c383a301ef831e767331ed2e544965fef9","impliedFormat":99},{"version":"69b49a4e4216cbcadd09d3d8cc11d224b3c6cc2749ead447ea1a1b514b748133","impliedFormat":99},{"version":"2bcba29ee9cb7c86e7cd486a1dec3274d0aa3a14847ea6e84eb7b117d1210271","impliedFormat":99},{"version":"489e5b3590d99830e9146c61dd810fe0305b2c580d9e912c1e69ca84858f6a6c","impliedFormat":99},{"version":"dceb4c71cb4c299f79a784e58119d7788286bbd1009e89d476aeac26cd086763","impliedFormat":99},{"version":"e5d3ee84524032a0fe1066cb9cb38dd78218f9a496ac335aa857e5c1c801a86e","impliedFormat":99},{"version":"f41940c36a1a760593e4e214bd6eec3ee7f90cd934bde0c2b1caa430d76bf659","impliedFormat":99},{"version":"7611726255029e649e3c2304ae36bc8a34501823e145c708b35b99e988b677ef","impliedFormat":99},{"version":"6b246b69ee26df19a7fd044a3bc686e99b903284695ff0c3a232baecfd055499","impliedFormat":99},{"version":"b3fa4ed7d7976d27aecb6547320508c949cf9c6503f8046d74c6d74cd42cea83","impliedFormat":99},{"version":"8dc2b342bc7ad0e949723a89955147d942020d1fd42656d08e87a2302b757d7d","impliedFormat":99},{"version":"6c7c15055a23e2b54f15113daa60909806439d168f0ac4d172aa733637978e52","impliedFormat":99},{"version":"80cc3ff6d31c4235aaf2f3cb303faba93ee6be651863ffc3db33433ac779db76","impliedFormat":99},{"version":"665243d722de2dc95ca2351b6dffcceeb7a9b2bb881777b9771ab55dec4e32c3","impliedFormat":99},{"version":"49506ea016a6f383f5d463b991aa04f1e05ede9d82c61b78080a54f5c6c67ccc","impliedFormat":99},{"version":"1a1587ceeef503cd8b5472cbd745e845d1d89b329af1fe5dde0a34dcc7e11d3f","impliedFormat":99},{"version":"f372b58d2371a40a6a2336564cccdcc09c8516006afccbe23d524e9b3e6b0b50","impliedFormat":99},{"version":"234bcd30c9ec5b0485e91c5ad45409fd856f829e8fda76396147593f99ef001d","impliedFormat":99},{"version":"1bf2a90865d536fda72ea3686c9b18219d1e2582d8ece7060a3a242aaa9dc7aa","impliedFormat":99},{"version":"f2ce60764659e04d7daf572edc3dea68602ac09c4988862927167a30ac2f7b40","impliedFormat":99},{"version":"1e9a3fb05002f75b388a8a1dba9f05d564874bd06cd972f8a946840c8df01364","impliedFormat":99},{"version":"616f997335616ac58b0ca09103653c5e3f1677c7a4a34808abe5eb7836db0d8a","impliedFormat":99},{"version":"8f1018bc0bd737fdd70993e38b8d9e1069b6b1c1dbb0097c41ccd7279b57f55a","impliedFormat":99},{"version":"1f7e26fb66bcdb08484fdb1b65d379ee85d1b1a05264d2cf009f84318b4aa678","impliedFormat":99},{"version":"f72bfaaddbd122d6f2aa97df6a2f2f0caf5e0abefeae7b27d5635237554cdd5c","impliedFormat":99},{"version":"2e1a8e0777522f86ad6503c2082278c4d4e0b09259b0ad4323626976800d6806","impliedFormat":99},{"version":"d7989d7063b13e494a39b03e0ec3a5e2542e99bef41d7f9b49547e39df419747","impliedFormat":99},{"version":"26d92a20cf51acab25834bae098abfa7f6a26c2a8edd4213a880ad8c555f703a","impliedFormat":99},{"version":"f3091dd83c77ff308499705a785601faece1a49863a50a7066237d4e92fea04e","impliedFormat":99},{"version":"10b207261c316bba4a99ce037c8d40aa04e4e15e183d3f87ed7c6793c53ea9ad","impliedFormat":99},{"version":"eb79b8087e892147c0c0f44f5e7bd88c9999c96665136c21b179a7b7362a595b","impliedFormat":99},{"version":"c9ae9256eed3b3f360cae3fbcccf955233ad90bfe0cfad0f103ca3bb85de7044","impliedFormat":99},{"version":"bb3422550b34643170b845a9c8f4dafbbb4bed983a2180b7bf1a2d8fc1bfb767","impliedFormat":99},{"version":"0bfe62549a16f0ac4743d7a031ba321268a6e4b7c71bb394bffa745ae2c84b0b","impliedFormat":99},{"version":"4ad4b6f3a80c526f51c498ced3e30fed3ca33780f330046e18c553f945b51e54","impliedFormat":99},{"version":"b50427c14921a1ae22a6eff321064be09f82d2f99bd3640946bd517275fc0be2","impliedFormat":99},{"version":"86c5374ba226e809c60fdd4aa7ab64a80e1f0b32d6676edcbfa29bcbf8b65b47","impliedFormat":99},{"version":"c10ea70475948589ac588174d5cd22c6ee70565cbb46e840567b03e1df6a9255","impliedFormat":99},{"version":"4126e5d2e94808449564fc8899b68ec0bb361d00b156a2734718b687ef5dce13","impliedFormat":99},{"version":"47f2dc585b8150c5256731c3588abff64ddd707e6fa9103c42e8eb6f5216b291","impliedFormat":99},{"version":"56553d8dae36a4d29a912b7d90b99e89e19db31a2cf466153e02e518c2eed92d","impliedFormat":99},{"version":"d08c388e022005db246a56c7ad6747731807063f99bcf5a86da1fb7190cd19d5","impliedFormat":99},{"version":"d9b82403377511ff2d2b2273765e3046dca75fb6471e142f8843d1ef4ab6701d","impliedFormat":99},{"version":"5c196ddf7282a96a45224c103f3a49bc7a8de31c5d6ac8fc5791c5bfc8abda7a","impliedFormat":99},{"version":"29adc3c30ad4c07b571b7cf28a4a17be302bf51dcb4111ac6d4346b29e6f3e45","impliedFormat":99},{"version":"7b9a892374d781d2a7e2a4d8f89f866277913c8e0a7703c05f9d38907f9d2b53","impliedFormat":99},{"version":"278f73a916427e5f1bb9593de57347cfe37d06b2277be2c307590be7922789a2","impliedFormat":99},{"version":"81c67711d392d5ab7e00b7d06ab91418e451399b1d2b0ae93fce5040065c4255","impliedFormat":99},{"version":"67d125134a3f599cbc256843a07c5351d6356cdb5c183dbc223ec6eb30197508","impliedFormat":99},{"version":"21529df6d5b1968c624352ddff328a5d78d634df97567e967222651cbf527307","impliedFormat":99},{"version":"77bfd4eec7d3f787f1e0defd19334a2d9ed9477648db8dfeceffdbe5b0cab336","impliedFormat":99},{"version":"87970f078004fb8820426b99d4da3fc79f695471885541fc77cfc892b80b0067","impliedFormat":99},{"version":"bbb1ed873062b93d439596d6330f29fd48f658e6bbbac5621cee80b2bbdf026e","impliedFormat":99},{"version":"5db82aeef514204d924b85f6aa881fd82a52c9e6faad94eb7296411ed06f7809","impliedFormat":99},{"version":"33330e7d74af117dc9df333d316637acfe2a26642a8954d58b3e88451ee8f497","impliedFormat":99},{"version":"03a9ace084ff2fc3b9dfaacde474b905db9c5e864543e6db3f9c44a1d7a43055","impliedFormat":99},{"version":"98d7cc6c9ebd188e69f19a799e646d62e691d769b81780d82c9e707d3bffd20b","impliedFormat":99},{"version":"c0a9c77d44f515c0729d952fd66f27748bf3f4197a9ed98294565880c7882772","impliedFormat":99},{"version":"c0af90161ff3f25a95d11029fa4f486f3a541a00fcd026c9d010b662695d7521","impliedFormat":99},{"version":"64570d5562fc4741e7eeb24c60757be98c2e58aa74484118bce4df6ac59a8651","impliedFormat":99},{"version":"94b5161d14dddcdc370617bc3c3ae0ba5b181a2e312b9570e992f76e8ad4135a","impliedFormat":99},{"version":"58fb9077c1eb954daacdbd52bf831915076450f39888cf4edda714bca2216042","impliedFormat":99},{"version":"613a0e8239ed1f14aa4729cc733d43a0e1f2a7f2f7875af5215aee55655b6e22","impliedFormat":99},{"version":"618cea80bc8c79e91decb999d7bb5bbf6928133db9bb76a8f4df19a4d18e0cdd","impliedFormat":99},{"version":"aec18e32a40d13d4990cc0b2e505b8f653459a27c8b85b3743fa98358b03bcb1","impliedFormat":99},{"version":"73739f40eacedc63d85e344e8ecbcf2a291439ff9466ad0e1e8f4edad56ccc65","impliedFormat":99},{"version":"ba85485f6e163ec59385259ae7ee5be3167dbc092b0aab77ca8621ba2942f43a","impliedFormat":99},{"version":"c1747451983fcb7eacc2e6ddbc33024dcbd05f02c3b42f3ef85403aaeb84c35a","impliedFormat":99},{"version":"b6e7fc2eeab5dcc3f7aa96294479474b8d584f10a05b5f473638574ffaf914ef","impliedFormat":99},{"version":"b9dffe8c2cc3ea64e6aa81eec0b7250e4dbb9093ea4b296a249430e15410ad83","impliedFormat":99},{"version":"fc0b155fd95c7ebdc4acbf0012f9afe5cf3c8500f691efe874790de0741fe5f5","impliedFormat":99},{"version":"fdef563856017d9de5afc2e27ed3f8561a59711802123f6dc4cde707e570d8ba","impliedFormat":99},{"version":"34282efaad54b2b67fdcc479f19d8916ced7706d4a2a2150fe6ce495d343e6df","impliedFormat":99},{"version":"619695efa4494df83ee77ed818daf837a842ebcb93873b2024f19072b6d18209","impliedFormat":99},{"version":"4f3be5c128a12ebee37fafabd356c9bd5da5e30497b552df06a4a04523e2286c","impliedFormat":99},{"version":"94a501970c1926170fbea64d103b71780e4a74c26a96d2f081e258d2272c7010","impliedFormat":99},{"version":"a9e51a219e7a4b180e553b2f0b80620198f94fd00813b571483053b421a3a423","impliedFormat":99},{"version":"4f8e05a35f853f4a6f76169db8bcb2d25fbe47e1fe948c2545ad47111bcb641c","impliedFormat":99},{"version":"f9013dd3a5f8a78f7be9f189ceefd0caeb07d032d73d06edf5d323c5c012be06","impliedFormat":99},{"version":"fd5fdf9cec63cdc9b057589eecd950a4c00835f2c57819d4467cb90afb7ceebc","impliedFormat":99},{"version":"07f234c3b2d8259a3c8e043934e064c1d57c9b6b870bbc82995d63150658cd2d","impliedFormat":99},{"version":"70537c49ad0ba23281776a451ec0e9a3124ce0aa6826e7e2c71f2048153914e2","impliedFormat":99},{"version":"7d1570bc8a51259f43980b1e1bbfec62edfc8e56bd75a0f9f5a541df303beb2a","impliedFormat":99},{"version":"35c0302ecbaba11503e339c8d6a14ef99c33bebe45fe22348a51ea1f851f4753","impliedFormat":99},{"version":"7d0ee70479273910f4998d3db9c624cc54a7ceec1f2fc32aeb5dd1da26cc6ecd","impliedFormat":99},{"version":"ee99391e7c005b9792ed1c4ad78f63d5612ea248121435e2f19cad13cc772102","impliedFormat":99},{"version":"a63057e247853b6a27b900de357d3b2cbbb0205a746ceeaf1bbb08b53d37a594","impliedFormat":99},{"version":"54b715e3569938c71fb6ccd89b5c9d2569c67a160bf07e395afe71a8c99f6719","impliedFormat":99},{"version":"6c51831173ccc1a13f0b2e7cec9c492474ba762a67fa729f59faee88e5fef2a1","impliedFormat":99},{"version":"58f36965de212113b644068e12226e4ec4f3dc11aa8acff4bc0eb506fad853ce","impliedFormat":99},{"version":"6e280d9e7f99a769d91ea5f242404d32caae0c23241598b4447ad8e2f651d0bc","impliedFormat":99},{"version":"f91354f5e4bdf93914bd4d8d4c513a525dae7cc58c29374e602499cb59b45792","impliedFormat":99},{"version":"69eec18f3024da9245e6f8800661032de02849fdb82f4e5754234b9753ab753d","impliedFormat":99},{"version":"f508d9b5b7aa6ac0eb6c7166d8a163907670737ab6cfed72cabb18ed4d27e93a","impliedFormat":99},{"version":"72035a7a97898aa687e1226a0e42428fed98d0d269fc5afb1da4de3c614b6afa","impliedFormat":99},{"version":"afa8f9f695190917b8e7aa763b476a64c3f3818ad4e465eb84a5c542aa5ab6d3","impliedFormat":99},{"version":"bdb48a412742f28266e91f8b9c3cb93ab5e5fc4efeaab20ac23ee923d1ffab85","impliedFormat":99},{"version":"1971d324a3cbe55f05b7902adb6453dfa9c26676636961a004f7c493eb53ed68","impliedFormat":99},{"version":"8e7b4e9532df3f35e655c3596dc2a1f9e9ff645e265fe674f05948185fc20aa0","impliedFormat":99},{"version":"6394c04842b451114e283a46cff22eda53fb6cd38cef53157fb09a5477e14ce7","impliedFormat":99},{"version":"525282d1c19684b19c0ce67c09111eeb9ecddb75402afd2575b2c43c7b72587b","impliedFormat":99},{"version":"a29812309236ff935f2a25f7e5cc7c3a471879cb4e7a807d812ac7c0528aabf5","impliedFormat":99},{"version":"c0e4577ccc1f5d23c7ec9786194fe5bea12f10237ec63bbed5daef44a90ced7e","impliedFormat":99},{"version":"dcb4979825df9ee8d826545f011caf031f5143fdda9483ec1711f01cebc6dd08","impliedFormat":99},{"version":"cdca391f6e1c7e0a3c1bafed3515ce7eb93bbcc45957301b182d4b359f4dd469","impliedFormat":99},{"version":"5322996149800e888007de5157125010eb3311fdba699fff1137975c115035ab","impliedFormat":99},{"version":"31cf8f21b25cf65e0b76ae854c5c325dc4bb1658e95058bcf68d2e499f70066c","impliedFormat":99},{"version":"e6b62986b66e8f6a6db255e4d2646be1d2ae3fc14a0d39fc4bac6ddd9c579ad2","impliedFormat":99},{"version":"ab48fa147efe99bd6a50484b62119207eac0dc8d79011cc0238ab243778107a4","impliedFormat":99},{"version":"438fc2adf109b7be5ec9a92057b98fda3ef8d2be1a1846fc245d57afc57a2a50","impliedFormat":99},{"version":"ae6522bd249c23edd46831c93bb59ef402b396c3a11b8eeed1b2b6d9036c3e6b","impliedFormat":99},{"version":"68036037cdf6e6446983edda42e4222cb7725cb333b3b561cdfdf0582f22d187","impliedFormat":99},{"version":"ee2a299893b6d975f7b8d65b4d2c642e429e39f1fe1f351f42ff4fde0c34eca4","impliedFormat":99},{"version":"8d5b46732d8296ce8118fc25d13da98f1947800b9dc8b6f0b4b2e8543ec368ad","impliedFormat":99},{"version":"e9ee952913d691cbcaa172cb143691391b8dc75b6f5a60ee35c92a25ef6479f6","impliedFormat":99},{"version":"39e2c467f0c117fdd706712396f80b4bbf4ebea829a68096e0d6d62366d03eb7","impliedFormat":99},{"version":"15906c60cd7e6b25f0cb90580cc1527584a5fd3d5973daf55a10ad4587510c64","impliedFormat":99},{"version":"406ab0f368fcd5ffb379b4c0fa84b3675fbca834c2c954591552462568994cee","impliedFormat":99},{"version":"656be0f49f0d32f32dfb42b4585494e48138c15e3e56ed7402b36b9316cc5176","impliedFormat":99},{"version":"eb8a51a88c818e8e3d8b4761346e886ae46fdb8179d7938236bdb6e5e26bcc53","impliedFormat":99},{"version":"7f7059a644e3499bf802d9c252b1d99b6bdc21556f438d7693758984877fdba0","impliedFormat":99},{"version":"525f80295ebccc0b8184bd7e03dba432371f3df96b1f88399112a230f1c48e82","impliedFormat":99},{"version":"b355b8f50ac9d87bf458fa0a2762e36c2a395691bec0c21ef6826cc631dcdd34","impliedFormat":99},{"version":"822399a2755ea28ae3d97f9ac2c20eb41148a15e014dec021988d2cc514f656d","impliedFormat":99},{"version":"0b1e14cb06770ed81cf2a7085c973fcdacfbf96455fc025aedba9539f724afed","impliedFormat":99},{"version":"f6b6aa4f55562260b06aabb08367195905565e5db2b8d541f4cba5a522d05187","impliedFormat":99},{"version":"04a49a60381726dbc52583896f1e888a727ea3f15ea719ddac3f133c699bab1f","impliedFormat":99},{"version":"55f38bfa0f4091158ed411e4a54a94bde8ec5105a48d468326350a6ff98c66f2","impliedFormat":99},{"version":"96112614a8d983c6aac682b05815b82cd5d2af174713f95df46b7a5d4393adcc","impliedFormat":99},{"version":"47178e74335c75f16d18b8f9997326d65774e1e490722c1ac592e8f62d37e63e","impliedFormat":99},{"version":"5fb86ff855a340505dd1e5a0c2475696df7865f303323d7e2d005141ea73a461","impliedFormat":99},{"version":"dfc8682fae1326ef7106770fd67db712f21ab6b812c693dcce24a451d951c1e2","impliedFormat":99},{"version":"1852cfb5ae7c11bba23047e44e198416c29334c8f8b832260964c350e00db46e","impliedFormat":99},{"version":"c69baa2cba8d9f66f7cb38cecfca8c5924d6304bb59b85da457dd724a46e8548","impliedFormat":99},{"version":"3cbe672c15126cde626ccf301ef8a5b4517f2e40d63cb4234cbf72de687260e0","impliedFormat":99},{"version":"1637612654e83a9027f2ce3c21609197bc33483029256cdc4e573e8ed95d930b","impliedFormat":99},{"version":"1402212882b04813ea796e08fd07bc53409bfe4262ae72d3232e685b31cfcc02","impliedFormat":99},{"version":"fd5b89584e1132fd39773ac3d10c8003d975640fbd5f317018b2f9e3105569a1","impliedFormat":99},{"version":"c80a1f303a1f70e1c84faa586318b46badfc440a8dbfe179d34cc334fe9da4e7","impliedFormat":99},{"version":"76c1d19e111d0823e8dad68a6b2a3d86ef73545f8a0d1cb4ed9e86dab55c5f67","impliedFormat":99},{"version":"5ad24d0e258dfdb0c8293415aca74f31f28f75863ca11d58547f82dfde2efe14","impliedFormat":99},{"version":"56d26c22fbe3af215f12b5044cd8a9a6b9501c913d20de70e26607df6ec7195e","impliedFormat":99},{"version":"f580e4a5c35390e943327174a1fcbdcbe1418c7f565789287e70b5468f3e59de","impliedFormat":99},{"version":"2f725113ae18657257f08cd2837c40e47d76c4018ed791aa9e9776f1933540d1","impliedFormat":99},{"version":"523265b33f1992dd3c53594efff46af60cbb160b73bff0a576d39cca6e1ee31c","impliedFormat":99},{"version":"8329ddcba0b13dc3c59bc9df2b1e7f3559ec42336fc7591fea51143f895827f8","impliedFormat":99},{"version":"ad88f437c1230d635e5ee3e535176dd291985fd55032f4e0d1c986f36ea54da0","impliedFormat":99},{"version":"4fe3e1aea7c6e4ac1ac824814152df4d0f63f70c287aa6a45796a1fd794cba47","impliedFormat":99},{"version":"4c1b974cc791e3c5b6d85786933258725b1bafbbde2c06f8c857fde6d1e1ec78","impliedFormat":99},{"version":"4d4fd98a081f7646284761857316e2d9f0b63666c9fd2e2e1d7b782aac7b28f5","impliedFormat":99},{"version":"7a9fe3be04c4bba6773310bbed8b62349479b36bb9e984b3482ab7df6b166238","impliedFormat":99},{"version":"16f0d7f408b62da56e251e90612a169938867cc9d242756738833ddf1fc2d481","impliedFormat":99},{"version":"c51568c9c91356250e18517b1188c6aa69ff47bc08a3bf24cd9439134fbdf683","impliedFormat":99},{"version":"72fbd780809660f9ab66b163f404177f034fe946d02b76a99206b95610577d59","impliedFormat":99},{"version":"1826918b53908dc00d488bb0dd0e5ed029dd08e0bfc9188d265bfb0053f5fb9f","impliedFormat":99},{"version":"5d7597bfcca496303256fd44744c6de4531233fa3ac03e6cc1e2d945f6a6d6e5","impliedFormat":99},{"version":"2bb8a9327d7ce4e43caa06281b0b2ddd2ca80af1293ec6ba2f339ad4932cc206","impliedFormat":99},{"version":"127a4bd80467304fb1a51a76b30e297f428fe1494b7a14d9984cf56a02f2b331","impliedFormat":99},{"version":"1c5a9c6d973bc268522676437ea5f1b24a27f736ccd8af8e74f1bf868e8dbbd6","impliedFormat":99},{"version":"3cc5c94b876b4c63eaa676bbced5bef59ff9812617bbc4ab659fa065a32c54de","impliedFormat":99},{"version":"36a8ae68755fa991c0f1685bd83a67362436ed2a6e8c1a8f32acc7adffd6168f","impliedFormat":99},{"version":"6db5e9847f3760e045bfafeb945cabd5acbf16ad51c3d066c78acf2844aee7c8","impliedFormat":99},{"version":"6484fdf2b87d910c6b21c6bdfc9d4cbcb936e9ab9c2a4b53e6bfa340cf7bde98","impliedFormat":99},{"version":"f73229533c0e1695f9c75a191a5be44989ae92ca77342b713af856a97e52e498","impliedFormat":99},{"version":"f7f312b313319eb4c92cdd342b04f3b3912ed8ab704414c863129177b49447d2","impliedFormat":99},{"version":"165759e2ed45d7c271753ce028ad801ae857aa8fbc6ed8a977cdd5b0518d057d","impliedFormat":99},{"version":"d96984a14d656474db73039a4407ece06d5022fb0eb30571551e62c8c6f81a59","impliedFormat":99},{"version":"119ac9413c8a428219878da202375e364b37dfaf2b47a32e309aec8d77e8f197","impliedFormat":99},{"version":"b0672eaba1a8cad5e85defcae3e0325e0ad3a6ad16af7e6aba509f0de9ae9a3b","impliedFormat":99},{"version":"8980fca73ab1cfb4923c9311587f26d2b61915b3f0ae94e84d3f108e41904471","impliedFormat":99},{"version":"5a9a55d4531486b41b7fb9475041c068553719cd2b93a5745e01111b0d836cdd","impliedFormat":99},{"version":"bf4f74ad2c7b5da8e34b85852a258ca9003710785f5a3757f2523d93bbdb260a","impliedFormat":99},{"version":"cd8871a352586220b17d6a764af77726e3bcf563adc43a570bdb25f8a134deba","impliedFormat":99},{"version":"472edc7768eae3d1cdd6f5527f9faa60636d40b39f1d26c9b255ba7d0f354846","impliedFormat":99},{"version":"a9751001b01ed9ba9ed6515f720c486d353f6c6374ea528c98caf6cfb9caccab","impliedFormat":99},{"version":"e9acd11c45ef37d94f1b9388c6a8519cf8ab7eb53ad3cb8cf4184764711b33b2","impliedFormat":99},{"version":"676b88d0772615ae9afa3903de127c23316a44ac41002ff53685bbe68722f355","impliedFormat":99},{"version":"acdc1359ae838f192b6d94cf15a3e8cedb99a9561922951c64c413557756e3c1","impliedFormat":99},{"version":"fa5d8cb6eb7afb104fd94847dd8a739029cfabded225f93b6f09f5449b6794b7","impliedFormat":99},{"version":"316f1486e15cbf7896425f0a16dfe12d447dd57cfb3244b8b119c77df870858f","impliedFormat":99},{"version":"bef4cb2537c6229e68225e976c9d7d894ae9000b351f839867fa9d2928ef944d","impliedFormat":99},{"version":"30dcc2f014b6ae7c0e0337a87c70cac19cfd1ffe8982dbf28e37411105d32594","impliedFormat":99},{"version":"8bd7fd57f990ff10242a6acd6f20f4d7a0a6a2fa0494f3f4680add55b867e0ab","impliedFormat":99},{"version":"f943375bde83d32a00db5fa8ea97b66440e5b30e89a0ba4d30c88d49229f4f6d","impliedFormat":99},{"version":"4ab7081fcca46702defd0e6e59be019981d9862735cf3641cf8a676a7a260687","impliedFormat":99},{"version":"955faf3ddeba7f9f1cf0d3019e61fb7f256833312398e340c5b42fb2ad8ad126","impliedFormat":99},{"version":"061638545629f8821137f657fa83b50f1fc3ef24c2eea3f489f2207bd3fe8604","impliedFormat":99},{"version":"2d6fc83d9e8d8485bc153a64058691f7483710059c3b693f6d66282409de3941","impliedFormat":99},{"version":"30ac578e4e17562acc6b4a3bb1aaf3a82a6659ab86ebc6f885a894aa3ff69d2f","impliedFormat":99},{"version":"7ed24e31337a41691afdf0ed7c051bc60c1b232ec28d118c1df5eedbdf278379","impliedFormat":99},{"version":"d3a2f956b8949ab7504d1ff606c5db6f0fe878e4da6992d9e53994eb6a818780","impliedFormat":99},{"version":"bf9c521c79f941180501e9c62c05020fc07b2c82b364b3f00cb76f54f8aee2fa","impliedFormat":99},{"version":"9c98c8c56a0f74be89122bc0aebe42d00936b04bba2aef2bc65b3b97e34c5b96","impliedFormat":99},{"version":"528797ce38e264de1a333fbaccadb315baef5485eab44c4e0e85097c1b3c86d7","impliedFormat":99},{"version":"82abeb2110eeae7a9ec63d3d44b43b4cbce2e684132e4403d0995785fe981b09","impliedFormat":99},{"version":"af437ea71c5035e813d10b56bc72321f1375c42f88f2fe0696717132d040c6d4","impliedFormat":99},{"version":"4bdaf0ba0f4d2323b1cc4ebe39a1f78d9fa385d918f4f8d4c4747cc5f72524f6","impliedFormat":99},{"version":"4c700a8ce85d38625530a4c7e026ffc10436fe8101dc392f09b331ad2c32a9ad","impliedFormat":99},{"version":"6dbebda906deea3021cfcebf32f0fe178eb917fc2c475f1cc8c76ca4a3d7f146","impliedFormat":99},{"version":"ce48d094c10f12813adebaaf391bc1310c012fcb13fc6c88b29b83ea1b51a6c5","impliedFormat":99},{"version":"6a0c2673328ac13d382c06191bbcee6c00686c65e44e6a78f84819f896fef3b9","impliedFormat":99},{"version":"8ec352eabf812f3fc4ae851be15ef57753436976060bf8704149bec2d4bdacf4","impliedFormat":99},{"version":"25103a0bf17c0419062cf1376273b26fe5262aa34da7bd58584045a5e18b8a4c","impliedFormat":99},{"version":"c164152a56d491a212a6e93531c49f6f957e9a38b4bb732429a73cbb234f9cbb","impliedFormat":99},{"version":"e726e7fee8e3297e15aff8e1668762323588e119aae6e4698da6111628af74a3","impliedFormat":99},{"version":"1aefe473a947c1178322a3526f52a83db490c8cce9e57b07c0224688be55f264","impliedFormat":99},{"version":"dfedf320784a8ebe0f9b0dade5fbb6adb95f624a63bbe5760b8593f41992657f","impliedFormat":99},{"version":"ba56cb9be18354c664754abdb7b6f5dd262a7883d336018459e1e54f24586916","impliedFormat":99},{"version":"ed85a7aa3450739e9e0c4026e93e16b89ca83eb3fe7abc8527ad6dfc640140a6","impliedFormat":99},{"version":"9bb3e67ae8e93957c194b32acbd8580cf17a9df8ba44625568190bfc16e8c15a","impliedFormat":99},{"version":"4f6dc8c84a068552e39ce66235ebe650d43863b42dcb7835cff33df1b1ce6e51","impliedFormat":99},{"version":"1381f2919bf6a8b2d891ada612c23784e17cae6300db12fbb7900e9381ecf4de","impliedFormat":99},{"version":"05bbf247a54330ced6a6a821412224bdae0869f0cab0b8d4d5e49f1a6f4577a6","impliedFormat":99},{"version":"8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","impliedFormat":99},{"version":"092944a8c05f9b96579161e88c6f211d5304a76bd2c47f8d4c30053269146bc8","impliedFormat":99},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"10073cdcf56982064c5337787cc59b79586131e1b28c106ede5bff362f912b70","impliedFormat":99},{"version":"72950913f4900b680f44d8cab6dd1ea0311698fc1eefb014eb9cdfc37ac4a734","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"4e741b9c88e80c9e4cedf07b5a698e8e3a3bd73cf649f664d6dd3f868c05c2f3","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"ff0a83c9a0489a627e264ffcb63f2264b935b20a502afa3a018848139e3d8575","impliedFormat":99},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"971f12a5fc236419ced0b7b9f23a53c1758233713f565635bbf4b85e2b23f55a","impliedFormat":99},{"version":"76de3321ce519928f1ff7d7a30391c0dc7374af20f81d9167919f038895b5cb0","impliedFormat":99},{"version":"094b9210da23b8711709b0535c59841186267bf6b83c1609aa9b515f830ab274","impliedFormat":99},{"version":"fbfbb4e99c6259ff5ccc4a5a62b3b63c0c8cae6e84737786c4a4c761c9a9de91","impliedFormat":99},{"version":"604887bbd5b0a93234ce882543a465f008636185c52e0f0353330e2bc38b03b6","impliedFormat":99},{"version":"32bf912173e8a9533631f9e9d8dc90a2ac7b52c2355611ddd886beab24dfd182","impliedFormat":99},{"version":"82695324abf7f3278b6d9f0582f4a544e8f7055c8cbe1065ab5cbacde1719c4c","impliedFormat":99},{"version":"43bba542e50e19241ec64bc13cfc0d9273e6198f36563cecad1f4e4b78ad47f3","impliedFormat":99},{"version":"b8cb3b69c0e8114f758bb8ef8efeef1cc80f8911bfd21126def73d2174ce479e","impliedFormat":99},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"ee9636a7d8dc2c2c3a74924205ede5ab3437100f1f9d4379098b4972987e0ac6","impliedFormat":1},{"version":"71b110829b8f5e7653352a132544ece2b9a10e93ba1c77453187673bd46f13ee","impliedFormat":1},{"version":"7b0537621a997a853ead2b46a4d85e654beeb96b9d034ea09bf3387348521d40","impliedFormat":1},{"version":"1223780c318ef42fd33ac772996335ed92d57cf7c0fc73178acab5e154971aab","impliedFormat":1},{"version":"0d04cbe88c8a25c2debd2eef03ec5674563e23ca9323fa82ede3577822653bd2","impliedFormat":1},{"version":"aaa70439f135c3fa0a34313de49e94cae3db954c8b8d6af0d56a46c998c2923f","impliedFormat":1},{"version":"2cee3ea4c39a53326148e6e78109affd48fa69eae386871c1f440315a6120f40","impliedFormat":1},{"version":"daf07c1ca8ccfb21ad958833546a4f414c418fe096dcebdbb90b02e12aa5c3a2","impliedFormat":1},{"version":"89ac5224feeb2de76fc52fc2a91c5f6448a98dbe4e8d726ecb1730fa64cd2d30","impliedFormat":1},{"version":"3d59c264069a6af79288388633738630aa72e853e450e43f151ee092216d263d","impliedFormat":1},{"version":"acf00cfabe8c4de18bea655754ea39c4d04140257556bbf283255b695d00e36f","impliedFormat":1},{"version":"39b70d5f131fcfdeba404ee63aba25f26d8376a73bacd8275fb5a9f06219ac77","impliedFormat":1},{"version":"cdae26c737cf4534eeec210e42eab2d5f0c3855240d8dde3be4aee9194e4e781","impliedFormat":1},{"version":"5aa0c50083d0d9a423a46afaef78c7f42420759cfa038ad40e8b9e6cafc38831","impliedFormat":1},{"version":"10d6a49a99a593678ba4ea6073d53d005adfc383df24a9e93f86bf47de6ed857","impliedFormat":1},{"version":"1b7ea32849a7982047c2e5d372300a4c92338683864c9ab0f5bbd1acadae83a3","impliedFormat":1},{"version":"224083e6fcec1d300229da3d1dafc678c642863996cbfed7290df20954435a55","impliedFormat":1},{"version":"4248ac3167b1a1ce199fda9307abc314b3132527aeb94ec30dbcfe4c6a417b1b","impliedFormat":1},{"version":"c1606128c2ac5c6a3cc2cc24c4582a437141a8ed6542d7f5cbb7623835939831","impliedFormat":1},{"version":"ca055d26105248f745ea6259b4c498ebeed18c9b772e7f2b3a16f50226ff9078","impliedFormat":1},{"version":"ea6b2badb951d6dfa24bb7d7eb733327e5f9a15fc994d6dc1c54b2c7a83b6a0b","impliedFormat":1},{"version":"03fdf8dba650d830388b9985750d770dd435f95634717f41cea814863a9ac98b","impliedFormat":1},{"version":"6fd08e3ef1568cd0dc735c9015f6765e25143a4a0331d004a29c51b50eec402a","impliedFormat":1},{"version":"2e988cd4d24edac4936449630581c79686c8adac10357eb0cdb410c24f47c7f0","impliedFormat":1},{"version":"b813f62a37886ed986b0f6f8c5bf323b3fcae32c1952b71d75741e74ea9353cf","impliedFormat":1},{"version":"44a1a722038365972b1b52841e1132785bf5d75839dbc6cc1339f2d36f8507a1","impliedFormat":1},{"version":"83fe1053701101ac6d25364696fea50d2ceb2f81d1456bc11e682a20aaeac52e","impliedFormat":1},{"version":"4f228cb2089a5a135a1a8cefe612d5aebcef8258f7dbe3b7c4dad4e26a81ec08","impliedFormat":1},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fd8a5aefd8c3feb3936ca66f5aa89dff7bf6e6537b4158dbd0f6e0d65ed3b9e","impliedFormat":1},{"version":"a18642ddf216f162052a16cba0944892c4c4c977d3306a87cb673d46abbb0cbf","impliedFormat":1},{"version":"41c41c6e90133bb2a14f7561f29944771886e5535945b2b372e2f6ed6987746e","impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":1},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e4af494f7a14b226bbe732e9c130d8811f8c7025911d7c58dd97121a85519715","impliedFormat":1},{"version":"cbb1c5ba5dbabe42c19ca31b83e48fec95895484fe1d1a8fb649b69ea224c5b8","impliedFormat":99},{"version":"b34b5f6b506abb206b1ea73c6a332b9ee9c8c98be0f6d17cdbda9430ecc1efab","impliedFormat":99},{"version":"75d4c746c3d16af0df61e7b0afe9606475a23335d9f34fcc525d388c21e9058b","impliedFormat":99},{"version":"fa959bf357232201c32566f45d97e70538c75a093c940af594865d12f31d4912","impliedFormat":99},{"version":"d2c52abd76259fc39a30dfae70a2e5ce77fd23144457a7ff1b64b03de6e3aec7","impliedFormat":99},{"version":"e6233e1c976265e85aa8ad76c3881febe6264cb06ae3136f0257e1eab4a6cc5a","impliedFormat":99},{"version":"f73e2335e568014e279927321770da6fe26facd4ac96cdc22a56687f1ecbb58e","impliedFormat":99},{"version":"317878f156f976d487e21fd1d58ad0461ee0a09185d5b0a43eedf2a56eb7e4ea","impliedFormat":99},{"version":"324ac98294dab54fbd580c7d0e707d94506d7b2c3d5efe981a8495f02cf9ad96","impliedFormat":99},{"version":"9ec72eb493ff209b470467e24264116b6a8616484bca438091433a545dfba17e","impliedFormat":99},{"version":"d6ee22aba183d5fc0c7b8617f77ee82ecadc2c14359cc51271c135e23f6ed51f","impliedFormat":99},{"version":"49747416f08b3ba50500a215e7a55d75268b84e31e896a40313c8053e8dec908","impliedFormat":99},{"version":"81e634f1c5e1ca309e7e3dc69e2732eea932ef07b8b34517d452e5a3e9a36fa3","impliedFormat":99},{"version":"34f39f75f2b5aa9c84a9f8157abbf8322e6831430e402badeaf58dd284f9b9a6","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"891694d3694abd66f0b8872997b85fd8e52bc51632ce0f8128c96962b443189f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"971a2c327ff166c770c5fb35699575ba2d13bba1f6d2757309c9be4b30036c8e","impliedFormat":99},{"version":"4f45e8effab83434a78d17123b01124259fbd1e335732135c213955d85222234","impliedFormat":99},{"version":"7bd51996fb7717941cbe094b05adc0d80b9503b350a77b789bbb0fc786f28053","impliedFormat":99},{"version":"b62006bbc815fe8190c7aee262aad6bff993e3f9ade70d7057dfceab6de79d2f","impliedFormat":99},{"version":"13497c0d73306e27f70634c424cd2f3b472187164f36140b504b3756b0ff476d","impliedFormat":99},{"version":"bf7a2d0f6d9e72d59044079d61000c38da50328ccdff28c47528a1a139c610ec","impliedFormat":99},{"version":"04471dc55f802c29791cc75edda8c4dd2a121f71c2401059da61eff83099e8ab","impliedFormat":99},{"version":"120a80aa556732f684db3ed61aeff1d6671e1655bd6cba0aa88b22b88ac9a6b1","affectsGlobalScope":true,"impliedFormat":99},{"version":"e58c0b5226aff07b63be6ac6e1bec9d55bc3d2bda3b11b9b68cccea8c24ae839","affectsGlobalScope":true,"impliedFormat":99},{"version":"a23a08b626aa4d4a1924957bd8c4d38a7ffc032e21407bbd2c97413e1d8c3dbd","impliedFormat":99},{"version":"5a88655bf852c8cc007d6bc874ab61d1d63fba97063020458177173c454e9b4a","impliedFormat":99},{"version":"7e4dfae2da12ec71ffd9f55f4641a6e05610ce0d6784838659490e259e4eb13c","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"13573a613314e40482386fe9c7934f9d86f3e06f19b840466c75391fb833b99b","impliedFormat":99},{"version":"ed09d42b14a604190e8c9fc972d18ea47d5c03c6c4a0003c9620dca915a1973d","affectsGlobalScope":true,"impliedFormat":99}],"root":[609,610,1521,1522,[1525,1530],1532,[1777,1779],[1781,1838],[1844,1856],[1858,1861],[1864,1870],[1873,1878],[1882,1884],[1950,1964],1966,1967,[2033,2035],[2038,2052],[2078,2081],[2274,2278],[2304,2308],[2310,2312],[2315,2323],[2340,2351],2355,2356,[2397,2423],[2426,2467],[2472,2477],[2520,2536],[2538,2584],[2630,2703]],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"jsx":2,"module":102,"noErrorTruncation":true,"outDir":"./dist","removeComments":true,"rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[2468,1],[2469,2],[2471,3],[2470,1],[2358,4],[2359,5],[2360,6],[2361,7],[1200,8],[3195,9],[3193,5],[3194,10],[3196,11],[3191,12],[3189,5],[3192,13],[3190,14],[1534,5],[1535,5],[1537,15],[1536,5],[1538,16],[1539,17],[1542,18],[1540,5],[1541,19],[1668,20],[1674,21],[1658,22],[1675,23],[1651,24],[1667,25],[1659,4],[1660,4],[1661,26],[1662,26],[1664,27],[1666,28],[1671,29],[1669,30],[1670,26],[1682,31],[1676,32],[1672,26],[1652,33],[1657,34],[1665,35],[1673,35],[1654,36],[1655,37],[1656,30],[1663,35],[1678,5],[1677,5],[1679,5],[1680,5],[1681,38],[1653,5],[342,5],[329,5],[66,5],[318,39],[319,39],[320,5],[321,4],[331,40],[322,39],[323,41],[324,5],[325,5],[326,39],[327,39],[328,39],[330,42],[338,43],[340,5],[337,5],[344,44],[341,5],[339,5],[335,45],[336,46],[343,47],[345,48],[332,5],[334,49],[333,50],[272,5],[275,51],[271,5],[1261,5],[273,5],[274,5],[348,52],[349,52],[350,52],[351,52],[352,52],[353,52],[354,52],[347,53],[355,52],[369,54],[356,52],[346,5],[357,52],[358,52],[359,52],[360,52],[361,52],[362,52],[363,52],[364,52],[365,52],[366,52],[367,52],[368,52],[377,55],[375,56],[374,5],[373,5],[376,57],[417,58],[67,5],[68,5],[69,5],[1243,59],[71,60],[1249,61],[1248,62],[261,63],[262,60],[397,5],[291,5],[292,5],[398,64],[263,5],[399,5],[400,65],[70,5],[265,66],[266,67],[264,68],[267,66],[268,5],[270,69],[282,70],[283,5],[288,71],[284,5],[285,5],[286,5],[287,5],[289,5],[290,72],[296,73],[299,74],[297,5],[298,5],[317,75],[300,5],[301,5],[1292,76],[281,77],[279,78],[277,79],[278,80],[280,5],[308,81],[302,5],[311,82],[304,83],[309,84],[307,85],[310,86],[305,87],[306,88],[294,89],[313,90],[295,91],[315,92],[316,93],[303,5],[312,5],[269,5],[276,94],[314,95],[383,96],[378,5],[384,97],[379,98],[380,99],[381,100],[382,101],[385,102],[390,103],[388,104],[389,104],[396,105],[386,5],[387,106],[391,103],[393,107],[395,108],[394,109],[409,110],[402,111],[403,112],[404,112],[405,113],[406,113],[407,112],[408,112],[401,114],[411,115],[410,116],[413,117],[412,118],[414,119],[370,120],[372,121],[293,5],[371,89],[1780,89],[415,122],[392,123],[416,124],[418,125],[1214,126],[1234,127],[1235,128],[1236,5],[1237,129],[1238,130],[1721,5],[1722,131],[1247,132],[1240,133],[1244,134],[1252,135],[1250,4],[1251,136],[1241,137],[1253,5],[1255,138],[1256,139],[1257,140],[1246,141],[1242,142],[1266,143],[1254,144],[1281,145],[1239,146],[1282,147],[1279,148],[1280,4],[1304,149],[1229,150],[1225,151],[1227,152],[1278,153],[1220,154],[1268,155],[1267,5],[1228,156],[1275,157],[1232,158],[1276,5],[1277,159],[1230,160],[1231,161],[1226,162],[1224,163],[1219,5],[1272,164],[1285,165],[1283,4],[1215,4],[1271,166],[1216,46],[1217,128],[1218,167],[1222,168],[1221,169],[1284,170],[1223,171],[1260,172],[1258,138],[1259,173],[1269,46],[1270,174],[1273,175],[1288,176],[1289,177],[1286,178],[1287,179],[1290,180],[1291,181],[1293,182],[1265,183],[1262,184],[1263,39],[1264,173],[1295,185],[1294,186],[1301,187],[1233,4],[1297,188],[1296,4],[1299,189],[1298,5],[1300,190],[1245,191],[1274,192],[1303,193],[1302,4],[539,194],[540,195],[554,196],[542,197],[541,198],[536,199],[537,5],[538,5],[553,200],[544,201],[545,201],[546,201],[547,201],[549,202],[548,201],[550,203],[551,204],[543,5],[552,205],[2424,4],[2353,206],[2352,207],[2354,208],[1370,209],[1373,210],[1371,5],[1372,5],[1361,5],[1362,211],[1377,212],[1374,4],[1375,213],[1376,209],[1378,214],[896,5],[897,5],[900,215],[922,216],[901,5],[902,5],[903,4],[905,5],[904,5],[923,5],[906,5],[907,217],[908,5],[909,4],[910,5],[911,218],[913,219],[914,5],[916,220],[917,219],[918,221],[924,222],[919,218],[920,5],[925,223],[930,224],[939,225],[921,5],[912,218],[929,226],[898,5],[915,227],[927,228],[928,5],[926,5],[931,229],[936,230],[932,4],[933,4],[934,4],[935,4],[899,5],[937,5],[938,231],[2593,232],[2591,233],[2585,4],[2586,5],[2590,234],[2587,235],[2592,236],[2589,237],[2588,238],[2280,239],[2279,240],[2295,5],[2281,5],[2282,5],[2296,241],[2283,4],[2293,242],[2294,5],[2298,243],[2297,5],[2299,4],[2300,244],[2302,245],[2303,246],[2284,247],[2288,248],[2285,5],[2286,5],[2287,5],[2292,249],[2301,5],[2289,95],[2290,5],[2291,5],[2064,250],[2067,251],[2066,252],[2065,253],[2063,254],[2059,255],[2062,256],[2061,257],[2060,258],[2058,254],[2073,259],[2072,260],[2071,261],[2070,262],[2069,263],[2068,264],[2169,265],[2170,266],[2171,267],[2164,5],[2165,268],[2166,269],[2167,270],[2168,271],[1734,272],[1737,273],[1743,274],[1746,275],[1767,276],[1745,277],[1726,5],[1727,278],[1728,279],[1731,5],[1729,5],[1730,5],[1768,280],[1733,272],[1732,5],[1769,281],[1736,273],[1735,5],[1773,282],[1770,283],[1740,284],[1742,285],[1739,286],[1741,287],[1738,284],[1771,288],[1744,272],[1772,289],[1757,290],[1759,291],[1761,292],[1760,293],[1754,294],[1747,295],[1766,296],[1763,297],[1765,298],[1750,299],[1752,300],[1749,297],[1753,5],[1764,301],[1751,5],[1762,5],[1748,5],[1755,302],[1756,5],[1758,303],[2251,304],[2250,305],[2252,306],[2244,5],[2249,307],[2246,308],[2248,308],[2247,308],[2245,308],[2082,270],[2083,309],[2084,309],[2085,310],[2095,5],[2087,270],[2096,270],[2088,5],[2089,270],[2091,311],[2098,5],[2092,312],[2093,270],[2094,5],[2090,270],[2113,313],[2112,314],[2101,315],[2097,5],[2100,316],[2099,5],[2102,270],[2106,270],[2103,270],[2104,270],[2105,270],[2110,5],[2111,270],[2107,5],[2108,5],[2109,5],[2161,317],[2162,318],[2160,319],[2163,320],[2187,321],[2188,322],[2186,323],[2191,324],[2190,325],[2189,326],[2193,5],[2194,327],[2192,328],[2199,5],[2200,329],[2198,330],[2197,331],[2174,332],[2185,333],[2176,334],[2181,335],[2182,335],[2180,336],[2179,337],[2177,338],[2178,339],[2184,5],[2175,335],[2172,340],[2173,334],[2183,335],[2116,341],[2127,342],[2115,343],[2128,5],[2117,344],[2118,345],[2125,343],[2126,346],[2124,347],[2119,345],[2120,345],[2121,345],[2122,345],[2123,348],[2129,349],[2114,350],[2202,351],[2204,352],[2214,353],[2210,354],[2207,355],[2209,355],[2206,356],[2205,357],[2201,357],[2208,358],[2215,359],[2213,360],[2211,361],[2212,362],[2203,363],[2147,364],[2158,365],[2136,366],[2140,367],[2137,368],[2141,368],[2142,368],[2138,5],[2139,5],[2143,369],[2148,370],[2149,371],[2086,5],[2153,372],[2157,373],[2156,374],[2130,375],[2150,376],[2151,372],[2154,377],[2155,378],[2159,379],[2152,5],[2131,380],[2144,381],[2145,382],[2132,270],[2134,383],[2135,384],[2133,5],[2146,385],[2254,386],[2243,387],[2253,388],[2242,389],[2223,390],[2216,5],[2217,270],[2220,391],[2221,392],[2218,270],[2225,393],[2230,394],[2231,394],[2233,395],[2219,396],[2232,397],[2224,398],[2238,399],[2229,400],[2227,401],[2226,402],[2228,403],[2234,404],[2235,404],[2236,405],[2237,404],[2222,406],[2240,407],[2239,408],[2241,409],[2262,410],[2257,5],[2258,411],[2259,5],[2261,5],[2260,5],[2255,5],[2256,412],[1905,413],[1906,413],[1908,414],[1909,413],[1910,413],[1949,415],[1911,413],[1912,413],[1913,413],[1914,413],[1915,413],[1916,413],[1917,413],[1918,413],[1919,413],[1921,416],[1887,417],[1922,413],[1923,413],[1947,418],[1945,419],[1944,5],[1943,5],[1946,420],[1948,413],[1349,5],[1872,421],[1871,422],[2054,423],[1533,5],[1879,424],[534,425],[3251,426],[555,427],[533,428],[556,429],[1340,428],[3249,5],[3183,5],[530,430],[535,431],[2030,432],[531,5],[2384,433],[2364,434],[2366,435],[2365,434],[2368,436],[2370,437],[2371,438],[2372,439],[2373,437],[2374,438],[2375,437],[2376,440],[2377,438],[2378,437],[2379,441],[2380,434],[2381,434],[2382,442],[2369,443],[2383,444],[2367,444],[2309,5],[1881,445],[1202,446],[1203,447],[1201,448],[1204,449],[1205,450],[1206,451],[1207,452],[1208,453],[1209,454],[1210,455],[1211,456],[1212,457],[1213,458],[568,459],[561,460],[565,461],[563,462],[566,463],[564,464],[567,465],[562,5],[560,466],[559,467],[1880,5],[2425,468],[473,469],[474,469],[475,470],[421,471],[476,472],[477,473],[478,474],[419,5],[479,475],[480,476],[481,477],[482,478],[483,479],[484,480],[485,480],[486,481],[487,482],[488,483],[489,484],[422,5],[420,5],[490,485],[491,486],[492,487],[526,488],[493,489],[494,5],[495,490],[496,491],[497,492],[498,339],[499,493],[500,494],[501,495],[502,496],[503,497],[504,497],[505,498],[506,5],[507,499],[508,500],[510,501],[509,502],[511,503],[512,504],[513,505],[514,506],[515,507],[516,508],[517,509],[518,510],[519,511],[520,512],[521,513],[522,514],[523,515],[423,5],[424,516],[425,5],[426,5],[469,517],[470,518],[471,5],[472,503],[524,519],[525,520],[1901,521],[1888,522],[1895,523],[1891,524],[1889,525],[1892,526],[1896,527],[1897,523],[1894,528],[1893,529],[1898,530],[1899,531],[1900,532],[1890,533],[2196,534],[2195,535],[1198,536],[1197,537],[1843,538],[1839,5],[1840,5],[1842,539],[1841,5],[1907,5],[528,5],[529,5],[1902,5],[1904,540],[1920,413],[2053,541],[2339,542],[593,543],[594,544],[570,545],[573,546],[591,543],[592,543],[582,543],[581,547],[579,543],[574,543],[587,543],[585,543],[589,543],[569,543],[586,543],[590,543],[575,543],[576,543],[588,543],[571,543],[577,543],[578,543],[580,543],[584,543],[595,548],[583,543],[572,543],[608,549],[607,5],[602,548],[604,550],[603,548],[596,548],[597,548],[599,548],[601,548],[605,550],[606,550],[598,550],[600,550],[527,551],[532,552],[2363,522],[1421,553],[1412,5],[1413,5],[1414,5],[1415,5],[1416,5],[1417,5],[1418,5],[1419,5],[1420,5],[3144,554],[1337,554],[3261,555],[3238,556],[3236,5],[3237,5],[2704,5],[2715,557],[2710,558],[2713,559],[3252,560],[3243,5],[3246,561],[3245,562],[3257,562],[3244,563],[3260,5],[2712,564],[2714,564],[2706,565],[2709,566],[3239,565],[2711,567],[2705,5],[3250,5],[1968,5],[1986,568],[1979,569],[1970,570],[1980,571],[1978,572],[1971,5],[1981,573],[1982,574],[1983,5],[1984,575],[1974,576],[1972,577],[1969,5],[1975,5],[1985,5],[1977,578],[1976,579],[1973,5],[427,5],[1543,5],[1559,580],[1623,581],[1624,582],[1622,583],[1625,5],[1630,584],[1626,5],[1627,5],[1628,5],[1629,5],[1636,585],[1647,586],[1637,587],[1635,588],[1639,589],[1633,590],[1640,591],[1634,592],[1641,593],[1606,5],[1643,594],[1632,595],[1642,587],[1644,596],[1631,597],[1646,598],[1593,5],[1594,5],[1597,599],[1595,5],[1562,5],[1596,5],[1650,600],[1561,601],[1544,5],[1550,602],[1563,603],[1586,604],[1600,605],[1621,606],[1601,5],[1555,607],[1602,608],[1603,609],[1604,5],[1605,5],[1557,610],[1608,611],[1609,612],[1546,5],[1554,613],[1610,5],[1599,614],[1611,5],[1620,5],[1592,615],[1612,5],[1549,616],[1613,5],[1614,5],[1615,5],[1617,617],[1616,618],[1618,619],[1607,620],[1598,621],[1619,622],[1558,623],[1587,5],[1551,5],[1588,5],[1591,624],[1556,625],[1552,626],[1553,5],[1589,613],[1590,627],[1545,5],[1645,628],[1560,629],[1649,630],[1648,631],[2056,632],[2057,633],[1322,634],[1323,634],[1324,634],[1330,635],[1325,634],[1326,634],[1327,634],[1328,634],[1329,634],[1313,636],[1312,5],[1331,637],[1319,5],[1315,638],[1306,5],[1305,5],[1307,5],[1308,634],[1309,639],[1321,640],[1310,634],[1311,634],[1316,641],[1317,642],[1318,634],[1314,5],[1320,5],[1382,5],[1384,643],[1503,644],[1507,644],[1506,644],[1504,644],[1505,644],[1508,644],[1385,644],[1397,644],[1386,644],[1399,644],[1401,644],[1394,644],[1395,644],[1396,644],[1400,644],[1402,644],[1387,644],[1398,644],[1388,644],[1390,645],[1391,644],[1392,644],[1393,644],[1409,644],[1408,644],[1511,646],[1403,644],[1405,644],[1404,644],[1406,644],[1407,644],[1510,644],[1509,644],[1410,644],[1422,647],[1423,647],[1425,644],[1471,644],[1470,644],[1491,644],[1426,647],[1468,644],[1472,644],[1427,644],[1428,644],[1429,647],[1473,644],[1467,647],[1424,647],[1474,644],[1430,647],[1475,644],[1431,647],[1455,644],[1432,644],[1476,644],[1433,644],[1465,647],[1435,644],[1436,644],[1477,648],[1438,644],[1440,644],[1441,644],[1447,644],[1448,644],[1449,644],[1442,647],[1479,644],[1466,647],[1478,647],[1443,644],[1444,644],[1480,644],[1445,644],[1437,647],[1481,644],[1464,644],[1482,644],[1446,647],[1450,644],[1451,644],[1469,647],[1483,644],[1484,644],[1463,649],[1439,644],[1485,647],[1486,644],[1487,644],[1488,644],[1489,647],[1452,644],[1490,644],[1454,647],[1456,644],[1453,647],[1434,644],[1457,644],[1460,644],[1458,644],[1459,644],[1411,644],[1493,644],[1492,644],[1494,644],[1501,644],[1495,644],[1496,644],[1498,644],[1499,644],[1497,644],[1502,644],[1500,644],[1519,650],[1517,651],[1518,652],[1516,653],[1515,644],[1514,654],[1381,5],[1383,5],[1379,5],[1512,5],[1513,655],[1389,643],[1380,5],[2362,5],[611,5],[1547,5],[1548,656],[1364,5],[1363,5],[1369,657],[1365,658],[1368,659],[1367,660],[1366,5],[1903,5],[1580,5],[2329,661],[2326,5],[2328,662],[2327,663],[2336,661],[2335,661],[2337,664],[2334,665],[2332,661],[2333,661],[2330,666],[2331,661],[1332,5],[1334,667],[1333,667],[1335,668],[1341,5],[1348,669],[1336,5],[1342,670],[1339,671],[1338,672],[1346,673],[1343,674],[1344,675],[1345,676],[1347,677],[3188,5],[2018,5],[2008,678],[1989,679],[2019,5],[1990,5],[2021,680],[2022,5],[2023,5],[2014,5],[1995,681],[1991,682],[1992,682],[1993,682],[2029,683],[2007,684],[1994,685],[1997,686],[2024,687],[1988,679],[1998,688],[1999,688],[2001,689],[2000,688],[2010,5],[2025,5],[2002,688],[1987,5],[2020,5],[2009,5],[2011,690],[2012,691],[2013,692],[2003,693],[2026,687],[2015,5],[1996,679],[2004,5],[2027,694],[2006,695],[2028,696],[2005,697],[2016,698],[2017,699],[3268,700],[3270,701],[3269,702],[3267,703],[3266,5],[2077,704],[2076,705],[2075,706],[2074,707],[2037,708],[2036,5],[2537,5],[2716,5],[2727,709],[3165,710],[3163,711],[3161,712],[3162,713],[3169,714],[3168,715],[3166,716],[3167,717],[2717,5],[2718,5],[3019,718],[3026,719],[3034,720],[3030,721],[3002,5],[3160,722],[3028,723],[3029,5],[3164,724],[3027,725],[3018,726],[3036,727],[3035,728],[2969,729],[2960,730],[2726,5],[3006,731],[3003,5],[3007,732],[3170,733],[3008,734],[3004,5],[3005,5],[3011,735],[3013,736],[3012,735],[3010,5],[3038,737],[2748,738],[2746,5],[2753,739],[3037,5],[2752,740],[2754,741],[2743,742],[2742,5],[2750,743],[3039,744],[3040,745],[2749,746],[3041,745],[3042,747],[2751,748],[3139,749],[3047,750],[3048,744],[3043,5],[3044,751],[3046,752],[3045,753],[2747,754],[3134,755],[3050,756],[3049,757],[2983,758],[3051,759],[2792,760],[2791,761],[2789,762],[2974,763],[2788,764],[2755,765],[2820,766],[2790,5],[2787,5],[2799,767],[2798,768],[2793,5],[2797,5],[2795,5],[2796,5],[2794,769],[3054,770],[3052,771],[3053,772],[2721,773],[2720,5],[3147,774],[2719,5],[2722,775],[3056,776],[3058,777],[3055,776],[2725,778],[2723,779],[2724,779],[3057,780],[3059,781],[3061,782],[3063,783],[3143,784],[3065,785],[3067,786],[3069,787],[3071,788],[3060,789],[3062,790],[3142,789],[3064,789],[3066,789],[3068,791],[3070,789],[3072,792],[3074,793],[2829,794],[3076,789],[3078,795],[3080,791],[3082,796],[3140,789],[3084,789],[3087,797],[3089,798],[3091,799],[3093,793],[3073,800],[3075,801],[3077,802],[2830,803],[3079,804],[3081,805],[3083,806],[3141,807],[3085,808],[3088,809],[3090,810],[3092,811],[3094,812],[3095,5],[3096,813],[3148,814],[2992,815],[3153,816],[2999,817],[3021,818],[3022,818],[3020,5],[3023,819],[2997,5],[3014,818],[3015,818],[2998,820],[3017,821],[3016,5],[3000,822],[3155,823],[3157,5],[3152,824],[2994,825],[3154,826],[3156,5],[2993,818],[3128,827],[3150,5],[3097,828],[3149,5],[3151,5],[2873,5],[2996,827],[2761,829],[2762,728],[3098,830],[2995,831],[3099,832],[3033,833],[3031,5],[3032,834],[3171,835],[3177,836],[3101,765],[3102,837],[3100,838],[2855,839],[3103,840],[3025,841],[3024,5],[3135,5],[3138,842],[3136,5],[3137,843],[3159,5],[2734,844],[2733,5],[3104,845],[2732,846],[2731,5],[3106,847],[3107,848],[3111,849],[3105,848],[3108,847],[2756,850],[2784,851],[2782,852],[2783,853],[2984,854],[2961,855],[2982,856],[3001,857],[2985,5],[3112,709],[2991,5],[2978,858],[2759,766],[2975,859],[2822,860],[2823,860],[3113,861],[2838,862],[2839,863],[2840,864],[2841,757],[2776,865],[3132,866],[2844,867],[2842,5],[2843,868],[2845,757],[2846,757],[2772,869],[2847,870],[2848,871],[2849,757],[3114,872],[2757,873],[2850,757],[2777,874],[2780,875],[2781,876],[2779,877],[2778,878],[2851,757],[2852,757],[2853,757],[2854,757],[2821,5],[2857,879],[2858,863],[3115,880],[2763,771],[2773,881],[2760,5],[2771,882],[2859,883],[2860,757],[2861,884],[2862,885],[2837,886],[2826,5],[2827,5],[2831,887],[2828,888],[2825,889],[2835,890],[2832,891],[2833,892],[2834,5],[2836,893],[2824,5],[3117,894],[3116,5],[2863,757],[2864,757],[2764,895],[2865,757],[2866,757],[2774,896],[2867,757],[2767,897],[2765,898],[2868,757],[2869,757],[2870,757],[2871,757],[2766,895],[2872,757],[2874,899],[2768,900],[2769,901],[2786,902],[2875,757],[2876,757],[2758,903],[2877,757],[2878,757],[2879,757],[2882,904],[2880,905],[2881,906],[2963,907],[2770,908],[2964,757],[2965,757],[2966,909],[2967,757],[3118,757],[2968,862],[2744,910],[2745,911],[2741,911],[2740,911],[2739,912],[2736,913],[2737,911],[2735,5],[2973,914],[2729,5],[2730,915],[2728,5],[2976,916],[2990,854],[2962,917],[2884,918],[2885,918],[2886,918],[2883,919],[2889,920],[2891,921],[2910,922],[2892,923],[2893,924],[2971,925],[2894,920],[2896,926],[2899,927],[2900,928],[2901,927],[2904,929],[2905,930],[2906,931],[2907,932],[2908,930],[2909,928],[2911,933],[2912,933],[2913,933],[2914,933],[2915,931],[2916,934],[2917,928],[2918,935],[2919,931],[2920,930],[2921,932],[2922,930],[2923,932],[2924,928],[2925,936],[2926,926],[2927,937],[2928,923],[2888,938],[2931,939],[2806,940],[2929,941],[2930,920],[2932,942],[2937,935],[2934,943],[2935,944],[2936,924],[2938,945],[2939,946],[2941,947],[2942,947],[2943,942],[2944,920],[2945,948],[2946,918],[2947,932],[2972,949],[2970,950],[2948,923],[2949,923],[2957,951],[2950,952],[2954,951],[2955,953],[2953,954],[2956,924],[2958,955],[2959,924],[2785,956],[3119,957],[3109,958],[3110,959],[2738,5],[2987,852],[2988,960],[2986,5],[3120,5],[3121,958],[3122,961],[3123,962],[2989,963],[3086,964],[2812,965],[2811,5],[2933,966],[2902,967],[2890,967],[2903,967],[2819,968],[2952,969],[2887,967],[2898,970],[2818,971],[2814,972],[2895,967],[2805,973],[2810,974],[2951,968],[2809,5],[2801,975],[2813,967],[2897,976],[2808,967],[2940,977],[2817,978],[2816,5],[2815,5],[2807,967],[2800,967],[2803,979],[2804,980],[2802,5],[3133,5],[3172,5],[2980,981],[2979,852],[2981,982],[3009,983],[2775,984],[3145,985],[3146,986],[2856,987],[3173,988],[3175,989],[3131,5],[3158,5],[2977,5],[3174,990],[3129,991],[3124,992],[3125,5],[3126,993],[3127,5],[3176,994],[3130,852],[557,199],[2325,995],[2324,5],[2338,996],[1965,5],[3206,5],[1684,997],[1700,998],[1702,999],[1701,1000],[1685,522],[1699,1001],[1697,1002],[1698,1003],[1696,1004],[1689,1005],[1690,1006],[1692,1007],[1693,1008],[1691,1009],[1694,1010],[1703,1011],[1695,1012],[1687,1013],[1683,1014],[1688,1015],[1686,997],[1565,1016],[1582,1017],[1584,1018],[1583,1019],[1566,522],[1581,1020],[1578,1021],[1579,1022],[1577,1004],[1570,1023],[1571,1024],[1573,1025],[1574,1026],[1572,1027],[1575,1028],[1585,1029],[1576,1030],[1568,1031],[1564,1014],[1569,1032],[1567,1016],[644,1033],[613,1034],[623,1034],[614,1034],[624,1034],[615,1034],[616,1034],[631,1034],[630,1034],[632,1034],[633,1034],[625,1034],[617,1034],[626,1034],[618,1034],[627,1034],[619,1034],[621,1034],[629,1035],[622,1034],[628,1035],[634,1035],[620,1034],[635,1034],[640,1034],[641,1034],[636,1034],[612,5],[642,5],[638,1034],[637,1034],[639,1034],[643,1034],[1531,1036],[736,5],[858,1037],[737,1038],[738,1039],[877,1040],[878,1041],[879,1042],[880,1043],[881,1044],[882,1045],[870,1046],[865,1047],[866,1048],[867,1049],[869,1044],[868,1050],[864,1046],[871,1047],[873,1051],[872,1052],[863,1044],[862,1053],[876,1046],[859,1047],[860,1054],[861,1055],[875,1044],[874,1056],[739,1047],[734,1057],[855,1058],[735,1059],[857,1060],[856,1061],[762,1062],[759,1063],[819,1064],[797,1065],[776,1066],[704,1067],[1523,1068],[895,1069],[841,1070],[884,1071],[883,1038],[661,1072],[670,1073],[674,1074],[783,1075],[694,1076],[665,1077],[676,1078],[773,1076],[753,1076],[788,1079],[852,1076],[647,1080],[691,1080],[660,1081],[648,1080],[721,1076],[699,1082],[700,1083],[669,1084],[678,1085],[679,1080],[680,1086],[682,1087],[712,1088],[745,1076],[847,1076],[649,1076],[728,1089],[662,1090],[671,1080],[673,1091],[713,1080],[714,1092],[715,1093],[716,1093],[706,1094],[709,1095],[666,1096],[683,1076],[849,1076],[650,1076],[684,1076],[685,1097],[686,1076],[646,1076],[725,1098],[688,1099],[792,1100],[790,1076],[791,1101],[793,1102],[689,1076],[846,1076],[851,1076],[720,1103],[672,1072],[690,1076],[722,1104],[723,1105],[687,1076],[703,1076],[891,1106],[853,1107],[645,5],[754,1076],[724,1076],[774,1076],[692,1108],[693,1109],[717,1076],[782,1110],[775,1076],[780,1111],[781,1112],[667,1113],[820,1076],[729,1114],[664,1076],[696,1115],[659,1116],[730,1093],[663,1090],[675,1080],[718,1117],[651,1080],[695,1076],[702,1076],[711,1118],[698,1119],[707,1076],[697,1120],[652,1093],[710,1076],[850,1076],[848,1076],[668,1113],[726,1121],[727,1076],[681,1076],[708,1076],[821,1122],[719,1076],[677,1076],[701,1123],[757,1124],[779,1125],[764,5],[746,1126],[743,1127],[833,1128],[798,1129],[767,1130],[822,1131],[761,1132],[836,1133],[766,1134],[784,1135],[799,1136],[824,1137],[839,1138],[796,1139],[763,1140],[771,1141],[760,1142],[795,1143],[894,1144],[834,1145],[823,1146],[755,1147],[832,1148],[885,1149],[886,1149],[890,1150],[889,1151],[740,1152],[888,1149],[887,1149],[786,1153],[789,1154],[831,1155],[830,1156],[654,5],[787,1157],[770,1158],[828,1159],[653,5],[758,1160],[794,1161],[835,1162],[657,5],[769,1163],[826,1164],[777,1165],[765,1166],[827,1167],[785,1168],[825,1169],[752,1170],[778,1171],[829,1172],[655,5],[768,1173],[732,1174],[854,1175],[733,1176],[837,1177],[844,1178],[845,1179],[843,1180],[811,1181],[741,1182],[812,1183],[842,1184],[748,1185],[750,1186],[800,1187],[804,1188],[751,1189],[749,1189],[803,1190],[744,1191],[805,1192],[806,1193],[807,1194],[815,1195],[813,1196],[808,1197],[809,1198],[810,1199],[816,1200],[814,1201],[747,1202],[802,1203],[817,1204],[818,1205],[801,1206],[756,1207],[742,1057],[705,1208],[892,1209],[893,5],[838,1210],[840,1061],[731,5],[772,5],[656,5],[658,1211],[1031,5],[1153,1212],[1032,1213],[1033,1214],[1172,1215],[1173,1216],[1174,1217],[1175,1218],[1176,1219],[1177,1220],[1165,1221],[1160,1222],[1161,1223],[1162,1224],[1164,1219],[1163,1225],[1159,1221],[1166,1222],[1168,1226],[1167,1227],[1158,1219],[1157,1228],[1171,1221],[1154,1222],[1155,1229],[1156,1230],[1170,1219],[1169,1231],[1034,1222],[1029,1232],[1150,1233],[1030,1234],[1152,1235],[1151,1236],[1057,1237],[1054,1238],[1114,1239],[1092,1240],[1071,1241],[999,1242],[1190,1243],[1136,1244],[1179,1245],[1178,1213],[956,1246],[965,1247],[969,1248],[1078,1249],[989,1250],[960,1251],[971,1252],[1068,1250],[1048,1250],[1083,1253],[1147,1250],[942,1254],[986,1254],[955,1255],[943,1254],[1016,1250],[994,1256],[995,1257],[964,1258],[973,1259],[974,1254],[975,1260],[977,1261],[1007,1262],[1040,1250],[1142,1250],[944,1250],[1023,1263],[957,1264],[966,1254],[968,1265],[1008,1254],[1009,1266],[1010,1267],[1011,1267],[1001,1268],[1004,1269],[961,1270],[978,1250],[1144,1250],[945,1250],[979,1250],[980,1271],[981,1250],[941,1250],[1020,1272],[983,1273],[1087,1274],[1085,1250],[1086,1275],[1088,1276],[984,1250],[1141,1250],[1146,1250],[1015,1277],[967,1246],[985,1250],[1017,1278],[1018,1279],[982,1250],[998,1250],[1186,1280],[1148,1281],[940,5],[1049,1250],[1019,1250],[1069,1250],[987,1282],[988,1283],[1012,1250],[1077,1284],[1070,1250],[1075,1285],[1076,1286],[962,1287],[1115,1250],[1024,1288],[959,1250],[991,1289],[954,1290],[1025,1267],[958,1264],[970,1254],[1013,1291],[946,1254],[990,1250],[997,1250],[1006,1292],[993,1293],[1002,1250],[992,1294],[947,1267],[1005,1250],[1145,1250],[1143,1250],[963,1287],[1021,1295],[1022,1250],[976,1250],[1003,1250],[1116,1296],[1014,1250],[972,1250],[996,1297],[1052,1298],[1074,1299],[1059,5],[1041,1300],[1038,1301],[1128,1302],[1093,1303],[1062,1304],[1117,1305],[1056,1306],[1131,1307],[1061,1308],[1079,1309],[1094,1310],[1119,1311],[1134,1312],[1091,1313],[1058,1314],[1066,1315],[1055,1316],[1090,1317],[1189,1318],[1129,1319],[1118,1320],[1050,1321],[1127,1322],[1180,1323],[1181,1323],[1185,1324],[1184,1325],[1035,1326],[1183,1323],[1182,1323],[1081,1327],[1084,1328],[1126,1329],[1125,1330],[949,5],[1082,1331],[1065,1332],[1123,1333],[948,5],[1053,1334],[1089,1335],[1130,1336],[952,5],[1064,1337],[1121,1338],[1072,1339],[1060,1340],[1122,1341],[1080,1342],[1120,1343],[1047,1344],[1073,1345],[1124,1346],[950,5],[1063,1347],[1027,1348],[1149,1349],[1028,1350],[1132,1351],[1139,1352],[1140,1353],[1138,1354],[1106,1355],[1036,1356],[1107,1357],[1137,1358],[1043,1359],[1045,1360],[1095,1361],[1099,1362],[1046,1363],[1044,1363],[1098,1364],[1039,1365],[1100,1366],[1101,1367],[1102,1368],[1110,1369],[1108,1370],[1103,1371],[1104,1372],[1105,1373],[1111,1374],[1109,1375],[1042,1376],[1097,1377],[1112,1378],[1113,1379],[1096,1380],[1051,1381],[1037,1232],[1000,1382],[1187,1383],[1188,5],[1133,1384],[1135,1236],[1026,5],[1067,5],[951,5],[953,1385],[1462,1386],[1461,5],[3229,5],[3231,1387],[3230,5],[2479,5],[2480,5],[2481,5],[2482,5],[2483,5],[2485,1388],[2486,5],[2487,5],[2489,5],[2488,1388],[2490,1388],[2491,1388],[2492,5],[2493,5],[2494,1388],[2495,5],[2519,1389],[2496,5],[2497,1388],[2498,5],[2500,1390],[2499,1388],[2502,1391],[2501,1388],[2503,5],[2504,5],[2505,5],[2506,5],[2478,5],[2508,1388],[2507,5],[2509,5],[2510,5],[2511,1388],[2512,5],[2513,5],[2514,5],[2516,5],[2515,5],[2484,5],[2517,1388],[2518,5],[2357,5],[2388,1392],[2385,1393],[2391,1394],[2392,1395],[2386,1396],[2389,1397],[2390,1398],[2387,5],[2393,5],[2396,1399],[2394,1400],[2395,4],[1725,1401],[1710,1402],[1711,1403],[1712,1402],[1713,1404],[1714,1402],[1718,1405],[1715,1406],[1716,5],[1709,1407],[1707,1408],[1719,5],[1708,1409],[1720,5],[1723,1410],[1717,1411],[1705,1412],[1704,5],[1706,5],[1724,5],[1524,1413],[2272,1414],[1776,1415],[1775,270],[1774,1416],[2268,1417],[2270,1418],[2269,1417],[2267,5],[2266,1419],[2271,5],[2263,1420],[2273,5],[2264,270],[2265,270],[1638,5],[1862,5],[1863,1421],[1199,537],[1196,1422],[1193,424],[1195,1423],[1194,5],[1192,5],[1940,1424],[1938,1425],[1939,1426],[1927,1427],[1928,1425],[1935,1428],[1926,1429],[1931,1430],[1941,5],[1932,1431],[1937,1432],[3199,1433],[1942,1434],[1925,1435],[1933,1436],[1934,1437],[1929,1438],[1936,1424],[1930,1439],[1191,1440],[1885,5],[1886,1441],[2055,1442],[65,5],[3185,1443],[3184,1444],[260,1445],[233,5],[211,1446],[209,1446],[124,1447],[75,1448],[74,1449],[210,1450],[195,1451],[117,1452],[73,1453],[72,1454],[259,1449],[224,1455],[223,1455],[135,1456],[231,1447],[232,1447],[234,1457],[235,1447],[236,1454],[237,1447],[208,1447],[238,1447],[239,1458],[240,1447],[241,1455],[242,1459],[243,1447],[244,1447],[245,1447],[246,1447],[247,1455],[248,1447],[249,1447],[250,1447],[251,1447],[252,1460],[253,1447],[254,1447],[255,1447],[256,1447],[257,1447],[77,1454],[78,1454],[79,1454],[80,1454],[81,1454],[82,1454],[83,1454],[84,1447],[86,1461],[87,1454],[85,1454],[88,1454],[89,1454],[90,1454],[91,1454],[92,1454],[93,1454],[94,1447],[95,1454],[96,1454],[97,1454],[98,1454],[99,1454],[100,1447],[101,1454],[102,1454],[103,1454],[104,1454],[105,1454],[106,1454],[107,1447],[109,1462],[108,1454],[110,1454],[111,1454],[112,1454],[113,1454],[114,1460],[115,1447],[116,1447],[130,1463],[118,1464],[119,1454],[120,1454],[121,1447],[122,1454],[123,1454],[125,1465],[126,1454],[127,1454],[128,1454],[129,1454],[131,1454],[132,1454],[133,1454],[134,1454],[136,1466],[137,1454],[138,1454],[139,1454],[140,1447],[141,1454],[142,1467],[143,1467],[144,1467],[145,1447],[146,1454],[147,1454],[148,1454],[153,1454],[149,1454],[150,1447],[151,1454],[152,1447],[154,1454],[155,1454],[156,1454],[157,1454],[158,1454],[159,1454],[160,1447],[161,1454],[162,1454],[163,1454],[164,1454],[165,1454],[166,1454],[167,1454],[168,1454],[169,1454],[170,1454],[171,1454],[172,1454],[173,1454],[174,1454],[175,1454],[176,1454],[177,1468],[178,1454],[179,1454],[180,1454],[181,1454],[182,1454],[183,1454],[184,1447],[185,1447],[186,1447],[187,1447],[188,1447],[189,1454],[190,1454],[191,1454],[192,1454],[258,1447],[194,1469],[217,1470],[212,1470],[203,1471],[201,1472],[215,1473],[204,1474],[218,1475],[213,1476],[214,1473],[216,1477],[202,5],[207,5],[199,1478],[200,1479],[197,5],[198,1480],[196,1454],[205,1481],[76,1482],[225,5],[226,5],[227,5],[228,5],[229,5],[230,5],[219,5],[222,1455],[221,5],[220,1483],[193,1484],[206,1485],[1520,5],[3219,1486],[3200,5],[3220,1487],[3202,1488],[3227,1489],[3221,5],[3223,1490],[3224,1490],[3225,1491],[3222,5],[3226,1492],[3205,1493],[3203,5],[3204,1494],[3218,1495],[3201,5],[3216,1496],[3207,1497],[3208,1498],[3209,1498],[3210,1497],[3217,1499],[3211,1498],[3212,1496],[3213,1497],[3214,1498],[3215,1497],[2031,522],[558,1500],[1354,1501],[1353,489],[1355,1502],[1350,1503],[1357,1504],[1352,1505],[1360,1506],[1359,1507],[1356,1508],[1358,1509],[1351,489],[1924,5],[2598,1510],[2625,1511],[2604,1512],[2627,5],[2602,1513],[2600,5],[2601,1514],[2594,5],[2629,1515],[2605,1516],[2606,1516],[2607,1516],[2608,1516],[2609,1516],[2610,1516],[2611,1516],[2612,1516],[2614,1516],[2615,1516],[2616,1516],[2617,1516],[2623,1516],[2624,1516],[2618,1516],[2620,1516],[2619,1516],[2613,1516],[2622,1516],[2621,1516],[2603,1517],[2597,1518],[2595,1519],[2596,5],[2599,1520],[2626,1521],[2628,1522],[3197,1523],[2032,5],[3253,5],[2707,5],[2708,1524],[1857,5],[63,5],[64,5],[11,5],[13,5],[12,5],[2,5],[14,5],[15,5],[16,5],[17,5],[18,5],[19,5],[20,5],[21,5],[3,5],[22,5],[23,5],[4,5],[24,5],[28,5],[25,5],[26,5],[27,5],[29,5],[30,5],[31,5],[5,5],[32,5],[33,5],[34,5],[35,5],[6,5],[39,5],[36,5],[37,5],[38,5],[40,5],[7,5],[41,5],[46,5],[47,5],[42,5],[43,5],[44,5],[45,5],[8,5],[51,5],[48,5],[49,5],[50,5],[52,5],[9,5],[53,5],[54,5],[55,5],[57,5],[56,5],[58,5],[59,5],[10,5],[60,5],[61,5],[1,5],[62,5],[2313,5],[2314,1525],[445,1526],[457,1527],[443,1528],[458,1440],[467,1529],[434,1530],[435,1531],[433,1532],[466,424],[461,1533],[465,1534],[437,1535],[454,1536],[436,1537],[464,1538],[431,1539],[432,1533],[438,1540],[439,5],[444,1541],[442,1540],[429,1542],[468,1543],[459,1544],[448,1545],[447,1540],[449,1546],[452,1547],[446,1548],[450,1549],[462,424],[440,1550],[441,1551],[453,1552],[430,1440],[456,1553],[455,1540],[451,1554],[460,5],[428,5],[463,1555],[3255,1556],[3241,1557],[3242,1556],[3240,5],[3181,1558],[3235,1559],[3187,1560],[3182,1558],[3180,5],[3186,1561],[3233,5],[3228,1562],[3232,1563],[3198,1564],[3234,1565],[3254,1566],[3247,1567],[3256,1568],[3179,1569],[3262,1570],[3264,1571],[3258,1572],[3265,1573],[3263,1574],[3248,1575],[3259,1576],[3271,1577],[3272,1578],[3178,1579],[2356,1580],[2582,1581],[2584,1582],[2630,1583],[2398,1584],[2407,1585],[2399,1584],[2400,1584],[2401,1584],[2402,1584],[2403,1584],[2404,1586],[2405,1587],[2406,1588],[1851,1589],[610,1590],[2410,1591],[2414,1592],[2417,1593],[2420,1594],[2427,1595],[2429,1596],[2431,1597],[2433,1598],[2435,1599],[2438,1600],[2442,1601],[2444,1602],[2563,1603],[2449,1604],[2451,1605],[2452,1606],[2455,1607],[2457,1608],[2459,1609],[2461,1610],[2462,1598],[2465,1611],[2466,1612],[2475,1613],[2476,1614],[2521,1615],[2524,1616],[2527,1617],[2528,1618],[2531,1619],[2536,1620],[2539,1621],[2540,1622],[2543,1623],[2548,1624],[2551,1625],[2553,1626],[2557,1627],[2559,1628],[2562,1629],[2321,1630],[2320,1631],[1853,1632],[2408,1633],[1868,1634],[2415,1635],[1522,1636],[2421,1636],[1848,1637],[2319,1638],[1847,1639],[1525,1640],[2544,1641],[2344,1642],[2436,1643],[2439,1644],[1532,1645],[1777,1646],[1855,1647],[2445,1648],[1961,1649],[2348,1642],[1849,1635],[2453,1645],[2034,1650],[1963,1645],[2040,1635],[1856,1651],[2554,1652],[2463,1653],[1859,1654],[2045,1655],[2467,1656],[2446,1657],[1959,1658],[2477,1659],[2305,1660],[2525,1649],[2340,1661],[2529,1662],[1844,1663],[2304,1664],[2522,1636],[1860,1665],[2546,1666],[2549,1651],[2411,1667],[2555,1668],[1861,1669],[2560,1670],[1954,1671],[1955,1671],[1950,1672],[1951,1672],[2631,1673],[1952,1673],[2632,1674],[1956,1675],[1957,1671],[609,5],[2583,1676],[2564,1677],[2322,1678],[2323,1679],[2565,1680],[2351,1681],[2423,1682],[2317,1683],[2566,1684],[2426,1685],[2533,1686],[2567,1687],[2355,1688],[2472,1689],[1865,1690],[1866,1691],[1867,1692],[1869,1693],[1870,1694],[1873,1695],[1874,1696],[1876,1697],[1846,1698],[1877,1699],[1779,1700],[1878,1701],[1882,1702],[1782,1703],[1883,1704],[1884,1705],[1958,1706],[1852,1707],[2568,1708],[1960,1709],[1962,1710],[1781,1711],[1964,1712],[1967,1713],[2033,1714],[2035,1715],[2038,1716],[2039,1717],[2041,1718],[1864,1719],[2042,1720],[2043,1721],[2044,1722],[2046,1723],[2047,1724],[1785,1725],[2048,1726],[2049,1727],[2050,1728],[2051,1729],[2052,1730],[2078,1731],[2079,1732],[2080,1733],[1966,1734],[2081,1735],[2274,1736],[2275,1737],[2276,1738],[2277,1739],[2278,1740],[2306,1741],[2307,1742],[1526,1743],[1527,1744],[1838,1745],[2633,1746],[2634,1036],[2635,1036],[2636,1036],[2637,1036],[2638,1036],[2639,1036],[2640,1036],[2641,1036],[2642,1036],[2643,1036],[2644,1747],[2645,1036],[2646,1036],[2647,5],[2648,1036],[2649,1036],[2650,1036],[2651,1036],[2652,1036],[2653,1036],[2654,1036],[2655,1036],[2656,1036],[2657,1036],[2658,1036],[2659,1036],[2660,1036],[2661,1748],[2662,1036],[2663,1036],[2664,1036],[2665,1036],[2666,1036],[2667,1036],[2668,1036],[2669,1036],[2670,1036],[2671,1036],[2672,1036],[2673,1036],[2674,1749],[2675,1036],[2676,1036],[2677,1036],[2678,1036],[2679,1036],[2680,1036],[2681,1036],[2682,1036],[2683,1036],[2684,1036],[2685,1036],[2686,1036],[2687,1036],[2688,1036],[2689,1036],[2690,1036],[2691,1036],[2692,1036],[2693,1036],[2694,1036],[2695,1036],[2696,1036],[2697,1036],[2698,1036],[2699,1036],[2700,1036],[1790,1750],[1791,1751],[1789,1752],[1792,1753],[1793,1753],[1794,1754],[1788,1755],[1795,1756],[1796,1753],[1797,1753],[1798,1757],[1783,1758],[1799,1753],[1801,1759],[1802,1760],[1803,1761],[1804,1753],[1805,1762],[1806,1761],[1787,1763],[1807,1743],[1808,1764],[1809,1744],[1529,1765],[1811,1766],[1812,1767],[1813,1753],[1810,1768],[1814,1743],[1815,1744],[1816,1756],[1817,1761],[1818,1753],[1819,1769],[1820,1753],[1800,1770],[1822,1771],[1823,1765],[1825,1772],[1824,1773],[1826,1761],[1827,1753],[1530,1774],[1828,1775],[1829,1776],[1831,1777],[1832,1778],[1830,1765],[1833,1753],[1834,1779],[1835,1780],[1528,1781],[1836,1744],[1837,1782],[2409,1783],[2413,1784],[2416,1785],[2343,1786],[2422,1787],[2428,1788],[2569,1789],[2430,1790],[2316,1791],[2311,1792],[2397,1793],[2347,1794],[2570,1795],[2437,1796],[2441,1797],[2580,1798],[2447,1799],[2450,1800],[2434,1801],[2454,1802],[2573,1803],[2456,1804],[2575,1805],[2458,1806],[2460,1807],[2576,1808],[2464,1809],[2443,1810],[2473,1811],[2474,1812],[2448,1813],[2520,1814],[2349,1815],[2526,1816],[2341,1817],[2577,1818],[2530,1819],[2538,1820],[2578,1821],[2535,1822],[2419,1823],[2523,1824],[2542,1825],[2579,1826],[2547,1827],[2550,1828],[2552,1829],[2556,1830],[2342,1831],[2558,1832],[2561,1833],[1850,1834],[1821,5],[2308,1835],[2318,1836],[2545,1837],[2312,5],[2310,1838],[2345,5],[1786,1839],[1854,1840],[2440,1841],[2571,1842],[2581,1843],[2346,1844],[2532,1845],[2350,1846],[2572,1847],[1875,1848],[1845,1849],[2418,1850],[1784,5],[2412,1851],[1953,5],[2315,1852],[2432,1853],[1778,5],[2534,1854],[2541,1855],[2574,5],[1858,1856],[1521,1857],[2701,1858],[2702,1859],[2703,1860]],"semanticDiagnosticsPerFile":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272],"version":"6.0.2"} \ No newline at end of file diff --git a/web/package.json b/web/package.json index 028f328db4..a817b149c4 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "immich-web", - "version": "2.7.0", + "version": "2.7.1", "license": "GNU Affero General Public License version 3", "type": "module", "scripts": { From 6441c3b77c556487763e33751f501625bb2fe1f2 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Tue, 7 Apr 2026 16:53:04 -0400 Subject: [PATCH 134/156] fix: server build (#27599) --- .gitignore | 1 + server/tsconfig.build.tsbuildinfo | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 server/tsconfig.build.tsbuildinfo diff --git a/.gitignore b/.gitignore index fdfc67eddd..e8fdfa266c 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,5 @@ vite.config.js.timestamp-* .pnpm-store .devcontainer/library .devcontainer/.env* +*.tsbuildinfo *.tsbuildInfo diff --git a/server/tsconfig.build.tsbuildinfo b/server/tsconfig.build.tsbuildinfo deleted file mode 100644 index 99479b0ed1..0000000000 --- a/server/tsconfig.build.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"fileNames":["../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es5.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.dom.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2023.intl.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.es2025.float16.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/.pnpm/typescript@6.0.2/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/.pnpm/reflect-metadata@0.2.2/node_modules/reflect-metadata/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/bind.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/abstract.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/controllers/controller-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/controllers/controller.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/arguments-host.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/exception-filter.interface.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subscription.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subscriber.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Operator.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Observable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/types.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/auditTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferCount.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferToggle.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferWhen.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/catchError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatestAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatest.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatestWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatMap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatMapTo.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/count.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/debounceTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/defaultIfEmpty.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/delayWhen.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinctUntilChanged.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinctUntilKeyChanged.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/elementAt.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/endWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/every.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaustAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaustMap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/find.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/findIndex.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/first.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subject.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/groupBy.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/ignoreElements.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/isEmpty.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/last.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/map.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mapTo.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Notification.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/max.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeMap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/flatMap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeMapTo.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeScan.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/min.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/ConnectableObservable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/observeOn.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/onErrorResumeNextWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishBehavior.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishLast.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishReplay.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/race.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/raceWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/repeatWhen.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/retryWhen.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/refCount.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sampleTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sequenceEqual.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/share.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/shareReplay.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/single.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipLast.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipUntil.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipWhile.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/startWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/subscribeOn.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchMap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchMapTo.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchScan.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/take.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeLast.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeUntil.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeWhile.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throttleTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throwIfEmpty.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeInterval.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeoutWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/toArray.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/window.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowCount.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowTime.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowToggle.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowWhen.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/withLatestFrom.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zipAll.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zipWith.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/operators/index.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/Action.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Scheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/TestMessage.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/SubscriptionLog.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/SubscriptionLoggable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/ColdObservable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/HotObservable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsyncScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/timerHandle.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsyncAction.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/VirtualTimeScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/TestScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/testing/index.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/dom/animationFrames.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/BehaviorSubject.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/ReplaySubject.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/AsyncSubject.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsapScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/QueueScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AnimationFrameScheduler.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/animationFrame.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/identity.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/noop.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/isObservable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/lastValueFrom.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/firstValueFrom.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/ArgumentOutOfRangeError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/EmptyError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/NotFoundError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/ObjectUnsubscribedError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/SequenceError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/UnsubscriptionError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/bindCallback.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/bindNodeCallback.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/AnyCatcher.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/combineLatest.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/forkJoin.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/from.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/fromEvent.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/fromEventPattern.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/never.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/of.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/onErrorResumeNext.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/race.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/range.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/throwError.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/using.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/config.d.ts","../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/ws-exception-filter.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/validation-error.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/execution-context.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/can-activate.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/custom-route-param-factory.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/nest-interceptor.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/paramtype.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/type.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/features/pipe-transform.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/request-method.enum.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/http-status.enum.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/shutdown-signal.enum.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/version-type.enum.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/version-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/middleware-configuration.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/middleware-consumer.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/middleware-config-proxy.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/nest-middleware.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/middleware/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/global-prefix-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/before-application-shutdown.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-application-bootstrap.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-application-shutdown.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-destroy.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/on-init.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/hooks/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/http-exception-body.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/http-redirect-response.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/cors-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/https-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/services/logger.service.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application-context-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/http-server.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/message-event.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/raw-body-request.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/http/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/injectable.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/microservices/nest-hybrid-application-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/forward-reference.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/scope-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/injection-token.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/optional-factory-dependency.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/provider.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/module-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/dynamic-module.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/introspection-result.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/modules/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/shutdown-hooks-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application-context.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/websockets/web-socket-adapter.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-application.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/nest-microservice.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/catch.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/controller.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/dependencies.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/exception-filters.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/inject.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/injectable.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/optional.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/set-metadata.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/use-guards.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/use-interceptors.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/use-pipes.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/apply-decorators.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/version.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/modules/global.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/modules/module.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/modules/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/request-mapping.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/route-params.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/http-code.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/create-route-param-metadata.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/render.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/header.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/redirect.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/constants.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/sse.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/http/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/intrinsic.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/http.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/bad-gateway.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/bad-request.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/conflict.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/forbidden.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/gateway-timeout.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/gone.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/http-version-not-supported.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/im-a-teapot.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/internal-server-error.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/method-not-allowed.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/misdirected.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/not-acceptable.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/not-found.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/not-implemented.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/payload-too-large.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/precondition-failed.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/request-timeout.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/service-unavailable.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/unauthorized.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/unprocessable-entity.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/unsupported-media-type.exception.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/exceptions/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/services/console-logger.service.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/services/utils/filter-log-levels.util.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/services/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/interfaces/streamable-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/interfaces/streamable-handler-response.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/streamable-file.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/file-stream/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/constants.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-async-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-cls.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-host.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/configurable-module.builder.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/module-utils/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/default-value.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/interfaces/file.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/file-validator-context.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/file-validator.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/file-type.validator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/max-file-size.validator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/utils/http-error-by-code.util.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/parse-file-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/parse-file.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/parse-file-pipe.builder.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/file/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/class-transform-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/transformer-package.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/validator-options.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/external/validator-package.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/validation.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-array.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-bool.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-date.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-enum.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-float.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-int.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/parse-uuid.pipe.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/pipes/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/serializer/class-serializer.interfaces.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/serializer/class-serializer.interceptor.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/serializer/decorators/serialize-options.decorator.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/serializer/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/serializer/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/utils/forward-ref.util.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/utils/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/adapters/http-adapter.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/globals.typedarray.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/buffer.buffer.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/globals.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/crypto.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/events.d.ts","../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/utility.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/header.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/readable.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/fetch.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/formdata.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/connector.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client-stats.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/errors.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/dispatcher.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-dispatcher.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-origin.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool-stats.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/handlers.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/balanced-pool.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/h2c-client.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-interceptor.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-call-history.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-client.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-pool.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/snapshot-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-errors.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/proxy-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-handler.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/api.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache-interceptor.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/interceptors.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/util.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cookies.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/patch.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/websocket.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/eventsource.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/content-type.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/index.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/navigator.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/storage.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/web-globals/streams.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/assert.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/assert/strict.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/async_hooks.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/buffer.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/child_process.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/cluster.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/console.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/constants.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/crypto.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/dgram.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/dns.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/dns/promises.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/domain.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/events.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/fs.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/fs/promises.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/http.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/http2.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/https.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/inspector.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/inspector.generated.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/module.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/net.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/os.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/path.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/perf_hooks.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/process.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/punycode.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/querystring.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/readline.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/readline/promises.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/repl.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/sea.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/sqlite.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/stream.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/stream/promises.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/stream/consumers.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/stream/web.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/string_decoder.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/test.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/timers.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/timers/promises.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/tls.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/trace_events.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/tty.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/url.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/util.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/v8.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/vm.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/wasi.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/worker_threads.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/zlib.d.ts","../node_modules/.pnpm/@types+node@24.12.2/node_modules/@types/node/index.d.ts","../node_modules/.pnpm/@types+send@1.2.1/node_modules/@types/send/index.d.ts","../node_modules/.pnpm/@types+qs@6.14.0/node_modules/@types/qs/index.d.ts","../node_modules/.pnpm/@types+range-parser@1.2.7/node_modules/@types/range-parser/index.d.ts","../node_modules/.pnpm/@types+express-serve-static-core@5.1.0/node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/.pnpm/@types+http-errors@2.0.5/node_modules/@types/http-errors/index.d.ts","../node_modules/.pnpm/@types+serve-static@2.2.0/node_modules/@types/serve-static/index.d.ts","../node_modules/.pnpm/@types+connect@3.4.38/node_modules/@types/connect/index.d.ts","../node_modules/.pnpm/@types+body-parser@1.19.6/node_modules/@types/body-parser/index.d.ts","../node_modules/.pnpm/@types+express@5.0.6/node_modules/@types/express/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/interfaces/nest-express-body-parser-options.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/interfaces/nest-express-body-parser.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/interfaces/serve-static-options.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/adapters/express-adapter.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/adapters/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/interfaces/nest-express-application.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interfaces/multer-options.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/any-files.interceptor.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/file-fields.interceptor.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/file.interceptor.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/files.interceptor.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/no-files.interceptor.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interceptors/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interfaces/files-upload-module.interface.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/multer.module.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/index.d.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/index.d.ts","../node_modules/.pnpm/@types+compression@1.8.1/node_modules/@types/compression/index.d.ts","../node_modules/.pnpm/@types+cookie-parser@1.4.10_@types+express@5.0.6/node_modules/@types/cookie-parser/index.d.ts","../node_modules/.pnpm/helmet@8.1.0/node_modules/helmet/index.d.cts","../node_modules/.pnpm/sirv@3.0.2/node_modules/sirv/index.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/zone.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/settings.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/_util.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/misc.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/duration.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/interval.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/datetime.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/info.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/src/luxon.d.ts","../node_modules/.pnpm/@types+luxon@3.7.1/node_modules/@types/luxon/index.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/inc.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/semver.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/parse.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/valid.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/clean.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/diff.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/major.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/minor.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/patch.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/sort.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/rsort.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/gt.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/lt.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/eq.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/neq.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/gte.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/lte.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/cmp.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/coerce.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/comparator.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/range.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/valid.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/outside.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/subset.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/index.d.ts","./src/enum.ts","./src/constants.ts","../node_modules/.pnpm/cookie@1.1.1/node_modules/cookie/dist/index.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/types.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/general/decrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/general/encrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/compact/verify.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/flattened/verify.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/general/verify.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/verify.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/decrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/produce.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/compact/sign.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/flattened/sign.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jws/general/sign.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/sign.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/encrypt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwk/thumbprint.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwk/embedded.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwks/local.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwks/remote.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/jwt/unsecured.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/key/export.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/key/import.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/util/decode_protected_header.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/util/decode_jwt.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/util/errors.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/key/generate_key_pair.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/key/generate_secret.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/util/base64url.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/util/runtime.d.ts","../node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/types/index.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/identifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/check-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/default-value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/generated-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/schemable-identifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/insert-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/delete-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/update-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/type-error.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/merge-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/type-utils.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/references-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/column-definition-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/add-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/rename-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/raw-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/alter-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/foreign-key-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/primary-key-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/add-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/modify-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/add-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/rename-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/alter-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/where-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/create-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/create-schema-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/create-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/value-list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/create-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/from-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/group-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/group-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/having-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/on-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/join-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/limit-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/offset-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/collate-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/order-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/order-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/alias-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/select-all-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/reference-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/simple-reference-expression-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/selection-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/common-table-expression-name-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/common-table-expression-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/with-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/select-modifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/operation-node-source.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/expression/expression.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/explainable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/explain-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/set-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/fetch-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/top-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/select-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/create-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-schema-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/drop-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/output-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/returning-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/when-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/merge-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/column-update-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/on-conflict-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/on-duplicate-key-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/or-action-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/insert-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/update-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/using-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/delete-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/refresh-materialized-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/query-id.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-compiler/compiled-query.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-compiler/query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/database-connection.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/database-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/dialect-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/kysely-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-executor/query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/compilable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/default-value-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/column-definition-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/data-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/data-type-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/foreign-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-column-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-table-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/select-query-builder-expression.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/binary-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/operator-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/value-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/column-type.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/binary-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/join-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dynamic/dynamic-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/table-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/join-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dynamic/dynamic-reference-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/select-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/collate-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/order-by-item-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/order-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/group-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/where-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/no-result-error.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/having-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/set-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/streamable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/and-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/or-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/parens-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/expression/expression-wrapper.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/order-by-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/select-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/coalesce-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/partition-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/partition-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/over-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/aggregate-function-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/partition-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/over-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/aggregate-function-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/function-module.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/case-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/case-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/json-path-leg-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/json-path-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/json-operator-chain-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/json-reference-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/json-path-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/tuple-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/select-from-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/expression/expression-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/expression-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/reference-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/primary-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/check-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/alter-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/create-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/create-schema-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/create-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/drop-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/drop-schema-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/drop-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-executor/query-executor-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/raw-builder/raw-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/create-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/drop-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/create-type-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/drop-type-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/refresh-materialized-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/schema/schema.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dynamic/dynamic.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/primitive-value-list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/values-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/insert-values-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/update-set-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/returning-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/returning-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/output-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/update-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/delete-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/cte-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/with-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/delete-from-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/update-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-builder/merge-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/merge-into-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-creator.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/log.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/savepoint-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/provide-controlled-connection.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/kysely.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/raw-builder/sql.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-executor/query-executor-base.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-executor/default-query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-executor/noop-query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/default-insert-value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/unary-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/function-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/tuple-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/matched-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/cast-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/default-connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/single-connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/driver/dummy-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mysql/mysql-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/postgres/postgres-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/migration/migrator.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/migration/file-migration-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/infer-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/util/log-once.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/parser/unary-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/index.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-basic.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-bearer.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/open-api-spec.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/types/swagger-enum.type.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-body.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-consumes.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-cookie.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-default-getter.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-exclude-endpoint.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-exclude-controller.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-extra-models.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-header.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-hide-property.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-link.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-oauth2.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-operation.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/enum-schema-attributes.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-param.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-produces.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/schema-object-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-property.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-query.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-response.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-security.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-use-tags.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/callback-object.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-callbacks.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-extension.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/api-schema.decorator.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/swagger-ui-options.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/swagger-custom-options.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/swagger-document-options.interface.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/document-builder.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/swagger-module.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/type-helpers/intersection-type.helper.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/type-helpers/omit-type.helper.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/type-helpers/partial-type.helper.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/type-helpers/pick-type.helper.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/type-helpers/index.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/utils/get-schema-path.util.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/utils/index.d.ts","../node_modules/.pnpm/@nestjs+swagger@11.2.6_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_74918388e0834eda9f9ec86d256f0d40/node_modules/@nestjs/swagger/dist/index.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/identifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/check-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/default-value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/generated-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/schemable-identifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/insert-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/delete-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/update-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/type-error.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/merge-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/type-utils.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/references-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/column-definition-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/add-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/rename-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/raw-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/alter-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/foreign-key-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/primary-key-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/add-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/modify-column-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/add-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/rename-constraint-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/alter-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/where-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/create-index-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/create-schema-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/create-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/value-list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/create-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/from-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/group-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/group-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/having-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/on-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/join-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/limit-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/offset-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/collate-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/order-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/order-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/alias-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/select-all-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/reference-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/simple-reference-expression-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/selection-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/common-table-expression-name-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/common-table-expression-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/with-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/select-modifier-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/operation-node-source.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/expression/expression.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/explainable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/explain-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/set-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/fetch-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/top-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/select-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/create-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-schema-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-table-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/drop-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/output-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/returning-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/when-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/merge-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/column-update-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/on-conflict-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/on-duplicate-key-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/or-action-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/insert-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/update-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/using-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/delete-query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/query-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/refresh-materialized-view-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/query-id.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-compiler/compiled-query.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-compiler/query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/database-connection.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/database-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/kysely-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-executor/query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/compilable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/default-value-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/column-definition-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/data-type-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/data-type-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/foreign-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-column-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-table-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-table-drop-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/select-query-builder-expression.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/binary-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/operator-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/value-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/column-type.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/binary-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/join-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dynamic/dynamic-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/table-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/join-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dynamic/dynamic-reference-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/select-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/collate-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/order-by-item-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/order-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/group-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/where-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/no-result-error.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/having-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/set-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/streamable.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/and-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/or-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/parens-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/expression/expression-wrapper.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/order-by-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/select-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/coalesce-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/partition-by-item-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/partition-by-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/over-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/aggregate-function-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/partition-by-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/over-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/aggregate-function-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/function-module.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/case-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/case-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/json-path-leg-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/json-path-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/json-operator-chain-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/json-reference-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/json-path-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/tuple-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/select-from-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/expression/expression-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/expression-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/reference-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/unique-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/primary-key-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/check-constraint-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/alter-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/create-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/create-schema-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/create-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/drop-index-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/drop-schema-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/drop-table-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-executor/query-executor-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/raw-builder/raw-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/create-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/drop-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/create-type-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/drop-type-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/refresh-materialized-view-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/schema/schema.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dynamic/dynamic.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/primitive-value-list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/values-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/insert-values-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/update-set-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/returning-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/returning-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/output-interface.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/delete-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/cte-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/with-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/delete-from-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/update-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-builder/merge-query-builder.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/merge-into-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-creator.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/log.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/savepoint-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/provide-controlled-connection.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/kysely.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/raw-builder/sql.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-executor/query-executor-base.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-executor/default-query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-executor/noop-query-executor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/list-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/default-insert-value-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/unary-operation-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/function-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/tuple-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/matched-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/cast-node.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/default-connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/single-connection-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/driver/dummy-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mysql/mysql-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/postgres/postgres-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-adapter.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-dialect-config.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-dialect.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-driver.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-introspector.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/dialect/mssql/mssql-query-compiler.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/migration/migrator.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/migration/file-migration-provider.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/camel-case/camel-case-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/infer-result.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/util/log-once.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/parser/unary-operation-parser.d.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/esm/index.d.ts","../node_modules/.pnpm/postgres@3.4.8/node_modules/postgres/types/index.d.ts","../node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/index.d.ts","../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/messages.d.ts","../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/serializer.d.ts","../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/parser.d.ts","../node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/index.d.ts","../node_modules/.pnpm/@types+pg@8.20.0/node_modules/@types/pg/lib/type-overrides.d.ts","../node_modules/.pnpm/@types+pg@8.20.0/node_modules/@types/pg/index.d.ts","../node_modules/.pnpm/pg-connection-string@2.12.0/node_modules/pg-connection-string/index.d.ts","../node_modules/.pnpm/@immich+sql-tools@0.3.2/node_modules/@immich/sql-tools/dist/index.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/common.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/array.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/collection.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/date.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/function.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/lang.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/math.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/number.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/object.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/seq.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/string.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/common/util.d.ts","../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/adapters/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/edge.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/entrypoint.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/extras.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/node.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/settlement-signal.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/injector.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/serialized-graph-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/serialized-graph-json.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/serialized-graph.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/compiler.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/modules-container.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/container.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/instance-links-host.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/abstract-instance-resolver.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/module-ref.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/module.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/instance-wrapper.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/interfaces/exclude-route-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/application-config.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/constants.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/discovery/discovery-module.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/discovery/discovery-service.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/discovery/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/http-adapter-host.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/base-exception-filter.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/context-id-factory.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/exception-filter-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/exceptions-handler.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/router-proxy.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/context-creator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/base-exception-filter-context.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/exceptions/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/external-exception-filter.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/external-exceptions-handler.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/exceptions/external-exception-filter-context.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/guards/constants.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/execution-context-host.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/guards/guards-consumer.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/guards/guards-context-creator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/guards/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/interceptors/interceptors-consumer.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/interceptors/interceptors-context-creator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/interceptors/index.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/enums/route-paramtypes.enum.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/pipes/params-token-factory.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/pipes/pipes-consumer.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/pipes/pipes-context-creator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/pipes/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/context-utils.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/inquirer/inquirer-constants.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/inquirer/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/interfaces/module-definition.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/interfaces/module-override.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/graph-inspector.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/metadata-scanner.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/scanner.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/instance-loader.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader-options.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/injector/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/interfaces/external-handler-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/interfaces/params-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/external-context-creator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/helpers/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/initialize-on-preview.allowlist.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/partial-graph.host.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/inspector/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/middleware/route-info-path-extractor.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/middleware/routes-mapper.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/middleware/builder.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/middleware/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/nest-application-context.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/nest-application.d.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/interfaces/microservices/nest-microservice-options.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/nest-factory.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/repl/repl.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/repl/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/interfaces/routes.interface.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/request/request-constants.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/request/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/router-module.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/router/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/services/reflector.service.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/services/index.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/index.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/expose-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/exclude-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/transform-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/type-discriminator-descriptor.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/decorator-options/type-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/exclude-metadata.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/expose-metadata.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/enums/transformation-type.enum.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/enums/index.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/target-map.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/class-transformer-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/transform-fn-params.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/transform-metadata.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/metadata/type-metadata.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/class-constructor.type.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/type-help-options.interface.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/interfaces/index.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/ClassTransformer.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/exclude.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/expose.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform-instance-to-instance.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform-instance-to-plain.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform-plain-to-instance.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/transform.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/type.decorator.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/decorators/index.d.ts","../node_modules/.pnpm/class-transformer@0.5.1/node_modules/class-transformer/types/index.d.ts","../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/commons.d.ts","../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/encodePacket.d.ts","../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/decodePacket.d.ts","../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/index.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/parser-v3/index.d.ts","../node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/transport.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/socket.d.ts","../node_modules/.pnpm/@types+cors@2.8.19/node_modules/@types/cors/index.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/contrib/types.cookie.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/server.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/transports/polling.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/transports/websocket.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/transports/webtransport.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/transports/index.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/userver.d.ts","../node_modules/.pnpm/engine.io@6.6.5/node_modules/engine.io/build/engine.io.d.ts","../node_modules/.pnpm/@socket.io+component-emitter@3.1.2/node_modules/@socket.io/component-emitter/lib/cjs/index.d.ts","../node_modules/.pnpm/socket.io-parser@4.2.5/node_modules/socket.io-parser/build/cjs/index.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/typed-events.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/client.d.ts","../node_modules/.pnpm/socket.io-adapter@2.5.6/node_modules/socket.io-adapter/dist/in-memory-adapter.d.ts","../node_modules/.pnpm/socket.io-adapter@2.5.6/node_modules/socket.io-adapter/dist/cluster-adapter.d.ts","../node_modules/.pnpm/socket.io-adapter@2.5.6/node_modules/socket.io-adapter/dist/index.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/socket-types.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/broadcast-operator.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/socket.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/namespace.d.ts","../node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/index.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/enums/cron-expression.enum.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/enums/index.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/errors.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/constants.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/job.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/types/utils.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/types/cron.types.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/time.d.ts","../node_modules/.pnpm/cron@4.4.0/node_modules/cron/dist/index.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/decorators/cron.decorator.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/decorators/interval.decorator.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/decorators/timeout.decorator.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/interfaces/schedule-module-options.interface.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/schedule.module.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/scheduler.registry.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/dist/index.d.ts","../node_modules/.pnpm/@nestjs+schedule@6.1.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0_fded93921b09458b2354593a7a582ca2/node_modules/@nestjs/schedule/index.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/ValidationError.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/ValidatorOptions.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation-schema/ValidationSchema.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/container.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/ValidationArguments.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/ValidationOptions.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/Allow.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsDefined.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsOptional.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/Validate.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/ValidatorConstraintInterface.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/ValidateBy.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/ValidateIf.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/ValidateNested.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/ValidatePromise.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsLatLong.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsLatitude.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsLongitude.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/Equals.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/NotEquals.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsEmpty.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsNotEmpty.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsIn.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/common/IsNotIn.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/number/IsDivisibleBy.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/number/IsPositive.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/number/IsNegative.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/number/Max.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/number/Min.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/date/MinDate.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/date/MaxDate.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/Contains.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/NotContains.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isBoolean.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isEmail.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isFQDN.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isIBAN.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isISO31661Alpha2.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isISO4217.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isISO6391.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isTaxID.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isURL.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/index.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsAlpha.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsAlphanumeric.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsDecimal.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsAscii.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBase64.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsByteLength.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsCreditCard.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsCurrency.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsEmail.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsFQDN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsFullWidth.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsHalfWidth.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsVariableWidth.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsHexColor.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsHexadecimal.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMacAddress.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsIP.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsPort.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISBN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISIN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISO8601.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsJSON.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsJWT.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsLowercase.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMobilePhone.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISO31661Alpha2.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISO31661Alpha3.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISO31661Numeric.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMongoId.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMultibyte.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsSurrogatePair.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsUrl.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsUUID.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsFirebasePushId.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsUppercase.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/Length.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/MaxLength.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/MinLength.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/Matches.d.ts","../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/types.d.cts","../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/max/index.d.cts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsPhoneNumber.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMilitaryTime.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsHash.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISSN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsDateString.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBooleanString.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsNumberString.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBase32.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBIC.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBtcAddress.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsDataURI.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsEAN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsEthereumAddress.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsHSL.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsIBAN.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsIdentityCard.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsISRC.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsLocale.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMagnetURI.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsMimeType.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsOctal.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsPassportNumber.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsPostalCode.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsRFC3339.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsRgbColor.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsSemVer.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsStrongPassword.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsTimeZone.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/IsBase58.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/is-tax-id.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/is-iso4217-currency-code.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/string/isISO6391.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsBoolean.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsDate.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsNumber.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsEnum.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsInt.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsString.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsArray.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/typechecker/IsObject.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayContains.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayNotContains.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayNotEmpty.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayMinSize.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayMaxSize.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/array/ArrayUnique.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/object/IsNotEmptyObject.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/object/IsInstance.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/decorator/decorators.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/ValidationTypes.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/validation/Validator.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/register-decorator.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/metadata/ValidationMetadataArgs.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/metadata/ValidationMetadata.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/metadata/ConstraintMetadata.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/metadata/MetadataStorage.d.ts","../node_modules/.pnpm/class-validator@0.15.1/node_modules/class-validator/types/index.d.ts","../node_modules/.pnpm/sanitize-filename@1.6.4/node_modules/sanitize-filename/index.d.ts","./src/validation.ts","./src/dtos/asset-ids.response.dto.ts","../node_modules/.pnpm/kysely@0.28.14/node_modules/kysely/dist/cjs/helpers/postgres.d.ts","../node_modules/.pnpm/nestjs-kysely@3.1.2_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15_26157e33908bb534807be2ebb8756d45/node_modules/nestjs-kysely/dist/index.d.cts","./src/dtos/auth.dto.ts","./src/schema/enums.ts","./src/schema/functions.ts","./src/schema/tables/user.table.ts","./src/schema/tables/library.table.ts","./src/schema/tables/stack.table.ts","../node_modules/.pnpm/kysely-postgres-js@3.0.0_kysely@0.28.14_postgres@3.4.8/node_modules/kysely-postgres-js/dist/index.d.cts","./src/dtos/editing.dto.ts","../node_modules/.pnpm/@types+async-lock@1.4.2/node_modules/@types/async-lock/index.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/bull.messages.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/bull.tokens.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/errors/missing-shared-bull-config.error.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/errors/index.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/helpers/create-conditional-dep-holder.helper.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/helpers/index.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/utils/get-queue-token.util.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/utils/index.d.ts","../node_modules/.pnpm/@nestjs+bull-shared@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_0c7784f066802425b3c66e0b018994c1/node_modules/@nestjs/bull-shared/dist/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/async-fifo-queue.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/backoff-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/keep-jobs.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/parent-options.d.ts","../node_modules/.pnpm/cron-parser@4.9.0/node_modules/cron-parser/types/common.d.ts","../node_modules/.pnpm/cron-parser@4.9.0/node_modules/cron-parser/types/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/repeat-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/base-job-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/deduplication-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/job-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/job-progress.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/parent.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/job-json.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/job-json-sandbox.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/minimal-job.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/backoff-strategy.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/backoffs.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/repeat-strategy.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/advanced-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/parent-command.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/child-message.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/types.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/Command.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/ScanStream.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/utils/RedisCommander.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/transaction.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/utils/Commander.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/AbstractConnector.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/ConnectorConstructor.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/SentinelConnector/types.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/SentinelConnector/index.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/connectors/StandaloneConnector.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/redis/RedisOptions.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/cluster/util.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/cluster/ClusterOptions.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/cluster/index.d.ts","../node_modules/.pnpm/denque@2.1.0/node_modules/denque/index.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/SubscriptionSet.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/DataHandler.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/Redis.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/Pipeline.d.ts","../node_modules/.pnpm/ioredis@5.9.3/node_modules/ioredis/built/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/connection.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/database-type.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/finished-status.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/job-scheduler-template-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/job-type.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/redis-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/child-command.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/error-code.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/metrics-time.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/telemetry-attributes.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/enums/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/telemetry.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/queue-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/flow-job.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/ioredis-events.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/job-scheduler-json.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/lock-manager-worker-context.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/metrics-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/metrics.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue-keys.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/script-queue-context.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/minimal-queue.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/parent-message.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/queue-meta.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/rate-limiter-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/redis-streams.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/repeatable-job.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/repeatable-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/retry-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/sandboxed-job.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/sandboxed-job-processor.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/sandboxed-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/worker-options.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/receiver.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/interfaces/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/child.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/child-pool.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/child-processor.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/delayed-error.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/rate-limit-error.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/unrecoverable-error.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/waiting-children-error.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/waiting-error.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/errors/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/scripts.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/redis-connection.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue-base.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue-events.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/job.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/flow-producer.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/job-scheduler.d.ts","../node_modules/.pnpm/node-abort-controller@3.1.1/node_modules/node-abort-controller/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/lock-manager.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue-events-producer.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue-getters.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/repeat.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/queue.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/sandbox.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/types/processor.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/worker.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/classes/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/utils/index.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/utils/create-scripts.d.ts","../node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/esm/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/bull.types.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/bull-processor.interfaces.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/partial-this-parameter.type.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/register-flow-options.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/register-queue-options.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/shared-bull-config.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/bull.module.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/inject-flow-producer.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/inject-queue.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/on-queue-event.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/on-worker-event.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/worker-options.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/processor.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/queue-event-options.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/queue-events-listener.decorator.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/bull-metadata.accessor.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/hosts/queue-events-host.class.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/hosts/worker-host.class.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/hosts/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/instrument/processor-decorator.service.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/interfaces/queue-options.interface.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/bull.explorer.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/bull.registrar.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/instrument/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/get-flow-producer-token.util.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/get-flow-producer-options-token.util.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/get-queue-options-token.util.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/get-shared-config-token.util.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/utils/index.d.ts","../node_modules/.pnpm/@nestjs+bullmq@11.0.4_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._67bad730138f76b72fa905e2460e388e/node_modules/@nestjs/bullmq/dist/index.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/types.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/Command.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/ScanStream.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/utils/RedisCommander.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/transaction.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/utils/Commander.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/AbstractConnector.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/ConnectorConstructor.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/SentinelConnector/types.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/SentinelConnector/index.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/connectors/StandaloneConnector.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/redis/RedisOptions.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/cluster/util.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/cluster/ClusterOptions.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/cluster/index.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/SubscriptionSet.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/DataHandler.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/Redis.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/Pipeline.d.ts","../node_modules/.pnpm/ioredis@5.10.1/node_modules/ioredis/built/index.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/types/terminal.type.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/types/recursive-key-of.type.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/types/type-if-type.type.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls.service.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/plugin/cls-plugin.interface.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls.options.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-initializers/cls.guard.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-initializers/cls.interceptor.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-initializers/cls.middleware.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-initializers/use-cls.decorator.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-initializers/utils/context-cls-store-map.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-service-manager.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls.constants.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/proxy-provider/proxy-provider.interfaces.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/cls-module/cls.module.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/inject-cls.decorator.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/proxy-provider/injectable-proxy.decorator.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/errors/exceptions/runtime.exception.d.ts","../node_modules/.pnpm/@nestjs+core@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.1_bd79c0624ae5f4b9a1277bd60dfafc27/node_modules/@nestjs/core/errors/exceptions/unknown-dependencies.exception.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/lib/proxy-provider/proxy-provider.exceptions.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/utils/copy-method-metadata.d.ts","../node_modules/.pnpm/nestjs-cls@5.4.3_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1__e470ab38fcfb93a54db8a4cf879500d4/node_modules/nestjs-cls/dist/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/internal/symbol.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/types.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/utils.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/common/Exception.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/common/Time.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/common/Attributes.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context/types.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context/context.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/context.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag/types.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag/consoleLogger.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/diag.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/ObservableResult.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/Metric.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/Meter.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/NoopMeter.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/MeterProvider.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/metrics.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/propagation/TextMapPropagator.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/context-helpers.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/propagation.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/attributes.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/trace_state.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/span_context.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/link.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/status.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/span.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/span_kind.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/SpanOptions.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/tracer.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/tracer_options.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/tracer_provider.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/ProxyTracerProvider.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/SamplingResult.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/Sampler.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/trace_flags.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/internal/utils.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/spancontext-utils.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/invalid-span-constants.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/context-utils.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/trace.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context-api.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag-api.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics-api.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/propagation-api.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace-api.d.ts","../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/index.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/interfaces/opentelemetry-options.interface.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/interfaces/metric-options.interface.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/interfaces/index.d.ts","./src/dtos/env.dto.ts","./src/utils/set.ts","./src/repositories/config.repository.ts","../node_modules/.pnpm/@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/services/utils/is-log-level-enabled.util.d.ts","./src/repositories/logging.repository.ts","./src/repositories/database.repository.ts","./src/schema/tables/asset-exif.table.ts","./src/utils/pagination.ts","./src/repositories/search.repository.ts","./src/utils/database.ts","./src/schema/tables/asset.table.ts","./src/schema/tables/album.table.ts","./src/schema/tables/album-asset.table.ts","./src/schema/tables/activity.table.ts","./src/schema/tables/album-asset-audit.table.ts","./src/schema/tables/album-audit.table.ts","./src/schema/tables/album-user-audit.table.ts","./src/schema/tables/album-user.table.ts","./src/schema/tables/api-key.table.ts","./src/schema/tables/asset-audit.table.ts","./src/schema/tables/asset-edit-audit.table.ts","./src/schema/tables/asset-edit.table.ts","./src/schema/tables/asset-face-audit.table.ts","./src/schema/tables/person.table.ts","./src/schema/tables/asset-face.table.ts","./src/schema/tables/asset-file.table.ts","./src/schema/tables/asset-job-status.table.ts","./src/schema/tables/asset-metadata-audit.table.ts","./src/schema/tables/asset-metadata.table.ts","./src/schema/tables/asset-ocr.table.ts","./src/schema/tables/audit.table.ts","./src/schema/tables/face-search.table.ts","./src/schema/tables/geodata-places.table.ts","./src/schema/tables/memory.table.ts","./src/schema/tables/memory-asset-audit.table.ts","./src/schema/tables/memory-asset.table.ts","./src/schema/tables/memory-audit.table.ts","./src/schema/tables/move.table.ts","./src/schema/tables/natural-earth-countries.table.ts","./src/schema/tables/notification.table.ts","./src/schema/tables/ocr-search.table.ts","./src/schema/tables/partner-audit.table.ts","./src/schema/tables/partner.table.ts","./src/schema/tables/person-audit.table.ts","./src/types/plugin-schema.types.ts","./src/schema/tables/plugin.table.ts","./src/schema/tables/session.table.ts","./src/schema/tables/shared-link.table.ts","./src/schema/tables/shared-link-asset.table.ts","./src/schema/tables/smart-search.table.ts","./src/schema/tables/stack-audit.table.ts","./src/schema/tables/sync-checkpoint.table.ts","./src/schema/tables/system-metadata.table.ts","./src/schema/tables/tag.table.ts","./src/schema/tables/tag-asset.table.ts","./src/schema/tables/tag-closure.table.ts","./src/schema/tables/user-audit.table.ts","./src/schema/tables/user-metadata-audit.table.ts","./src/schema/tables/user-metadata.table.ts","./src/schema/tables/version-history.table.ts","./src/schema/tables/workflow.table.ts","./src/schema/index.ts","../node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/lib/constants.d.ts","../node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/lib/parse.d.ts","../node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/lib/scan.d.ts","../node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/lib/picomatch.d.ts","../node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/index.d.ts","./src/dtos/sync.dto.ts","./src/utils/misc.ts","./src/repositories/asset.repository.ts","./src/dtos/asset.dto.ts","./src/dtos/asset-media.dto.ts","./src/dtos/maintenance.dto.ts","./src/types.ts","./src/config.ts","./src/repositories/event.repository.ts","./src/decorators.ts","./src/utils/date.ts","./src/dtos/exif.dto.ts","./src/dtos/ocr.dto.ts","../node_modules/.pnpm/transformation-matrix@3.1.0/node_modules/transformation-matrix/src/transformation-matrix.d.ts","./src/utils/transform.ts","./src/dtos/person.dto.ts","./src/dtos/tag.dto.ts","./src/dtos/user.dto.ts","../node_modules/.pnpm/oauth4webapi@3.8.5/node_modules/oauth4webapi/build/index.d.ts","../node_modules/.pnpm/openid-client@6.8.2/node_modules/openid-client/build/index.d.ts","./src/repositories/oauth.repository.ts","./src/repositories/access.repository.ts","./src/repositories/activity.repository.ts","./src/repositories/album-user.repository.ts","./src/dtos/album.dto.ts","./src/repositories/album.repository.ts","./src/repositories/api-key.repository.ts","../node_modules/.pnpm/@socket.io+redis-adapter@8.3.0_socket.io-adapter@2.5.6/node_modules/@socket.io/redis-adapter/dist/sharded-adapter.d.ts","../node_modules/.pnpm/@socket.io+redis-adapter@8.3.0_socket.io-adapter@2.5.6/node_modules/@socket.io/redis-adapter/dist/index.d.ts","./src/repositories/app.repository.ts","./src/repositories/asset-edit.repository.ts","./src/utils/mime-types.ts","./src/repositories/asset-job.repository.ts","./src/repositories/audit.repository.ts","./src/repositories/cron.repository.ts","../node_modules/.pnpm/@types+bcrypt@6.0.0/node_modules/@types/bcrypt/index.d.ts","../node_modules/.pnpm/@types+ms@2.1.0/node_modules/@types/ms/index.d.ts","../node_modules/.pnpm/@types+jsonwebtoken@9.0.10/node_modules/@types/jsonwebtoken/index.d.ts","./src/repositories/crypto.repository.ts","./src/repositories/download.repository.ts","./src/repositories/duplicate.repository.ts","../node_modules/.pnpm/prettier@3.8.1/node_modules/prettier/doc.d.ts","../node_modules/.pnpm/prettier@3.8.1/node_modules/prettier/index.d.ts","../node_modules/.pnpm/@react-email+render@1.4.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@react-email/render/dist/node/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/dkim/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/xoauth2/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/mailer/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/mime-node/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/shared/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/json-transport/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/ses-transport/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/lib/stream-transport/index.d.ts","../node_modules/.pnpm/@types+nodemailer@7.0.11/node_modules/@types/nodemailer/index.d.ts","../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/global.d.ts","../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/index.d.ts","../node_modules/.pnpm/@react-email+body@0.1.0_react@19.2.4/node_modules/@react-email/body/dist/index.d.ts","../node_modules/.pnpm/@react-email+button@0.2.0_react@19.2.4/node_modules/@react-email/button/dist/index.d.ts","../node_modules/.pnpm/@types+prismjs@1.26.5/node_modules/@types/prismjs/index.d.ts","../node_modules/.pnpm/@react-email+code-block@0.1.0_react@19.2.4/node_modules/@react-email/code-block/dist/index.d.ts","../node_modules/.pnpm/@react-email+code-inline@0.0.5_react@19.2.4/node_modules/@react-email/code-inline/dist/index.d.ts","../node_modules/.pnpm/@react-email+column@0.0.13_react@19.2.4/node_modules/@react-email/column/dist/index.d.ts","../node_modules/.pnpm/@react-email+container@0.0.15_react@19.2.4/node_modules/@react-email/container/dist/index.d.ts","../node_modules/.pnpm/@react-email+font@0.0.9_react@19.2.4/node_modules/@react-email/font/dist/index.d.ts","../node_modules/.pnpm/@react-email+head@0.0.12_react@19.2.4/node_modules/@react-email/head/dist/index.d.ts","../node_modules/.pnpm/@react-email+heading@0.0.15_react@19.2.4/node_modules/@react-email/heading/dist/index.d.ts","../node_modules/.pnpm/@react-email+hr@0.0.11_react@19.2.4/node_modules/@react-email/hr/dist/index.d.ts","../node_modules/.pnpm/@react-email+html@0.0.11_react@19.2.4/node_modules/@react-email/html/dist/index.d.ts","../node_modules/.pnpm/@react-email+img@0.0.11_react@19.2.4/node_modules/@react-email/img/dist/index.d.ts","../node_modules/.pnpm/@react-email+link@0.0.12_react@19.2.4/node_modules/@react-email/link/dist/index.d.ts","../node_modules/.pnpm/@react-email+markdown@0.0.16_react@19.2.4/node_modules/@react-email/markdown/dist/index.d.ts","../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/jsx-runtime.d.ts","../node_modules/.pnpm/@react-email+preview@0.0.13_react@19.2.4/node_modules/@react-email/preview/dist/index.d.ts","../node_modules/.pnpm/@react-email+row@0.0.12_react@19.2.4/node_modules/@react-email/row/dist/index.d.ts","../node_modules/.pnpm/@react-email+section@0.0.16_react@19.2.4/node_modules/@react-email/section/dist/index.d.ts","../node_modules/.pnpm/source-map-js@1.2.1/node_modules/source-map-js/source-map.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/previous-map.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/input.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/css-syntax-error.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/declaration.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/root.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/warning.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/lazy-result.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/no-work-result.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/processor.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/result.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/document.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/rule.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/node.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/comment.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/container.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/at-rule.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/list.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/postcss.d.ts","../node_modules/.pnpm/@react-email+tailwind@1.2.2_react@19.2.4/node_modules/@react-email/tailwind/dist/tailwindcss/generated/corePluginList.d.ts","../node_modules/.pnpm/@react-email+tailwind@1.2.2_react@19.2.4/node_modules/@react-email/tailwind/dist/tailwindcss/generated/colors.d.ts","../node_modules/.pnpm/@react-email+tailwind@1.2.2_react@19.2.4/node_modules/@react-email/tailwind/dist/tailwindcss/config.d.ts","../node_modules/.pnpm/@react-email+tailwind@1.2.2_react@19.2.4/node_modules/@react-email/tailwind/dist/tailwindcss/index.d.ts","../node_modules/.pnpm/@react-email+tailwind@1.2.2_react@19.2.4/node_modules/@react-email/tailwind/dist/index.d.ts","../node_modules/.pnpm/@react-email+text@0.1.5_react@19.2.4/node_modules/@react-email/text/dist/index.d.ts","../node_modules/.pnpm/@react-email+components@0.5.7_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@react-email/components/dist/index.d.ts","./src/emails/components/button.component.tsx","./src/emails/components/footer.template.tsx","./src/emails/components/immich.layout.tsx","./src/utils/replace-template-tags.ts","./src/emails/album-invite.email.tsx","./src/emails/album-update.email.tsx","./src/emails/test.email.tsx","./src/emails/welcome.email.tsx","./src/repositories/email.repository.ts","./src/dtos/queue.dto.ts","./src/repositories/job.repository.ts","./src/dtos/library.dto.ts","./src/repositories/library.repository.ts","./src/dtos/model-config.dto.ts","./src/repositories/machine-learning.repository.ts","../node_modules/.pnpm/i18n-iso-countries@7.14.0/node_modules/i18n-iso-countries/index.d.ts","./src/repositories/system-metadata.repository.ts","./src/repositories/map.repository.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Args.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Logger.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchClusterOptions.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchProcessOptions.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/InternalBatchProcessOptions.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/WhyNotHealthy.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/HealthCheckStrategy.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Parser.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Task.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/ProcessHealthMonitor.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchProcess.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchClusterEmitter.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchClusterStats.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/ChildProcessFactory.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/CombinedBatchProcessOptions.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Deferred.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/FindFlushThresholds.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/Pids.d.ts","../node_modules/.pnpm/batch-cluster@17.3.1/node_modules/batch-cluster/dist/BatchCluster.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Maybe.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/GeoTz.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/BinaryField.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ContainerDirectoryItem.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifDate.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifDateTime.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifTime.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifToolTask.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ErrorsAndWarnings.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/StrEnum.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifToolVendoredTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/GeolocationTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ICCProfileTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ImageDataHashTag.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/IPTCApplicationRecordTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/MWGTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ResourceEvent.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Struct.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Version.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Tags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifToolOptions.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/BinaryExtractionTask.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/PreviewTag.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/JSON.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/RawTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ReadRawTask.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ReadTask.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Defined.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ShortcutTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/WriteTags.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/WriteTask.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/AsyncRetry.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/CapturedAtTagNames.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Omit.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/DefaultExifToolOptions.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/DefaultExiftoolArgs.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/DefaultMaxProcs.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExiftoolPath.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Lazy.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Settings.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/TagDescriptions.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/Timezones.d.ts","../node_modules/.pnpm/exiftool-vendored@35.15.1/node_modules/exiftool-vendored/dist/ExifTool.d.ts","../node_modules/.pnpm/@types+fluent-ffmpeg@2.1.28/node_modules/@types/fluent-ffmpeg/index.d.ts","../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/index.d.ts","../node_modules/.pnpm/thumbhash@0.1.1/node_modules/thumbhash/thumbhash.d.ts","./src/repositories/media.repository.ts","./src/dtos/memory.dto.ts","./src/repositories/memory.repository.ts","../node_modules/.pnpm/geo-tz@8.1.6/node_modules/geo-tz/dist/find.d.ts","../node_modules/.pnpm/geo-tz@8.1.6/node_modules/geo-tz/dist/find-1970.d.ts","./src/repositories/metadata.repository.ts","./src/repositories/move.repository.ts","./src/dtos/notification.dto.ts","./src/repositories/notification.repository.ts","./src/repositories/ocr.repository.ts","./src/repositories/partner.repository.ts","./src/repositories/person.repository.ts","./src/dtos/plugin-manifest.dto.ts","./src/repositories/plugin.repository.ts","./src/repositories/process.repository.ts","./src/repositories/server-info.repository.ts","./src/repositories/session.repository.ts","./src/repositories/shared-link-asset.repository.ts","./src/repositories/shared-link.repository.ts","./src/repositories/stack.repository.ts","../node_modules/.pnpm/@types+readdir-glob@1.1.5/node_modules/@types/readdir-glob/index.d.ts","../node_modules/.pnpm/@types+archiver@7.0.0/node_modules/@types/archiver/index.d.ts","../node_modules/.pnpm/readdirp@4.1.2/node_modules/readdirp/index.d.ts","../node_modules/.pnpm/chokidar@4.0.3/node_modules/chokidar/handler.d.ts","../node_modules/.pnpm/chokidar@4.0.3/node_modules/chokidar/index.d.ts","../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/types/index.d.ts","../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts","../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/settings.d.ts","../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/async.d.ts","../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/index.d.ts","../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/types/index.d.ts","../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts","../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/settings.d.ts","../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/async.d.ts","../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/index.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/types/index.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/settings.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/reader.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/async.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/async.d.ts","../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/index.d.ts","../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/types/index.d.ts","../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/settings.d.ts","../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/managers/tasks.d.ts","../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/index.d.ts","./src/repositories/storage.repository.ts","./src/repositories/sync-checkpoint.repository.ts","./src/repositories/sync.repository.ts","./src/repositories/tag.repository.ts","../node_modules/.pnpm/@opentelemetry+context-async-hooks@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/context-async-hooks/build/src/AbstractAsyncHooksContextManager.d.ts","../node_modules/.pnpm/@opentelemetry+context-async-hooks@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/context-async-hooks/build/src/AsyncHooksContextManager.d.ts","../node_modules/.pnpm/@opentelemetry+context-async-hooks@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/context-async-hooks/build/src/AsyncLocalStorageContextManager.d.ts","../node_modules/.pnpm/@opentelemetry+context-async-hooks@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/context-async-hooks/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationTemporality.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/baggage/propagation/W3CBaggagePropagator.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/anchored-clock.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/attributes.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/types.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/global-error-handler.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/logging-error-handler.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/time.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/timer-util.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/ExportResult.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/baggage/utils.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/platform/node/environment.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/common/globalThis.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/platform/node/sdk-info.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/platform/node/index.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/platform/index.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/propagation/composite.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/trace/W3CTraceContextPropagator.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/trace/rpc-metadata.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/trace/suppress-tracing.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/trace/TraceState.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/utils/merge.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/utils/timeout.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/utils/url.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/utils/callback.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/utils/configuration.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/internal/exporter.d.ts","../node_modules/.pnpm/@opentelemetry+core@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/core/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/config.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/Resource.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detect-resources.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/EnvDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/HostDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/OSDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/ProcessDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/ServiceInstanceIdDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/index.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/platform/index.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/NoopDetector.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/detectors/index.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/ResourceImpl.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/default-service-name.d.ts","../node_modules/.pnpm/@opentelemetry+resources@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/resources/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricData.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/utils.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/AttributesProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/Predicate.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/InstrumentSelector.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/MeterSelector.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Drop.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Histogram.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/Buckets.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/ExponentialHistogram.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/LastValue.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Sum.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/Aggregation.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/AggregationOption.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/view/View.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/InstrumentDescriptor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationSelector.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricProducer.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/CardinalitySelector.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReader.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/InMemoryMetricExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/export/ConsoleMetricExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/MeterProvider.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-metrics@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-metrics/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+exporter-prometheus@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-prometheus/build/src/export/types.d.ts","../node_modules/.pnpm/@opentelemetry+exporter-prometheus@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-prometheus/build/src/PrometheusExporter.d.ts","../node_modules/.pnpm/@opentelemetry+exporter-prometheus@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-prometheus/build/src/PrometheusSerializer.d.ts","../node_modules/.pnpm/@opentelemetry+exporter-prometheus@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/exporter-prometheus/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/types/AnyValue.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/types/LogRecord.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/types/Logger.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/types/LoggerOptions.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/types/LoggerProvider.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/NoopLogger.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/api/logs.d.ts","../node_modules/.pnpm/@opentelemetry+api-logs@0.213.0/node_modules/@opentelemetry/api-logs/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/types_internal.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/autoLoader.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/shimmer.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/instrumentation.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/platform/node/instrumentation.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/platform/node/normalize.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/platform/node/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/platform/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/instrumentationNodeModuleDefinition.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/instrumentationNodeModuleFile.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/utils.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/semconvStability.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-http@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-http/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-http@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-http/build/src/http.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-http@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-http/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-ioredis@0.61.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-ioredis/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-ioredis@0.61.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-ioredis/build/src/instrumentation.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-ioredis@0.61.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-ioredis/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-nestjs-core@0.59.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/instrumentation.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-nestjs-core@0.59.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/enums/AttributeNames.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-nestjs-core@0.59.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/index.d.ts","../node_modules/.pnpm/@types+pg@8.15.6/node_modules/@types/pg/lib/type-overrides.d.ts","../node_modules/.pnpm/@types+pg@8.15.6/node_modules/@types/pg/index.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-pg@0.65.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-pg/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-pg@0.65.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-pg/build/src/instrumentation.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-pg@0.65.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-pg/build/src/enums/AttributeNames.d.ts","../node_modules/.pnpm/@opentelemetry+instrumentation-pg@0.65.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/instrumentation-pg/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/SdkLogRecord.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/LogRecordProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/LoggerProvider.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/ReadableLogRecord.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/LogRecordExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/ConsoleLogRecordExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/SimpleLogRecordProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/InMemoryLogRecordExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/export/BatchLogRecordProcessorBase.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/platform/node/export/BatchLogRecordProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/platform/node/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/platform/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/config/LoggerConfigurators.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-logs@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-logs/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/IdGenerator.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/Sampler.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/TimedEvent.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/ReadableSpan.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/Span.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/SpanProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/BasicTracerProvider.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/SpanExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/BatchSpanProcessorBase.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/export/BatchSpanProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/RandomIdGenerator.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/ConsoleSpanExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/InMemorySpanExporter.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/SimpleSpanProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/export/NoopSpanProcessor.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/AlwaysOffSampler.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/AlwaysOnSampler.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/ParentBasedSampler.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/TraceIdRatioBasedSampler.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-base/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-node@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-node/build/src/config.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-node@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-node/build/src/NodeTracerProvider.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-trace-node@2.6.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-trace-node/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-node@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-node/build/src/types.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-node@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-node/build/src/sdk.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/commonModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/tracerProviderModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/loggerProviderModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/resourceModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/meterProviderModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/models/configModel.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/IConfigFactory.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/ConfigFactory.d.ts","../node_modules/.pnpm/@opentelemetry+configuration@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/configuration/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-node@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-node/build/src/start.d.ts","../node_modules/.pnpm/@opentelemetry+sdk-node@0.213.0_@opentelemetry+api@1.9.0/node_modules/@opentelemetry/sdk-node/build/src/index.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/trace/SemanticAttributes.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/trace/index.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/resource/SemanticResourceAttributes.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/resource/index.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/stable_attributes.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/stable_metrics.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/stable_events.d.ts","../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/build/src/index.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/opentelemetry.module.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/tracing/decorators/span.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/tracing/trace.service.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/metrics/metric.service.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/metrics/injector.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/metrics/decorators/common.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/metrics/decorators/param.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/metrics/decorators/index.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/opentelemetry.constants.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/index.d.ts","../node_modules/.pnpm/nestjs-otel@7.0.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0.15.1_591b3212d6bdc5d70ce97f5a6ba855cc/node_modules/nestjs-otel/lib/opentelemetry.utils.d.ts","./src/repositories/telemetry.repository.ts","./src/repositories/trash.repository.ts","./src/repositories/user.repository.ts","./src/repositories/version-history.repository.ts","./src/repositories/view-repository.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/adapters/ws-adapter.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/adapters/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/connected-socket.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/gateway-server.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/message-body.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/gateway-metadata.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/hooks/on-gateway-connection.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/hooks/on-gateway-disconnect.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/hooks/on-gateway-init.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/hooks/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/server-and-event-streams-host.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/web-socket-server.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/ws-response.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/socket-gateway.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/subscribe-message.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/ack.decorator.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/decorators/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/errors/ws-exception.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/errors/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/exceptions/base-ws-exception-filter.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/exceptions/index.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/interfaces/nest-gateway.interface.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/gateway-metadata-explorer.d.ts","../node_modules/.pnpm/@nestjs+websockets@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validat_23363a9b60b47ebaa32726e9461e8909/node_modules/@nestjs/websockets/index.d.ts","./src/dtos/system-config.dto.ts","./src/dtos/server.dto.ts","./src/repositories/websocket.repository.ts","./src/repositories/workflow.repository.ts","./src/utils/access.ts","../node_modules/.pnpm/@types+js-yaml@4.0.9/node_modules/@types/js-yaml/index.d.ts","./src/utils/config.ts","./src/services/base.service.ts","./src/utils/bytes.ts","../node_modules/.pnpm/ua-parser-js@2.0.9/node_modules/ua-parser-js/src/enums/ua-parser-enums.d.ts","../node_modules/.pnpm/ua-parser-js@2.0.9/node_modules/ua-parser-js/src/main/ua-parser.d.ts","./src/utils/request.ts","./src/services/auth.service.ts","./src/middleware/auth.guard.ts","./src/utils/asset.util.ts","./src/dtos/asset-response.dto.ts","./src/database.ts","./src/cores/storage.core.ts","./src/maintenance/maintenance-health.repository.ts","./src/maintenance/maintenance-websocket.repository.ts","../node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/commonjs/Tokenizer.d.ts","../node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/commonjs/Parser.d.ts","../node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/index.d.ts","../node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/node.d.ts","../node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/index.d.ts","../node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/index.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/stringify.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/traversal.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/manipulation.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/querying.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/legacy.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/helpers.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/feeds.d.ts","../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/index.d.ts","../node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/commonjs/index.d.ts","../node_modules/.pnpm/@types+sanitize-html@2.16.1/node_modules/@types/sanitize-html/index.d.ts","./src/dtos/shared-link.dto.ts","./src/services/shared-link.service.ts","./src/services/version.service.ts","./src/services/api.service.ts","./src/dtos/database-backup.dto.ts","./src/utils/database-backups.ts","./src/utils/file.ts","./src/services/database-backup.service.ts","./src/dtos/license.dto.ts","./src/services/server.service.ts","./src/utils/maintenance.ts","./src/maintenance/maintenance-worker.service.ts","../node_modules/.pnpm/@nestjs+platform-socket.io@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class_677923e29882da76fecabd68445c1688/node_modules/@nestjs/platform-socket.io/adapters/io-adapter.d.ts","../node_modules/.pnpm/@nestjs+platform-socket.io@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class_677923e29882da76fecabd68445c1688/node_modules/@nestjs/platform-socket.io/adapters/index.d.ts","../node_modules/.pnpm/@nestjs+platform-socket.io@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class_677923e29882da76fecabd68445c1688/node_modules/@nestjs/platform-socket.io/index.d.ts","./src/middleware/websocket.adapter.ts","./src/app.common.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/cli-utility.service.d.ts","../node_modules/.pnpm/@golevelup+nestjs-discovery@5.0.0_@nestjs+common@11.1.17_class-transformer@0.5.1_class-_b64f441b37f14204d37cbe5294c8e242/node_modules/@golevelup/nestjs-discovery/lib/discovery.interfaces.d.ts","../node_modules/.pnpm/@golevelup+nestjs-discovery@5.0.0_@nestjs+common@11.1.17_class-transformer@0.5.1_class-_b64f441b37f14204d37cbe5294c8e242/node_modules/@golevelup/nestjs-discovery/lib/discovery.module.d.ts","../node_modules/.pnpm/@golevelup+nestjs-discovery@5.0.0_@nestjs+common@11.1.17_class-transformer@0.5.1_class-_b64f441b37f14204d37cbe5294c8e242/node_modules/@golevelup/nestjs-discovery/lib/discovery.service.d.ts","../node_modules/.pnpm/@golevelup+nestjs-discovery@5.0.0_@nestjs+common@11.1.17_class-transformer@0.5.1_class-_b64f441b37f14204d37cbe5294c8e242/node_modules/@golevelup/nestjs-discovery/lib/index.d.ts","../node_modules/.pnpm/commander@11.1.0/node_modules/commander/typings/index.d.ts","../node_modules/.pnpm/@types+through@0.0.33/node_modules/@types/through/index.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/objects/choice.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/objects/separator.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/objects/choices.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/utils/screen-manager.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/base.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/utils/paginator.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/checkbox.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/confirm.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/editor.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/expand.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/input.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/list.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/number.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/password.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/prompts/rawlist.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/ui/baseUI.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/ui/bottom-bar.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/ui/prompt.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/utils/events.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/lib/utils/readline.d.ts","../node_modules/.pnpm/@types+inquirer@8.2.12/node_modules/@types/inquirer/index.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command-runner.interface.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command.decorators.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/completion.factory.interface.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command-factory.interface.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command.factory.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/completion.factory.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command-runner.module.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/command-runner.service.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/constants.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/inquirer.service.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/request-module.decorator.d.ts","../node_modules/.pnpm/nest-commander@3.20.1_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@0._317827c06fa2c32e4b42ceeea7487048/node_modules/nest-commander/src/index.d.ts","./src/services/cli.service.ts","./src/commands/grant-admin.ts","./src/commands/list-users.command.ts","./src/commands/maintenance-mode.ts","./src/commands/media-location.command.ts","./src/commands/oauth-login.ts","./src/commands/password-login.ts","./src/commands/reset-admin-password.command.ts","./src/commands/schema-check.ts","./src/commands/version.command.ts","./src/commands/index.ts","./src/dtos/activity.dto.ts","./src/services/activity.service.ts","./src/controllers/activity.controller.ts","./src/dtos/user-preferences.dto.ts","./src/utils/preferences.ts","./src/services/album.service.ts","./src/controllers/album.controller.ts","./src/dtos/api-key.dto.ts","./src/services/api-key.service.ts","./src/controllers/api-key.controller.ts","./src/utils/object.ts","./src/services/system-config.service.ts","./src/controllers/app.controller.ts","./src/dtos/asset-media-response.dto.ts","./src/services/asset-media.service.ts","./src/middleware/asset-upload.interceptor.ts","../node_modules/.pnpm/@nestjs+platform-express@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-v_66e78004f9ffddb083198f7787d44643/node_modules/@nestjs/platform-express/multer/multer/multer.utils.d.ts","../node_modules/.pnpm/@types+multer@2.1.0/node_modules/@types/multer/index.d.ts","./src/middleware/file-upload.interceptor.ts","./src/controllers/asset-media.controller.ts","./src/services/asset.service.ts","./src/controllers/asset.controller.ts","./src/services/auth-admin.service.ts","./src/controllers/auth-admin.controller.ts","./src/utils/response.ts","./src/controllers/auth.controller.ts","./src/services/maintenance.service.ts","./src/controllers/database-backup.controller.ts","./src/dtos/download.dto.ts","./src/services/download.service.ts","./src/controllers/download.controller.ts","./src/dtos/duplicate.dto.ts","./src/utils/duplicate.ts","./src/services/duplicate.service.ts","./src/controllers/duplicate.controller.ts","./src/services/person.service.ts","./src/controllers/face.controller.ts","./src/dtos/job.dto.ts","./src/dtos/queue-legacy.dto.ts","./src/services/job.service.ts","./src/services/queue.service.ts","./src/controllers/job.controller.ts","./src/services/library.service.ts","./src/controllers/library.controller.ts","./src/controllers/maintenance.controller.ts","./src/dtos/map.dto.ts","./src/services/map.service.ts","./src/controllers/map.controller.ts","./src/services/memory.service.ts","./src/controllers/memory.controller.ts","./src/services/notification-admin.service.ts","./src/controllers/notification-admin.controller.ts","./src/services/notification.service.ts","./src/controllers/notification.controller.ts","./src/controllers/oauth.controller.ts","./src/dtos/partner.dto.ts","./src/services/partner.service.ts","./src/controllers/partner.controller.ts","./src/controllers/person.controller.ts","./src/dtos/plugin.dto.ts","../node_modules/.pnpm/@extism+extism@2.0.0-rc13/node_modules/@extism/extism/dist/cjs/call-context.d.ts","../node_modules/.pnpm/@extism+extism@2.0.0-rc13/node_modules/@extism/extism/dist/cjs/interfaces.d.ts","../node_modules/.pnpm/@extism+extism@2.0.0-rc13/node_modules/@extism/extism/dist/cjs/polyfills/deno-capabilities.d.ts","../node_modules/.pnpm/@extism+extism@2.0.0-rc13/node_modules/@extism/extism/dist/cjs/mod.d.ts","./src/plugins.ts","./src/services/plugin-host.functions.ts","./src/services/plugin.service.ts","./src/controllers/plugin.controller.ts","./src/controllers/queue.controller.ts","./src/dtos/search.dto.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/bi-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/bit-set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/bit-vector.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/bk-tree.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/bloom-filter.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/utils/types.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/circular-buffer.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/default-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/default-weak-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fixed-deque.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fibonacci-heap.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fixed-reverse-heap.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fixed-stack.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fuzzy-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/fuzzy-multi-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/hashed-array-tree.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/heap.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/inverted-index.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/kd-tree.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/linked-list.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/lru-cache.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/lru-cache-with-delete.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/lru-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/lru-map-with-delete.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/multi-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/multi-set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/passjoin-index.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/queue.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/sparse-queue-set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/sparse-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/sparse-set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/stack.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/static-disjoint-set.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/static-interval-tree.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/suffix-array.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/symspell.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/trie.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/trie-map.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/vector.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/vp-tree.d.ts","../node_modules/.pnpm/mnemonist@0.40.3/node_modules/mnemonist/index.d.ts","./src/services/search.service.ts","./src/controllers/search.controller.ts","./src/dtos/system-metadata.dto.ts","./src/services/system-metadata.service.ts","./src/controllers/server.controller.ts","./src/dtos/session.dto.ts","./src/services/session.service.ts","./src/controllers/session.controller.ts","./src/controllers/shared-link.controller.ts","./src/dtos/stack.dto.ts","./src/services/stack.service.ts","./src/controllers/stack.controller.ts","./src/utils/logger.ts","./src/middleware/global-exception.filter.ts","./src/utils/sync.ts","./src/services/sync.service.ts","./src/controllers/sync.controller.ts","../node_modules/.pnpm/handlebars@4.7.9/node_modules/handlebars/types/index.d.ts","./src/services/storage-template.service.ts","./src/controllers/system-config.controller.ts","./src/controllers/system-metadata.controller.ts","./src/utils/tag.ts","./src/services/tag.service.ts","./src/controllers/tag.controller.ts","./src/dtos/bbox.dto.ts","./src/utils/bbox.ts","./src/dtos/time-bucket.dto.ts","./src/services/timeline.service.ts","./src/controllers/timeline.controller.ts","./src/dtos/trash.dto.ts","./src/services/trash.service.ts","./src/controllers/trash.controller.ts","./src/services/user-admin.service.ts","./src/controllers/user-admin.controller.ts","./src/dtos/onboarding.dto.ts","./src/dtos/user-profile.dto.ts","./src/services/user.service.ts","./src/controllers/user.controller.ts","./src/services/view.service.ts","./src/controllers/view.controller.ts","./src/dtos/workflow.dto.ts","./src/services/workflow.service.ts","./src/controllers/workflow.controller.ts","./src/controllers/index.ts","./src/maintenance/maintenance-auth.guard.ts","./src/maintenance/maintenance-worker.controller.ts","./src/middleware/error.interceptor.ts","./src/middleware/logging.interceptor.ts","./src/repositories/index.ts","./src/services/audit.service.ts","./src/services/database.service.ts","./src/utils/editor.ts","./src/utils/media.ts","./src/services/media.service.ts","./src/utils/tasks.ts","./src/services/metadata.service.ts","./src/services/ocr.service.ts","./src/services/smart-info.service.ts","./src/services/storage.service.ts","./src/services/telemetry.service.ts","./src/services/index.ts","./src/utils/fetch.ts","./src/app.module.ts","./src/main.ts","./src/bin/sync-open-api.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/interfaces/mock-factory.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/interfaces/override-by-factory-options.interface.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/interfaces/override-module.interface.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/testing-module.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/testing-module.builder.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/interfaces/override-by.interface.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/interfaces/index.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/test.d.ts","../node_modules/.pnpm/@nestjs+testing@11.1.17_@nestjs+common@11.1.17_class-transformer@0.5.1_class-validator@_72927e35f49d8e73d779936763385228/node_modules/@nestjs/testing/index.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/formatter/Params.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/lexer/regexFactory.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/lexer/token.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/lexer/TokenizerOptions.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/FormatOptions.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/parser/ast.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/formatter/Indentation.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/formatter/Layout.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/formatter/ExpressionFormatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/lexer/Tokenizer.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/dialect.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/bigquery/bigquery.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/clickhouse/clickhouse.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/db2/db2.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/db2i/db2i.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/duckdb/duckdb.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/hive/hive.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/mariadb/mariadb.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/mysql/mysql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/tidb/tidb.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/n1ql/n1ql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/plsql/plsql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/postgresql/postgresql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/redshift/redshift.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/spark/spark.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/sqlite/sqlite.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/sql/sql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/trino/trino.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/transactsql/transactsql.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/singlestoredb/singlestoredb.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/languages/snowflake/snowflake.formatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/allDialects.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/sqlFormatter.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/expandPhrases.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/validateConfig.d.ts","../node_modules/.pnpm/sql-formatter@15.7.2/node_modules/sql-formatter/dist/cjs/index.d.ts","./src/bin/sync-sql.ts","./src/emails/components/futo.layout.tsx","./src/emails/license.email.tsx","./src/schema/migrations/1744910873969-InitialMigration.ts","./src/schema/migrations/1744991379464-AddNotificationsTable.ts","./src/schema/migrations/1745244781846-AddUserAvatarColorColumn.ts","./src/schema/migrations/1745902563899-AddAssetVisibilityColumn.ts","./src/schema/migrations/1746636476623-DropExtraIndexes.ts","./src/schema/migrations/1746768490606-AddUserPincode.ts","./src/schema/migrations/1746844028242-AddLockedVisibilityEnum.ts","./src/schema/migrations/1746987967923-AddPinExpiresAtColumn.ts","./src/schema/migrations/1747329504572-AddNewSessionColumns.ts","./src/schema/migrations/1747338664832-SessionRename.ts","./src/schema/migrations/1747664684909-AddAlbumAuditTables.ts","./src/schema/migrations/1749067526135-UserOnboardingDefault.ts","./src/schema/migrations/1750107668827-PartnerCreateId.ts","./src/schema/migrations/1750189909087-AddAlbumUserCreateFields.ts","./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts","./src/schema/migrations/1750676477029-AlbumAssetUpdateId.ts","./src/schema/migrations/1750694237564-AlbumAssetAuditTable.ts","./src/schema/migrations/1750780093818-AddAlbumToAssetDeleteTrigger.ts","./src/schema/migrations/1751035357937-MemorySyncChanges.ts","./src/schema/migrations/1751304834247-StackSyncChanges.ts","./src/schema/migrations/1751924596408-AddOverrides.ts","./src/schema/migrations/1752004072340-UpdateIndexOverrides.ts","./src/schema/migrations/1752152941084-PeopleAuditTable.ts","./src/schema/migrations/1752161055253-RenameGeodataPKConstraint.ts","./src/schema/migrations/1752161055254-AddActivityAssetFk.ts","./src/schema/migrations/1752169992364-AddIsPendingSyncReset.ts","./src/schema/migrations/1752250924342-UserMetadataSync.ts","./src/schema/migrations/1752267649968-StandardizeNames.ts","./src/schema/migrations/1752759108283-ConvertToAbsolutePaths.ts","./src/schema/migrations/1753104909784-AssetFaceUpdateIdAndAuditTable.ts","./src/schema/migrations/1753464178233-RenameApiKeyPermissions.ts","./src/schema/migrations/1753471866748-AddSharedLinkSlug.ts","./src/schema/migrations/1753800911775-ProfileImageCheckpointRemoval.ts","./src/schema/migrations/1754389095885-ResetAlbumAssetSync.ts","./src/schema/migrations/1756318797207-AssetMetadataTables.ts","./src/schema/migrations/1758705774125-CreateAssetOCRTable.ts","./src/schema/migrations/1758705789125-CreateOCRSearchTable.ts","./src/schema/migrations/1758705804128-UpsertOcrAssetJobStatus.ts","./src/schema/migrations/1761078763279-AddAppVersionColumnToSession.ts","./src/schema/migrations/1761755618862-FixColumnNames.ts","./src/schema/migrations/1762297277677-AddPluginAndWorkflowTables.ts","./src/schema/migrations/1764483051488-OCRBigramsForCJK.ts","./src/schema/migrations/1764698859174-SidecarInAssetFile.ts","./src/schema/migrations/1764705680041-ChangeWorkflowTableColumnsName.ts","./src/schema/migrations/1764957138636-AddLockedPropertiesToAssetExif.ts","./src/schema/migrations/1768336661963-AddAssetWidthHeight.ts","./src/schema/migrations/1768336671610-CreateAssetEditTable.ts","./src/schema/migrations/1768336694315-CreateIsVisibleColumns.ts","./src/schema/migrations/1768587436457-AddEditCountToAsset.ts","./src/schema/migrations/1768757482271-SwitchToIsEdited.ts","./src/schema/migrations/1768828334807-AddIsEditedToAssetFile.ts","./src/schema/migrations/1768847456553-AddTagsToExif.ts","./src/schema/migrations/1769105700133-AddAssetEditSequence.ts","./src/schema/migrations/1769441657564-AddIsProgressiveColumn.ts","./src/schema/migrations/1769635093204-DropThumbnailJobStatusColumns.ts","./src/schema/migrations/1771478781948-PeopleSearchIndex.ts","./src/schema/migrations/1771535611395-ConvertRating0ToNull.ts","./src/schema/migrations/1771639515206-AddIsTransparentColumn.ts","./src/schema/migrations/1771873044511-ChangesTokensToBuffers.ts","./src/schema/migrations/1771873813973-AssetEditSync.ts","./src/schema/migrations/1772121424533-AddAssetExifGistEarthcoord.ts","./src/schema/migrations/1772129818245-FixStupidWhiteSpace.ts","./src/schema/migrations/1772609167000-UpdateOpusCodecName.ts","./src/schema/migrations/1773242919341-EncodedVideoAssetFiles.ts","./src/schema/migrations/1773956345315-DuplicateSharedLinkAssets.ts","./src/schema/migrations/1774393726320-AssetFaceSyncReset.ts","./src/schema/migrations/1774548649115-AddChecksumAlgorithm.ts.ts","./src/schema/migrations/1775165531374-AddPersonNameTrigramIndex.ts","./src/workers/api.ts","./src/workers/maintenance.ts","./src/workers/microservices.ts","../node_modules/.pnpm/@vitest+pretty-format@3.2.4/node_modules/@vitest/pretty-format/dist/index.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/types.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/helpers.d.ts","../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/index-8b61d5bc.d.ts","../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/node.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/index.d.ts","../node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/tasks.d-CkscK4of.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/diff.d.ts","../node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/types.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/error.d.ts","../node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/index.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/PropertySymbol.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/enums/BrowserErrorCaptureEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/enums/BrowserNavigationCrossOriginPolicyEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/IEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/EventPhaseEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/Event.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/IEventListenerOptions.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/TEventListenerFunction.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/TEventListenerObject.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/TEventListener.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/IConsole.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/async-task-manager/AsyncTaskManager.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/NodeTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/NodeDocumentPositionEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/NodeList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/mutation-observer/MutationTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/mutation-observer/MutationRecord.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/mutation-observer/IMutationObserverInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/mutation-observer/IMutationListener.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedQuerySelectorAllResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedQuerySelectorResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/query-selector/ISelectorMatch.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedMatchesResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedElementsByTagNameResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedElementByTagNameResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/declaration/property-manager/ICSSStyleDeclarationPropertyValue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/declaration/property-manager/CSSStyleDeclarationPropertyManager.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedComputedStyleResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/ICachedElementByIdResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/CSSRuleTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/utilities/CSSParser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/CSSRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSGroupingRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSConditionRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSMediaRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/MediaList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/CSSStyleSheet.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/declaration/CSSStyleDeclaration.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMStringMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/attr/Attr.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-element/HTMLElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-style-element/HTMLStyleElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/element/HTMLCollection.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-input-element/HTMLInputElementSelectionModeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/file/Blob.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/file/File.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-input-element/FileList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-meter-element/HTMLMeterElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-output-element/HTMLOutputElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-progress-element/HTMLProgressElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-option-element/HTMLOptionElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-select-element/HTMLOptionsCollection.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-select-element/HTMLSelectElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-label-element/HTMLLabelElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-data-list-element/HTMLDataListElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-input-element/HTMLInputElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-object-element/HTMLObjectElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/validity-state/ValidityState.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-button-element/HTMLButtonElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-field-set-element/HTMLFieldSetElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-form-element/THTMLFormControlElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-form-element/RadioNodeList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-form-element/HTMLFormControlsCollection.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-form-element/HTMLFormElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/child-node/IChildNode.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/child-node/INonDocumentTypeChildNode.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/character-data/CharacterData.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/text/Text.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-slot-element/HTMLSlotElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/IDOMRectInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMRectReadOnly.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMRect.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/IDOMPointInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMPointReadOnly.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMPoint.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/IDOMMatrixCompatibleObject.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/TDOMMatrixInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/TDOMMatrix2DArray.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/TDOMMatrix3DArray.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/IDOMMatrixJSON.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/DOMMatrixReadOnly.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/dom-matrix/DOMMatrix.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGStringList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGMatrix.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGTransformTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGTransform.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGTransformList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedTransformList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-graphics-element/SVGGraphicsElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGRect.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGPoint.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGLengthTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGLength.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAngleTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAngle.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGNumber.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedRect.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGPreserveAspectRatioMeetOrSliceEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGPreserveAspectRatioAlignEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGPreserveAspectRatio.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedPreserveAspectRatio.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedLength.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMTokenList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-hyperlink-element/IHTMLHyperlinkElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-area-element/HTMLAreaElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TimeRanges.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/RemotePlayback.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/IMediaTrackCapabilities.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/IMediaTrackSettings.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/MediaStreamTrack.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IMediaQueryListEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/MediaStreamTrackEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/MediaStream.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TextTrackCue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TextTrackCueList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TextTrackKindEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TextTrack.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/TextTrackList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/HTMLMediaElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-audio-element/HTMLAudioElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-base-element/HTMLBaseElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-body-element/HTMLBodyElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-br-element/HTMLBRElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-canvas-element/ImageBitmap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-canvas-element/OffscreenCanvas.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-canvas-element/HTMLCanvasElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-d-list-element/HTMLDListElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-data-element/HTMLDataElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-details-element/HTMLDetailsElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-dialog-element/HTMLDialogElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-div-element/HTMLDivElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-embed-element/HTMLEmbedElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-head-element/HTMLHeadElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-heading-element/HTMLHeadingElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-hr-element/HTMLHRElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-html-element/HTMLHtmlElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/location/Location.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/CrossOriginBrowserWindow.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-image-element/HTMLImageElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-legend-element/HTMLLegendElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-li-element/HTMLLIElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-link-element/HTMLLinkElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-map-element/HTMLMapElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-menu-element/HTMLMenuElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-meta-element/HTMLMetaElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-mod-element/HTMLModElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-o-list-element/HTMLOListElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-opt-group-element/HTMLOptGroupElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-paragraph-element/HTMLParagraphElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-param-element/HTMLParamElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-picture-element/HTMLPictureElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-pre-element/HTMLPreElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-quote-element/HTMLQuoteElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestReferrerPolicy.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-script-element/HTMLScriptElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-source-element/HTMLSourceElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-span-element/HTMLSpanElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-caption-element/HTMLTableCaptionElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-cell-element/HTMLTableCellElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-col-element/HTMLTableColElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-row-element/HTMLTableRowElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-section-element/HTMLTableSectionElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-table-element/HTMLTableElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-animation-element/SVGAnimationElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-animate-element/SVGAnimateElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-animate-motion-element/SVGAnimateMotionElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-animate-transform-element/SVGAnimateTransformElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedNumber.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-geometry-element/SVGGeometryElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-circle-element/SVGCircleElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedEnumeration.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-clip-path-element/SVGClipPathElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-defs-element/SVGDefsElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-desc-element/SVGDescElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-ellipse-element/SVGEllipseElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedString.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-blend-element/SVGFEBlendElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGNumberList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedNumberList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-color-matrix-element/SVGFEColorMatrixElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-component-transfer-element/SVGFEComponentTransferElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-composite-element/SVGFECompositeElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedBoolean.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedInteger.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-convolve-matrix-element/SVGFEConvolveMatrixElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-diffuse-lighting-element/SVGFEDiffuseLightingElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-displacement-map-element/SVGFEDisplacementMapElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-distant-light-element/SVGFEDistantLightElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-drop-shadow-element/SVGFEDropShadowElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-flood-element/SVGFEFloodElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-component-transfer-function-element/SVGComponentTransferFunctionElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-func-a-element/SVGFEFuncAElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-func-b-element/SVGFEFuncBElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-func-g-element/SVGFEFuncGElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-func-r-element/SVGFEFuncRElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-gaussian-blur-element/SVGFEGaussianBlurElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-image-element/SVGFEImageElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-merge-element/SVGFEMergeElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-merge-node-element/SVGFEMergeNodeElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-morphology-element/SVGFEMorphologyElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-offset-element/SVGFEOffsetElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-point-light-element/SVGFEPointLightElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-specular-lighting-element/SVGFESpecularLightingElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-spot-light-element/SVGFESpotLightElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-tile-element/SVGFETileElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-fe-turbulence-element/SVGFETurbulenceElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-filter-element/SVGFilterElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-foreign-object-element/SVGForeignObjectElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-g-element/SVGGElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-image-element/SVGImageElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-line-element/SVGLineElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-gradient-element/SVGGradientElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-linear-gradient-element/SVGLinearGradientElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedAngle.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-marker-element/SVGMarkerElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-mask-element/SVGMaskElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-metadata-element/SVGMetadataElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-m-path-element/SVGMPathElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-path-element/SVGPathElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-pattern-element/SVGPatternElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGPointList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-polygon-element/SVGPolygonElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-polyline-element/SVGPolylineElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-radial-gradient-element/SVGRadialGradientElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-rect-element/SVGRectElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-script-element/SVGScriptElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-set-element/SVGSetElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-stop-element/SVGStopElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-switch-element/SVGSwitchElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-symbol-element/SVGSymbolElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-text-content-element/SVGTextContentElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGLengthList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGAnimatedLengthList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-text-positioning-element/SVGTextPositioningElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-text-element/SVGTextElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-text-path-element/SVGTextPathElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-title-element/SVGTitleElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-t-span-element/SVGTSpanElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-use-element/SVGUseElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-view-element/SVGViewElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/config/ISVGElementTagNameMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document-fragment/DocumentFragment.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/shadow-root/ShadowRoot.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-template-element/HTMLTemplateElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-time-element/HTMLTimeElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-title-element/HTMLTitleElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-track-element/HTMLTrackElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-u-list-element/HTMLUListElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-video-element/HTMLVideoElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/config/IHTMLElementTagNameMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-svg-element/SVGSVGElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-element/SVGElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/svg-style-element/SVGStyleElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/node/Node.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom/DOMRectList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/element/NamedNodeMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/parent-node/IParentNode.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/IScrollToOptions.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/element/Element.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/tree-walker/TNodeFilter.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/tree-walker/NodeIterator.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/tree-walker/TreeWalker.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document-type/DocumentType.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom-implementation/DOMImplementation.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/comment/Comment.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document/DocumentReadyStateEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/range/RangeHowEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/range/IRangeBoundaryPoint.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/range/Range.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/selection/Selection.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/processing-instruction/ProcessingInstruction.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document/VisibilityStateEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/Headers.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/THeadersInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/IResponseInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/form-data/FormData.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TResponseBody.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/CachedResponseStateEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/ICachedResponse.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/Response.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/preload/PreloadEntry.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document/Document.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowserPageViewport.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/IVirtualConsoleLogGroup.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/enums/VirtualConsoleLogLevelEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/enums/VirtualConsoleLogTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/IVirtualConsoleLogEntry.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/IVirtualConsolePrinter.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/VirtualConsolePrinter.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/url/URL.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/cookie/enums/CookieSameSiteEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/cookie/ICookie.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/cookie/IOptionalCookie.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/cookie/ICookieContainer.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/ICacheableRequest.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/ICacheableResponse.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/IResponseCacheFileSystem.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/response/IResponseCache.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/utilities/BrowserExceptionObserver.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/preflight/ICachedPreflightResponse.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/preflight/ICacheablePreflightRequest.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/preflight/ICacheablePreflightResponse.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/cache/preflight/IPreflightResponseCache.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IECMAScriptModuleImport.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IECMAScriptModuleCachedResult.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowserContext.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IReloadOptions.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IGoToOptions.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IOptionalBrowserPageViewport.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowserPage.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/history/HistoryScrollRestorationEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/history/IHistoryItem.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/history/HistoryItemList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowserFrame.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/clipboard/ClipboardItem.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/clipboard/Clipboard.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/CSSUnitValue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/CSS.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSContainerRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSFontFaceRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSKeyframeRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSKeyframesRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/style-property-map/CSSKeywordValue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/style-property-map/CSSStyleValue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/style-property-map/StylePropertyMapReadOnly.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/style-property-map/StylePropertyMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSStyleRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSSupportsRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/custom-element/ICustomElementDefinition.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/custom-element/CustomElementRegistry.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/dom-parser/DOMParser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/DataTransferItem.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/DataTransferItemList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/DataTransfer.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/MessagePort.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/ITouchInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/Touch.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/IUIEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/UIEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IAnimationEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/AnimationEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IClipboardEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ClipboardEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ICustomEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/CustomEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IErrorEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ErrorEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IFocusEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/FocusEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IHashChangeEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/HashChangeEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IInputEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/InputEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IKeyboardEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/KeyboardEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IMediaQueryListInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/MediaQueryListEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IMessageEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/MessageEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IMouseEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/MouseEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IPointerEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/PointerEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IProgressEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ProgressEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/storage/Storage.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IStorageEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/StorageEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ISubmitEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/SubmitEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ITouchEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/TouchEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IWheelEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/WheelEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/exception/DOMException.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/AbortController.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestInfo.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/file/FileReader.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/history/History.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/intersection-observer/IntersectionObserverEntry.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/intersection-observer/IIntersectionObserverInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/intersection-observer/IntersectionObserver.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/match-media/MediaQueryList.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/mutation-observer/MutationObserver.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/navigator/Plugin.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/navigator/MimeType.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/navigator/MimeTypeArray.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/navigator/PluginArray.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/permissions/PermissionStatus.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/permissions/Permissions.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/navigator/Navigator.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/document/DocumentReadyStateManager.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-audio-element/Audio.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-document/HTMLDocument.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-image-element/Image.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/VTTRegion.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-media-element/VTTCue.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-unknown-element/HTMLUnknownElement.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/xml-document/XMLDocument.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/resize-observer/ResizeObserver.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/screen/Screen.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/screen/ScreenDetailed.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/screen/ScreenDetails.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-http-request/XMLHttpRequestEventTarget.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-http-request/XMLHttpRequestReadyStateEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-http-request/XMLHttpRequestUpload.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-http-request/XMLHttpResponseTypeEnum.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestBody.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-http-request/XMLHttpRequest.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-serializer/XMLSerializer.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/INodeJSGlobal.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/nodes/html-canvas-element/CanvasCaptureMediaStreamTrack.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/svg/SVGUnitTypes.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/custom-element/CustomElementReactionStack.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IModule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IModuleImportMapRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IModuleImportMapScope.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IModuleImportMap.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/css/rules/CSSScopeRule.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/IPopStateEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/PopStateEvent.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/ICloseEventInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/events/CloseEvent.d.ts","../node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.mts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/web-socket/WebSocket.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/BrowserWindow.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/event/EventTarget.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/AbortSignal.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestMode.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestCredentials.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/TRequestRedirect.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/IRequestInit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/Request.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/ISyncResponse.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/IFetchInterceptor.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/IVirtualServer.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/fetch/types/IFetchRequestHeaders.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/IOptionalTimerLoopsLimit.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/module/types/IResolveNodeModules.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IBrowserSettings.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/BrowserFrame.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/BrowserPage.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/BrowserContext.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/types/IOptionalBrowserSettings.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/Browser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/detached-browser/DetachedBrowserFrame.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/detached-browser/DetachedBrowserPage.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/detached-browser/DetachedBrowserContext.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/browser/detached-browser/DetachedBrowser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/console/VirtualConsole.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/html-serializer/HTMLSerializer.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/tree-walker/NodeFilter.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/DetachedWindowAPI.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/Window.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/window/GlobalWindow.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/xml-parser/XMLParser.d.ts","../node_modules/.pnpm/happy-dom@20.8.9/node_modules/happy-dom/lib/index.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/optional-types.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/environment.d.cL3nLXbE.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/hmrPayload.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/customEvent.d.ts","../node_modules/.pnpm/@types+estree@1.0.8/node_modules/@types/estree/index.d.ts","../node_modules/.pnpm/rollup@4.55.1/node_modules/rollup/dist/rollup.d.ts","../node_modules/.pnpm/rollup@4.55.1/node_modules/rollup/dist/parseAst.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/hot.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/dist/node/module-runner.d.ts","../node_modules/.pnpm/esbuild@0.27.4/node_modules/esbuild/lib/main.d.ts","../node_modules/.pnpm/@jridgewell+trace-mapping@0.3.31/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts","../node_modules/.pnpm/@jridgewell+trace-mapping@0.3.31/node_modules/@jridgewell/trace-mapping/types/types.d.mts","../node_modules/.pnpm/@jridgewell+trace-mapping@0.3.31/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts","../node_modules/.pnpm/@jridgewell+trace-mapping@0.3.31/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts","../node_modules/.pnpm/@jridgewell+gen-mapping@0.3.13/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts","../node_modules/.pnpm/@jridgewell+gen-mapping@0.3.13/node_modules/@jridgewell/gen-mapping/types/types.d.mts","../node_modules/.pnpm/@jridgewell+gen-mapping@0.3.13/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts","../node_modules/.pnpm/@jridgewell+source-map@0.3.11/node_modules/@jridgewell/source-map/types/source-map.d.mts","../node_modules/.pnpm/terser@5.44.1/node_modules/terser/tools/terser.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/internal/terserOptions.d.ts","../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/postcss.d.mts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/deprecations.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/util/promise_or.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/importer.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/logger/source_location.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/logger/source_span.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/logger/index.d.ts","../node_modules/.pnpm/immutable@5.1.4/node_modules/immutable/dist/immutable.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/boolean.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/calculation.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/color.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/function.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/list.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/map.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/mixin.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/number.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/string.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/argument_list.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/value/index.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/options.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/compile.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/exception.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/exception.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/plugin_this.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/function.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/importer.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/options.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/legacy/render.d.ts","../node_modules/.pnpm/sass@1.97.1/node_modules/sass/types/index.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/internal/cssPreprocessorOptions.d.ts","../node_modules/.pnpm/lightningcss@1.32.0/node_modules/lightningcss/node/ast.d.ts","../node_modules/.pnpm/lightningcss@1.32.0/node_modules/lightningcss/node/targets.d.ts","../node_modules/.pnpm/lightningcss@1.32.0/node_modules/lightningcss/node/index.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/internal/lightningcssOptions.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/importGlob.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/types/metadata.d.ts","../node_modules/.pnpm/vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite/dist/node/index.d.ts","../node_modules/.pnpm/@vitest+mocker@3.2.4_vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass_7f029439c4befb3b8e460811a6536e17/node_modules/@vitest/mocker/dist/registry.d-D765pazg.d.ts","../node_modules/.pnpm/@vitest+mocker@3.2.4_vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass_7f029439c4befb3b8e460811a6536e17/node_modules/@vitest/mocker/dist/types.d-D_aRZRdy.d.ts","../node_modules/.pnpm/@vitest+mocker@3.2.4_vite@7.3.2_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass_7f029439c4befb3b8e460811a6536e17/node_modules/@vitest/mocker/dist/index.d.ts","../node_modules/.pnpm/@vitest+utils@3.2.4/node_modules/@vitest/utils/dist/source-map.d.ts","../node_modules/.pnpm/vite-node@3.2.4_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite-node/dist/trace-mapping.d-DLVdEqOp.d.ts","../node_modules/.pnpm/vite-node@3.2.4_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite-node/dist/index.d-DGmxD2U7.d.ts","../node_modules/.pnpm/vite-node@3.2.4_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite-node/dist/index.d.ts","../node_modules/.pnpm/@vitest+snapshot@3.2.4/node_modules/@vitest/snapshot/dist/environment.d-DHdQ1Csl.d.ts","../node_modules/.pnpm/@vitest+snapshot@3.2.4/node_modules/@vitest/snapshot/dist/rawSnapshot.d-lFsMJFUd.d.ts","../node_modules/.pnpm/@vitest+snapshot@3.2.4/node_modules/@vitest/snapshot/dist/index.d.ts","../node_modules/.pnpm/@vitest+snapshot@3.2.4/node_modules/@vitest/snapshot/dist/environment.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/config.d.D2ROskhv.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/worker.d.1GmBbd7G.d.ts","../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../node_modules/.pnpm/@vitest+runner@3.2.4/node_modules/@vitest/runner/dist/utils.d.ts","../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/benchmark.d.BwvBVTda.d.ts","../node_modules/.pnpm/vite-node@3.2.4_@types+node@24.12.2_jiti@2.6.1_lightningcss@1.32.0_sass@1.97.1_terser@5.44.1_tsx@4.21.0_yaml@2.8.3/node_modules/vite-node/dist/client.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/coverage.d.S9RMNXIe.d.ts","../node_modules/.pnpm/@vitest+snapshot@3.2.4/node_modules/@vitest/snapshot/dist/manager.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/reporters.d.BFLkQcL6.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/worker.d.CKwWzBSj.d.ts","../node_modules/.pnpm/@vitest+spy@3.2.4/node_modules/@vitest/spy/dist/index.d.ts","../node_modules/.pnpm/@vitest+expect@3.2.4/node_modules/@vitest/expect/dist/index.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/global.d.MAmajcmJ.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/vite.d.CMLlLIFP.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/mocker.d.BE_2ls6u.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/chunks/suite.d.FvehnV49.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/dist/index.d.ts","../node_modules/.pnpm/vitest@3.2.4_@types+debug@4.1.12_@types+node@24.12.2_happy-dom@20.8.9_jiti@2.6.1_jsdom@_a52eb07ceb3a6bf117ffbaefdcb02e6b/node_modules/vitest/globals.d.ts"],"fileIdsList":[[421,476,493,494,1857,2469],[421,476,493,494,1857,2468],[421,476,493,494,1857,2468,2469,2470],[417,421,476,493,494,1857],[421,476,493,494,1857],[421,476,493,494,1304,1857,2358],[421,476,493,494,1857,2358,2359,2360],[421,476,493,494,1190,1191,1199,1857],[421,476,493,494,1857,3192,3194],[421,476,493,494,1857,3193],[421,476,493,494,1857,3192,3195],[421,476,493,494,1857,3190,3192],[421,476,493,494,1857,3189,3190,3191],[421,476,493,494,1857,3189,3192],[421,476,493,494,1536,1857],[417,421,476,493,494,1536,1857],[421,476,493,494,1538,1857],[421,476,493,494,1534,1535,1537,1539,1541,1857],[421,476,493,494,1540,1857],[417,421,476,493,494,1304,1663,1667,1857],[417,421,476,493,494,1231,1232,1304,1650,1663,1667,1668,1671,1672,1673,1857],[417,421,476,493,494,1655,1657,1857],[417,421,476,493,494,1304,1674,1857],[421,476,493,494,519,1650,1652,1857],[421,476,493,494,1659,1660,1661,1662,1664,1666,1857],[421,476,493,494,1650,1857],[417,421,476,493,494,1663,1857],[421,476,493,494,1665,1857],[421,476,493,494,1669,1670,1857],[417,421,476,493,494,1650,1857],[421,476,493,494,1542,1651,1657,1658,1667,1671,1675,1676,1681,1857],[421,476,493,494,1672,1857],[421,476,493,494,1650,1651,1857],[421,476,493,494,1652,1654,1655,1656,1857],[421,476,493,494,1650,1653,1857],[417,421,476,493,494,1650,1653,1857],[417,421,476,493,494,1650,1651,1653,1857],[421,476,493,494,1677,1678,1679,1680,1857],[317,421,476,493,494,1857],[66,318,319,320,321,322,323,324,325,326,327,328,329,330,421,476,493,494,1857],[269,303,421,476,493,494,1857],[276,421,476,493,494,1857],[266,317,417,421,476,493,494,1857],[335,336,337,338,339,340,341,343,421,476,493,494,1857],[271,421,476,493,494,1857],[317,417,421,476,493,494,1857],[271,342,421,476,493,494,1857],[331,334,344,421,476,493,494,1857],[332,333,421,476,493,494,1857],[307,421,476,493,494,1857],[271,272,273,274,421,476,493,494,1857],[347,421,476,493,494,1857],[289,346,421,476,493,494,1857],[346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,421,476,493,494,1857],[376,421,476,493,494,1857],[373,374,421,476,493,494,1857],[372,375,421,476,493,494,508,1857],[65,275,317,345,369,372,377,384,409,414,416,421,476,493,494,1857],[71,269,421,476,493,494,1857],[70,421,476,493,494,1857],[71,261,262,421,476,493,494,1243,1248,1857],[261,269,421,476,493,494,1857],[70,260,421,476,493,494,1857],[269,397,421,476,493,494,1857],[263,399,421,476,493,494,1857],[260,264,421,476,493,494,1857],[264,421,476,493,494,1857],[70,317,421,476,493,494,1857],[268,269,421,476,493,494,1857],[281,421,476,493,494,1857],[283,284,285,286,287,421,476,493,494,1857],[275,421,476,493,494,1857],[275,276,295,421,476,493,494,1857],[289,290,296,297,298,421,476,493,494,1857],[67,68,69,70,71,261,262,263,264,265,266,267,268,269,270,276,281,282,288,295,299,300,301,303,311,312,313,314,315,316,421,476,493,494,1857],[294,421,476,493,494,1857],[277,278,279,280,421,476,493,494,1857],[269,277,278,421,476,493,494,1857],[269,275,276,421,476,493,494,1857],[269,279,421,476,493,494,1857],[269,307,421,476,493,494,1857],[302,304,305,306,307,308,309,310,421,476,493,494,1857],[67,269,421,476,493,494,1857],[303,421,476,493,494,1857],[67,269,302,306,308,421,476,493,494,1857],[278,421,476,493,494,1857],[304,421,476,493,494,1857],[269,303,304,305,421,476,493,494,1857],[293,421,476,493,494,1857],[269,273,293,294,311,312,421,476,493,494,1857],[291,292,294,421,476,493,494,1857],[265,267,276,282,296,313,314,317,421,476,493,494,1857],[71,260,265,267,270,313,314,421,476,493,494,1857],[274,421,476,493,494,1857],[260,421,476,493,494,1857],[293,317,378,382,421,476,493,494,1857],[382,383,421,476,493,494,1857],[317,378,421,476,493,494,1857],[317,378,379,421,476,493,494,1857],[379,380,421,476,493,494,1857],[379,380,381,421,476,493,494,1857],[270,421,476,493,494,1857],[387,388,389,421,476,493,494,1857],[387,421,476,493,494,1857],[389,390,391,393,394,395,421,476,493,494,1857],[386,421,476,493,494,1857],[389,392,421,476,493,494,1857],[389,390,391,393,394,421,476,493,494,1857],[270,387,389,393,421,476,493,494,1857],[385,396,401,402,403,404,405,406,407,408,421,476,493,494,1857],[270,317,401,421,476,493,494,1857],[270,392,421,476,493,494,1857],[270,392,417,421,476,493,494,1857],[263,269,270,392,397,398,399,400,421,476,493,494,1857],[260,317,397,398,410,421,476,493,494,1857],[317,397,421,476,493,494,1857],[412,421,476,493,494,1857],[345,410,421,476,493,494,1857],[410,411,413,421,476,493,494,1857],[293,421,476,493,494,520,1857],[293,370,371,421,476,493,494,1857],[302,421,476,493,494,1857],[275,317,421,476,493,494,1857],[415,421,476,493,494,1857],[295,317,417,421,476,493,494,1857],[418,421,476,493,494,1857],[317,417,421,476,493,494,1232,1233,1857],[342,421,476,493,494,1857],[417,421,476,493,494,1226,1231,1232,1857],[421,476,493,494,1236,1237,1857],[421,476,493,494,1220,1231,1721,1857],[71,317,421,476,493,494,1227,1232,1246,1857],[417,421,476,493,494,1214,1239,1857],[70,417,421,476,493,494,1240,1243,1857],[317,421,476,493,494,1227,1232,1234,1245,1247,1251,1857],[70,421,476,493,494,1249,1250,1857],[421,476,493,494,1240,1857],[260,317,417,421,476,493,494,1254,1857],[317,417,421,476,493,494,1227,1232,1234,1246,1857],[421,476,493,494,1253,1255,1256,1857],[317,421,476,493,494,1232,1857],[421,476,493,494,1232,1857],[317,417,421,476,493,494,1254,1857],[70,317,417,421,476,493,494,1857],[317,417,421,476,493,494,1226,1227,1232,1252,1254,1257,1260,1265,1266,1279,1280,1857],[260,418,421,476,493,494,1857],[421,476,493,494,1239,1242,1281,1857],[421,476,493,494,1266,1278,1857],[65,421,476,493,494,1214,1234,1235,1238,1241,1273,1278,1282,1285,1289,1290,1291,1293,1295,1301,1303,1857],[317,417,421,476,493,494,1220,1228,1231,1232,1857],[317,421,476,493,494,1224,1857],[294,317,342,417,421,476,493,494,1223,1224,1225,1226,1231,1232,1234,1304,1857],[421,476,493,494,1226,1227,1230,1232,1268,1277,1857],[317,417,421,476,493,494,1219,1231,1232,1857],[421,476,493,494,1267,1857],[417,421,476,493,494,1227,1232,1857],[417,421,476,493,494,1220,1227,1231,1272,1857],[317,342,417,421,476,493,494,1219,1231,1857],[417,421,476,493,494,1225,1226,1230,1270,1274,1275,1276,1857],[417,421,476,493,494,1220,1227,1228,1229,1231,1232,1857],[317,342,421,476,493,494,1227,1230,1232,1857],[260,421,476,493,494,1231,1857],[269,302,308,421,476,493,494,1857],[421,476,493,494,1216,1217,1218,1227,1231,1232,1271,1857],[421,476,493,494,1223,1272,1283,1284,1857],[342,417,421,476,493,494,1232,1857],[342,417,421,476,493,494,1857],[421,476,493,494,1215,1216,1217,1218,1221,1223,1857],[421,476,493,494,1220,1857],[421,476,493,494,1222,1223,1857],[417,421,476,493,494,1215,1216,1217,1218,1221,1222,1857],[421,476,493,494,1258,1259,1857],[317,421,476,493,494,1227,1232,1234,1246,1857],[421,476,493,494,1269,1857],[300,421,476,493,494,1857],[281,317,421,476,493,494,1286,1287,1857],[421,476,493,494,1288,1857],[317,421,476,493,494,1234,1857],[317,421,476,493,494,1227,1234,1857],[294,317,417,421,476,493,494,1220,1227,1228,1229,1231,1232,1857],[293,317,417,421,476,493,494,1214,1227,1234,1272,1290,1857],[294,295,417,418,421,476,493,494,1292,1857],[421,476,493,494,1262,1263,1264,1857],[417,421,476,493,494,1261,1857],[421,476,493,494,1294,1857],[417,421,476,493,494,505,1857],[421,476,493,494,1297,1299,1300,1857],[421,476,493,494,1296,1857],[421,476,493,494,1298,1857],[417,421,476,493,494,1226,1231,1297,1857],[421,476,493,494,1244,1857],[317,342,417,421,476,493,494,1227,1231,1232,1234,1269,1270,1272,1273,1857],[421,476,493,494,1302,1857],[291,295,317,417,418,421,476,490,492,493,494,535,536,537,538,1857],[421,476,493,494,539,1857],[421,476,493,494,540,542,553,1857],[421,476,493,494,536,537,541,1857],[291,417,421,476,490,492,493,494,535,536,537,538,1857],[421,476,490,493,494,1857],[421,476,493,494,549,551,552,1857],[417,421,476,493,494,543,1857],[421,476,493,494,544,545,546,547,548,1857],[317,421,476,493,494,543,1857],[421,476,493,494,550,1857],[417,421,476,493,494,550,1857],[421,476,493,494,1857,2352],[260,421,476,493,494,1360,1857,2303],[421,476,493,494,1857,2353],[421,476,493,494,1369,1857],[421,476,493,494,1370,1371,1372,1857],[421,476,493,494,1361,1857],[421,476,493,494,1362,1373,1374,1375,1376,1857],[417,421,476,493,494,1374,1857],[421,476,493,494,1377,1857],[417,421,476,493,494,898,899,1857],[421,476,493,494,921,1857],[421,476,493,494,898,899,1857],[421,476,493,494,898,1857],[417,421,476,493,494,898,899,912,1857],[417,421,476,493,494,912,915,1857],[417,421,476,493,494,898,1857],[421,476,493,494,915,1857],[421,476,493,494,896,897,900,901,902,903,904,905,906,907,908,909,910,911,913,914,916,917,918,919,920,922,923,924,1857],[421,476,493,494,898,918,929,1857],[65,421,476,493,494,925,929,930,931,936,938,1857],[421,476,493,494,898,927,928,1857],[417,421,476,493,494,898,912,1857],[421,476,493,494,898,926,1857],[296,417,421,476,493,494,929,1857],[421,476,493,494,932,933,934,935,1857],[421,476,493,494,937,1857],[421,476,493,494,1857,2588,2589,2591,2592],[421,476,493,494,1857,2585,2586,2590],[421,476,493,494,1857,2586,2589],[421,476,493,494,1269,1857,2589],[307,421,476,493,494,1857,2589],[294,417,421,476,493,494,1269,1273,1857,2587,2588,2591],[417,421,476,493,494,1227,1231,1234,1272,1292,1304,1857],[421,476,493,494,1857,2279],[260,317,417,421,476,493,494,1857],[421,476,493,494,1857,2281,2282,2283,2293,2294,2295],[421,476,493,494,1857,2292],[421,476,493,494,1857,2297],[421,476,493,494,1857,2299],[260,421,476,493,494,1273,1857,2301],[65,421,476,493,494,1857,2280,2292,2296,2298,2300,2302],[291,421,476,493,494,1857],[421,476,493,494,1857,2285,2286,2287],[421,476,493,494,1857,2284,2288,2289,2290,2291],[421,476,493,494,1857,2062,2063],[421,476,493,494,1857,2063,2064,2065,2066],[421,476,493,494,526,1857,2063,2065],[421,476,493,494,1857,2062,2064],[421,476,488,493,494,526,1857],[421,476,488,493,494,526,1857,2058],[421,476,493,494,1857,2058,2059,2060,2061],[421,476,493,494,1857,2058,2060],[421,476,493,494,1857,2059],[421,476,493,494,508,526,1857,2067,2068,2069,2072],[421,476,493,494,1857,2068,2069,2071],[421,476,487,493,494,526,1857,2067,2068,2069,2070],[421,476,493,494,1857,2069],[421,476,493,494,1857,2067,2068],[421,476,493,494,526,1857,2067],[421,476,493,494,1857,2165,2166],[421,476,493,494,1857,2166,2167,2168],[421,476,493,494,1857,2164,2165,2166,2167,2168,2169,2170],[421,476,493,494,1773,1857,2164],[421,476,493,494,1857,2165],[421,476,493,494,1773,1857],[421,476,493,494,1857,2166,2167],[421,476,493,494,1732,1857],[421,476,493,494,1735,1857],[421,476,493,494,1740,1742,1857],[421,476,493,494,1728,1732,1744,1745,1857],[421,476,493,494,1755,1758,1764,1766,1857],[421,476,493,494,1727,1732,1857],[421,476,493,494,1726,1857],[421,476,493,494,1727,1857],[421,476,493,494,1734,1857],[421,476,493,494,1737,1857],[421,476,493,494,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1767,1768,1769,1770,1771,1772,1857],[421,476,493,494,1743,1857],[421,476,493,494,1739,1857],[421,476,493,494,1740,1857],[421,476,493,494,1731,1732,1738,1857],[421,476,493,494,1739,1740,1857],[421,476,493,494,1746,1857],[421,476,493,494,1767,1857],[421,476,493,494,1732,1752,1754,1755,1756,1857],[421,476,493,494,1755,1756,1758,1857],[421,476,493,494,1732,1747,1750,1753,1760,1857],[421,476,493,494,1747,1748,1857],[421,476,493,494,1730,1747,1750,1753,1857],[421,476,493,494,1731,1857],[421,476,493,494,1732,1749,1752,1857],[421,476,493,494,1748,1857],[421,476,493,494,1749,1857],[421,476,493,494,1747,1749,1857],[421,476,493,494,1729,1730,1747,1749,1750,1751,1857],[421,476,493,494,1749,1752,1857],[421,476,493,494,1732,1752,1754,1857],[421,476,493,494,1755,1756,1857],[421,476,493,494,1857,2250],[421,476,493,494,1857,2249],[421,476,493,494,1857,2245,2246,2248,2249,2250,2251],[421,476,493,494,1857,2245,2246,2247,2248],[421,476,493,494,1857,2244],[421,476,493,494,1773,1857,2082],[421,476,493,494,1857,2083,2084],[421,476,493,494,1773,1857,2090],[421,476,493,494,1857,2090],[421,476,493,494,1857,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112],[421,476,493,494,1857,2095],[421,476,493,494,1857,2100],[421,476,493,494,1857,2097,2098,2099],[421,476,490,493,494,526,1857,2159,2160],[421,476,493,494,1857,2129,2159],[421,476,493,494,1857,2159],[421,476,493,494,1857,2160,2161,2162],[421,476,493,494,1857,2185,2186],[421,476,493,494,1857,2186,2187],[421,476,490,493,494,526,1773,1857,2185],[421,476,493,494,1857,2189,2190],[421,476,493,494,1857,2185,2189],[421,476,493,494,526,1773,1857,2185],[421,476,493,494,1857,2192,2193],[421,476,493,494,1857,2185],[421,476,493,494,1857,2197,2198,2199],[421,476,493,494,1857,2185,2197],[421,476,493,494,1773,1857,2185,2196],[421,476,493,494,1857,2173],[421,476,493,494,1857,2172,2173,2174,2180,2181,2182,2183,2184],[421,476,493,494,1773,1857,2171,2172],[421,476,493,494,1857,2172],[421,476,493,494,1857,2179],[421,476,493,494,1857,2177,2178],[421,476,493,494,1857,2172,2175,2176],[421,476,493,494,498,1857],[421,476,493,494,1773,1857,2171],[421,476,493,494,1773,1857,2114],[421,476,493,494,1857,2114,2116],[421,476,493,494,1857,2114],[421,476,493,494,1857,2115,2116],[421,476,493,494,1857,2114,2115],[421,476,493,494,1857,2118,2124,2125],[421,476,493,494,1857,2123],[421,476,493,494,1857,2119,2120,2121,2122],[421,476,493,494,1857,2114,2115,2116,2117,2126,2127,2128],[421,476,493,494,1773,1857,2115],[421,476,493,494,1773,1857,2201],[421,476,493,494,1857,2171,2203],[421,476,493,494,1857,2203],[421,476,493,494,1857,2201,2202,2203,2206],[421,476,493,494,1857,2113,2205,2206],[421,476,493,494,1857,2113,2205],[421,476,493,494,1773,1857,2113,2129,2171],[421,476,493,494,1857,2201,2202,2206],[421,476,493,494,1857,2201,2202,2203,2204,2205,2206,2207,2208,2209,2213,2214],[421,476,493,494,1857,2212],[421,476,493,494,1857,2203,2210],[421,476,493,494,1857,2211],[421,476,493,494,1857,2113,2129,2171,2202],[421,476,493,494,1773,1857,2130,2146],[421,476,493,494,1773,1857,2129,2146,2152,2154],[421,476,493,494,1773,1857,2086,2130,2131,2148],[421,476,493,494,1773,1857,2086,2130,2131,2138,2139,2147,2148],[421,476,493,494,1773,1857,2086,2130,2131,2147,2148],[421,476,493,494,1857,2136,2137,2140,2141,2142,2148],[421,476,493,494,1773,1857,2086,2130,2131,2147],[421,476,493,494,1857,2086,2130,2145],[421,476,493,494,1857,2130],[421,476,493,494,1857,2086,2113,2130,2149,2150],[421,476,493,494,1857,2086,2113,2130,2150],[421,476,493,494,1773,1857,2086,2113,2129,2148],[421,476,493,494,1857,2086,2113,2130,2145],[421,476,493,494,1857,2086,2130,2145,2149,2151,2152,2153],[421,476,493,494,1857,2150,2151,2154],[421,476,493,494,1857,2086,2130,2131,2132,2145,2146,2148,2149,2150,2151,2154,2155,2156,2157,2158],[421,476,493,494,1773,1857,2113],[421,476,493,494,1857,2131,2143,2147,2148],[421,476,493,494,1857,2144],[421,476,493,494,1857,2130,2133],[421,476,493,494,1857,2133],[421,476,493,494,1857,2130,2132,2134,2135,2144,2145],[421,476,493,494,1773,1857,2113,2129,2159,2215,2238,2241,2242,2243,2253],[421,476,493,494,1857,2159,2215,2242],[421,476,493,494,1857,2129,2242,2252],[421,476,493,494,1773,1857,2129,2159,2185,2215,2238],[421,476,493,494,1773,1857,2222],[421,476,493,494,1773,1857,2113,2129,2218,2219,2221,2222],[421,476,493,494,1773,1857,2219,2220],[421,476,493,494,1773,1857,2219,2220,2221,2222,2224],[421,476,493,494,1857,2113,2219,2224],[421,476,493,494,1773,1857,2219,2220,2221],[421,476,493,494,1773,1857,2113,2129,2218],[421,476,493,494,1773,1857,2219,2220,2221,2224],[421,476,493,494,1857,2113,2219],[421,476,493,494,1857,2216,2217,2218,2219,2220,2221,2222,2223,2224,2229,2230,2231,2232,2233,2234,2235,2236,2237],[421,476,493,494,1857,2228],[421,476,493,494,1857,2216],[421,476,493,494,1857,2222,2225],[421,476,493,494,1857,2226,2227],[421,476,493,494,1857,2217],[421,476,493,494,1773,1857,2217],[421,476,493,494,1773,1857,2129,2216,2217,2221],[421,476,493,494,1857,2238,2239],[421,476,493,494,1857,2238],[421,476,493,494,1857,2238,2239,2240],[421,476,493,494,1857,2256,2258,2259,2260,2261],[421,476,493,494,1857,2257],[421,476,493,494,1857,2255],[421,476,493,494,1857,1904],[421,476,493,494,1857,1904,1907],[421,476,493,494,1857,1887,1905,1906,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1921,1922,1923,1947,1948],[421,476,493,494,1857,1904,1920],[421,476,493,494,1857,1886],[421,476,493,494,1857,1904,1946],[421,476,493,494,1857,1943,1944],[421,476,493,494,1857,1942,1945],[421,476,493,494,1355,1857,1871],[421,476,493,494,1355,1857],[421,476,488,493,494,508,525,1857,2053],[421,476,493,494,526,1857],[421,476,490,493,494,526,533,1857],[421,476,493,494,1857,3249,3250],[421,476,493,494,525,535,1857],[421,476,490,493,494,526,1857],[421,476,493,494,535,1857],[421,476,487,490,493,494,526,527,528,529,1857],[421,476,493,494,530,532,534,1857],[421,476,487,493,494,508,526,1857],[260,421,476,493,494,503,1857,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383],[421,476,493,494,1857,2384],[421,476,493,494,1857,2364,2365,2384],[260,421,476,493,494,503,1857,2367,2384],[421,476,493,494,503,1857,2368,2369,2384],[421,476,493,494,503,1857,2368,2384],[260,421,476,493,494,503,1857,2368,2384],[421,476,493,494,503,1857,2374,2384],[421,476,493,494,503,1857,2384],[260,421,476,493,494,503,1857],[421,476,493,494,1857,2367],[421,476,493,494,503,1857],[421,476,481,493,494,526,1857,1880],[421,476,493,494,1201,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1205,1206,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1206,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1207,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1208,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1209,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1208,1210,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1208,1209,1211,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1212,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1213,1857],[421,476,493,494,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1857],[421,476,493,494,567,1857],[421,476,493,494,560,1857],[421,476,493,494,559,561,563,564,568,1857],[421,476,493,494,561,562,565,1857],[421,476,493,494,559,562,565,1857],[421,476,493,494,561,563,565,1857],[421,476,493,494,559,560,562,563,564,565,566,1857],[421,476,493,494,559,565,1857],[421,476,493,494,561,1857],[421,476,493,494,508,535,1857],[421,473,474,476,493,494,1857],[421,475,476,493,494,1857],[476,493,494,1857],[421,476,481,493,494,511,1857],[421,476,477,482,487,493,494,496,508,519,1857],[421,476,477,478,487,493,494,496,1857],[421,476,479,493,494,520,1857],[421,476,480,481,488,493,494,497,1857],[421,476,481,493,494,508,516,1857],[421,476,482,484,487,493,494,496,1857],[421,475,476,483,493,494,1857],[421,476,484,485,493,494,1857],[421,476,486,487,493,494,1857],[421,475,476,487,493,494,1857],[421,476,487,488,489,493,494,508,519,1857],[421,476,487,488,489,493,494,503,508,511,1857],[421,468,476,484,487,490,493,494,496,508,519,1857],[421,476,487,488,490,491,493,494,496,508,516,519,1857],[421,476,490,492,493,494,508,516,519,1857],[419,420,421,422,423,424,425,426,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,1857],[421,476,487,493,494,1857],[421,476,493,494,495,519,1857],[421,476,484,487,493,494,496,508,1857],[421,476,493,494,497,1857],[421,475,476,493,494,499,1857],[421,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,1857],[421,476,493,494,501,1857],[421,476,493,494,502,1857],[421,476,487,493,494,503,504,1857],[421,476,493,494,503,505,520,522,1857],[421,476,488,493,494,1857],[421,476,487,493,494,508,509,511,1857],[421,476,493,494,510,511,1857],[421,476,493,494,508,509,1857],[421,476,493,494,511,1857],[421,476,493,494,512,1857],[421,473,476,493,494,508,513,519,1857],[421,476,487,493,494,514,515,1857],[421,476,493,494,514,515,1857],[421,476,481,493,494,496,508,516,1857],[421,476,493,494,517,1857],[421,476,493,494,496,518,1857],[421,476,490,493,494,502,519,1857],[421,476,481,493,494,520,1857],[421,476,493,494,508,521,1857],[421,476,493,494,495,522,1857],[421,476,493,494,523,1857],[421,476,481,493,494,1857],[421,468,476,493,494,1857],[421,476,493,494,524,1857],[421,468,476,487,489,493,494,499,508,511,519,521,522,524,1857],[421,476,493,494,508,525,1857],[421,476,493,494,526,1857,1889,1891,1895,1896,1897,1898,1899,1900],[421,476,493,494,508,526,1857],[421,476,487,493,494,526,1857,1889,1891,1892,1894,1901],[421,476,487,493,494,496,508,519,526,1857,1888,1889,1890,1892,1893,1894,1901],[421,476,493,494,508,526,1857,1891,1892],[421,476,493,494,508,526,1857,1891],[421,476,493,494,526,1857,1889,1891,1892,1894,1901],[421,476,493,494,508,526,1857,1893],[421,476,487,493,494,496,508,516,526,1857,1890,1892,1894],[421,476,487,493,494,526,1857,1889,1891,1892,1893,1894,1901],[421,476,487,493,494,508,526,1857,1889,1890,1891,1892,1893,1894,1901],[421,476,487,493,494,508,526,1857,1889,1891,1892,1894,1901],[421,476,490,493,494,508,526,1857,1894],[421,476,487,493,494,508,516,526,1192,1193,1196,1857,2195,2196],[421,476,493,494,1857,2196],[421,476,487,493,494,508,516,526,1192,1193,1196,1197,1198,1857],[421,476,493,494,1198,1857],[421,476,493,494,1842,1857],[421,476,493,494,1839,1840,1841,1857],[421,476,493,494,1857,1902,1903],[421,476,487,488,493,494,526,1857],[421,476,493,494,1857,2338],[421,476,493,494,570,608,1857],[421,476,493,494,570,593,608,1857],[421,476,493,494,569,608,1857],[421,476,493,494,608,1857],[421,476,493,494,570,1857],[421,476,493,494,570,594,608,1857],[421,476,493,494,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,1857],[421,476,493,494,594,608,1857],[421,476,488,493,494,508,526,1857],[421,476,490,493,494,526,531,1857],[421,476,493,494,1412,1413,1414,1415,1416,1417,1418,1419,1420,1857],[421,476,487,490,492,493,494,496,508,516,519,525,526,1857],[421,476,493,494,1857,2708,2709,2712,3260],[421,476,493,494,1857,3236,3237],[421,476,493,494,1857,2709,2710,2712,2713,2714],[421,476,493,494,1857,2709],[421,476,493,494,1857,2709,2710,2712],[421,476,493,494,1857,2709,2710],[421,476,493,494,1857,3243],[421,476,493,494,1857,2704,3243,3244],[421,476,493,494,1857,2704,3243],[421,476,493,494,1857,2704,2711],[421,476,493,494,1857,2705],[421,476,493,494,1857,2704,2705,2706,2708],[421,476,493,494,1857,2704],[421,476,493,494,1857,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985],[421,476,493,494,1857,1968,1973,1976,1978],[421,476,493,494,1857,1969,1979],[421,476,493,494,1857,1979],[421,476,477,493,494,1857,1972,1973,1976,1977],[421,476,477,493,494,1857],[421,476,493,494,1857,1970,1972,1981],[421,476,477,493,494,1857,1969,1976],[421,476,493,494,1857,1972,1973,1977],[421,476,493,494,1857,1970,1971],[421,476,493,494,1857,1972,1973,1974,1976,1979],[421,476,493,494,1857,1972,1975],[421,476,493,494,1544,1557,1558,1857],[421,476,493,494,1621,1622,1857],[421,476,493,494,1591,1621,1857],[421,476,477,487,493,494,524,1621,1857],[421,476,493,494,1625,1626,1627,1628,1629,1857],[421,476,487,493,494,1585,1606,1621,1632,1635,1857],[421,476,493,494,1543,1559,1606,1622,1623,1624,1630,1631,1632,1633,1634,1635,1636,1637,1639,1640,1641,1642,1643,1644,1646,1857],[421,476,493,494,1591,1621,1632,1633,1635,1857],[421,476,493,494,1591,1621,1631,1634,1857],[421,476,493,494,1621,1638,1857],[421,476,487,493,494,1587,1597,1606,1621,1631,1632,1635,1857],[421,476,493,494,1621,1632,1633,1857],[421,476,493,494,1591,1621,1632,1633,1857],[421,476,493,494,1591,1621,1633,1635,1857],[421,476,493,494,1591,1621,1632,1635,1637,1641,1642,1857],[421,476,487,493,494,1591,1621,1857],[421,476,493,494,1623,1635,1857],[421,476,493,494,1585,1591,1621,1857],[421,476,493,494,519,1591,1621,1632,1633,1635,1637,1638,1639,1642,1645,1857],[421,476,493,494,1562,1593,1594,1595,1596,1857],[421,476,493,494,1591,1597,1621,1645,1647,1648,1649,1857],[421,476,493,494,1558,1560,1857],[421,476,493,494,1544,1545,1546,1549,1857],[421,476,493,494,1562,1857],[421,476,487,493,494,1585,1857],[421,476,493,494,1591,1599,1857],[421,476,493,494,1544,1546,1549,1550,1554,1555,1557,1561,1563,1586,1592,1598,1599,1600,1601,1602,1603,1604,1605,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1857],[421,476,493,494,1552,1553,1554,1857],[421,476,493,494,1591,1857],[421,476,493,494,1598,1857],[421,476,493,494,1546,1552,1553,1554,1555,1556,1857],[421,476,493,494,1586,1596,1598,1607,1857],[421,476,493,494,1555,1593,1857],[421,476,493,494,1552,1857],[421,476,493,494,1550,1561,1592,1598,1857],[421,476,493,494,1585,1857],[421,476,493,494,1548,1857],[421,476,493,494,1616,1857],[421,476,493,494,1557,1591,1857],[421,476,477,493,494,524,1857],[421,476,493,494,1586,1587,1599,1606,1857],[421,476,493,494,1597,1857],[421,476,493,494,1545,1561,1598,1599,1604,1611,1618,1857],[421,476,493,494,1557,1857],[421,476,493,494,1545,1551,1552,1553,1556,1558,1560,1587,1588,1589,1590,1857],[421,476,493,494,1555,1857],[421,476,493,494,1550,1551,1857],[421,476,493,494,1588,1857],[421,476,493,494,1635,1857],[421,476,493,494,1549,1857],[421,476,493,494,1621,1631,1857],[421,476,487,493,494,1585,1591,1597,1621,1638,1857],[421,476,488,493,494,1857,2055,2057],[421,476,487,488,493,494,1857,2055,2056],[421,476,493,494,1321,1857],[421,476,493,494,1323,1324,1325,1326,1327,1328,1329,1857],[421,476,493,494,1312,1857],[421,476,493,494,1313,1321,1322,1330,1857],[421,476,493,494,1314,1857],[421,476,493,494,1308,1857],[421,476,493,494,1305,1306,1307,1308,1309,1310,1311,1314,1315,1316,1317,1318,1319,1320,1857],[421,476,493,494,1313,1315,1857],[421,476,493,494,1316,1321,1857],[421,476,493,494,1383,1857],[421,476,493,494,1384,1857],[421,476,493,494,1383,1384,1389,1857],[421,476,493,494,1385,1386,1387,1388,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1857],[421,476,493,494,1384,1421,1857],[421,476,493,494,1384,1415,1857],[421,476,493,494,1384,1462,1857],[421,476,493,494,1379,1380,1381,1382,1383,1384,1389,1511,1512,1513,1514,1518,1857],[421,476,493,494,1389,1857],[421,476,493,494,1381,1516,1517,1857],[421,476,493,494,1383,1515,1857],[421,476,493,494,1384,1389,1857],[421,476,493,494,1379,1380,1857],[421,476,493,494,1547,1857],[421,476,493,494,568,1365,1367,1368,1857],[421,476,493,494,568,1367,1368,1857],[421,476,493,494,568,1363,1367,1857],[421,476,477,493,494,568,1364,1365,1366,1857],[421,476,493,494,1857,2328],[421,476,493,494,1857,2327],[421,476,493,494,1857,2326],[421,476,493,494,1857,2328,2330,2331,2332,2333,2334,2335,2336],[421,476,493,494,1857,2326,2328],[421,476,493,494,1857,2328,2329],[421,476,493,494,1332,1857],[421,476,493,494,1332,1333,1334,1857],[421,476,490,493,494,1335,1338,1339,1342,1346,1347,1857],[421,476,487,490,493,494,508,1337,1338,1339,1340,1341,1857],[421,476,487,490,493,494,1335,1338,1342,1857],[421,476,487,490,493,494,1335,1336,1337,1857],[421,476,493,494,1338,1343,1344,1345,1857],[421,476,493,494,1335,1338,1857],[421,476,493,494,1335,1337,1338,1857],[421,476,493,494,1338,1857],[421,476,493,494,1338,1342,1857],[421,476,493,494,1857,1987,1994,2007],[421,476,493,494,1857,1987],[421,476,493,494,1857,1986,2006,2007,2020],[421,476,493,494,1857,1994],[421,476,493,494,568,1857,1987],[421,476,493,494,1857,1986,1987,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028],[421,476,493,494,1857,1986,1987,1988,2006],[421,476,493,494,1857,1986,2007],[421,476,493,494,1857,1995,1996],[421,476,493,494,1857,1986],[421,476,493,494,1857,1996],[421,476,493,494,1857,1991,1992,1993,1996],[421,476,493,494,1857,1995,2010],[421,476,493,494,1857,1994,2011],[421,476,493,494,1857,1987,1988,1994,2006],[421,476,493,494,1857,1991,1992],[421,476,493,494,1857,2029],[421,476,493,494,1857,1989,1990,1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005],[421,476,493,494,568,1857,1987,2006,2007,2019],[421,476,493,494,1857,1991,1992,2003],[421,476,493,494,1857,1991,1992,1995,2003,2005,2006,2014,2015],[421,476,493,494,1857,1994,2007,2016],[421,476,493,494,1857,3266,3267],[421,476,493,494,1857,3266,3267,3268,3269],[421,476,493,494,1857,3266,3268],[421,476,493,494,1857,3266],[421,476,493,494,526,1857,2074,2075,2076],[421,476,493,494,1857,2074,2075],[421,476,493,494,1857,2074],[421,476,493,494,526,1857,2073],[421,476,493,494,1857,2036],[421,476,493,494,1857,3034],[421,476,493,494,1857,2716,2726,3018,3019,3160,3162,3163,3164],[421,476,493,494,1857,2716,3013,3017,3023,3025,3026,3162,3165],[421,476,493,494,522,1857,2716,2727,2856,2999,3001,3027,3028,3033,3034,3146,3162],[421,476,493,494,522,1857,2726,2999,3002,3008,3027,3028,3029,3030,3161,3163],[421,476,493,494,1857,2716,2726,3018,3019,3034,3146,3160,3164,3167,3168],[421,476,493,494,1857,2716,3013,3017,3023,3025,3026,3167,3169],[421,476,493,494,522,1857,2716,2727,2856,2999,3001,3027,3028,3033,3034,3146,3167],[421,476,493,494,522,1857,2726,2999,3002,3008,3027,3028,3029,3030,3166,3168],[421,476,493,494,1857,2716,2726,3018,3026,3030,3160],[421,476,493,494,1857,2716,3013,3017,3019,3023,3025,3030],[421,476,493,494,522,1857,2716,2727,2856,2999,3001,3027,3028,3030,3033,3146],[421,476,493,494,522,1857,2726,2999,3002,3008,3026,3027,3028,3029,3034],[421,476,493,494,1857,2717,2718,3002,3146,3155,3156,3157,3158,3159],[421,476,493,494,1857,2873,3027],[421,476,493,494,1857,2717,2718,3029,3146,3155,3156,3157,3158,3159],[421,476,493,494,1857,2993,3146],[421,476,493,494,1857,3146],[421,476,493,494,1857,3035,3146],[421,476,493,494,1857,2761],[421,476,493,494,1857,2757,2758,2764,2765,2766,2767,2769,2770,2771,2772,2773,2774,2776,2777,2781,2786,2822,2823,2838,2839,2840,2841,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2874,2875,2876,2877,2878,2879,2880,2881,2882,2963,2964,2965,2966,2967,2968],[421,476,493,494,1857,2884,2885,2886,2889,2891,2892,2893,2894,2896,2899,2900,2901,2904,2905,2906,2907,2908,2909,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2932,2934,2935,2936,2937,2938,2939,2941,2942,2943,2944,2945,2946,2947,2948,2949,2954,2955,2956,2957,2958,2959,2970,2972],[421,476,493,494,1857,3003,3004,3005],[421,476,493,494,1857,2721,3004,3006],[421,476,493,494,1857,2726,3007],[421,476,493,494,1857,2721,3004,3006,3007],[421,476,493,494,1857,3010],[421,476,493,494,1857,3009,3011,3012],[421,476,493,494,1857,3037],[421,476,493,494,1857,2716,2746,2747,2753,3146],[421,476,493,494,1857,2716,2748,2752,3146],[421,476,493,494,1857,2716,2751],[421,476,493,494,1857,2716,2748,2978,3146],[421,476,493,494,1857,2742],[421,476,493,494,1857,2716,2749],[421,476,493,494,1857,2716,2746,2750],[421,476,493,494,1857,2716,2746,2748,2754],[421,476,493,494,1857,2716,2748],[421,476,493,494,1857,2716,2746,2748,3041],[421,476,493,494,1857,2716,2746,2750,2752],[421,476,493,494,1857,2716,2746,2749],[421,476,493,494,1857,2716,2746,2749,2754,3046],[421,476,493,494,1857,2754],[421,476,493,494,1857,3045],[421,476,493,494,1857,2716,2754,3043,3044],[421,476,493,494,1857,2748,2753],[421,476,493,494,1857,2978,3146],[421,476,493,494,1857,2716,2757,2973,3049,3146],[421,476,493,494,1857,2757],[421,476,493,494,1857,2982,3001],[421,476,493,494,1857,2716,3001,3146],[421,476,493,494,1857,2791],[421,476,493,494,1857,2716,2790],[421,476,493,494,1857,2787,2788],[421,476,493,494,1857,2789],[421,476,493,494,1857,2716,2787],[421,476,493,494,1857,2978],[421,476,493,494,1857,2716,2978],[421,476,493,494,1857,2793,2794,2798],[421,476,493,494,1857,2716,2790,2792,2793,2794,2795,2796,2797],[421,476,493,494,1857,2793],[421,476,493,494,1857,2762,3053],[421,476,493,494,1857,2762],[421,476,493,494,1857,2762,3052],[421,476,493,494,1857,2716,2719,2720,3147],[421,476,493,494,1857,2716,2721,2722,2725,3146],[421,476,493,494,1857,3148],[421,476,493,494,1857,3147],[421,476,493,494,1857,2719,3146],[421,476,493,494,1857,2723,2724],[421,476,493,494,1857,2721],[421,476,493,494,1857,3056,3147],[421,476,493,494,1857,2721,3058,3146],[421,476,493,494,1857,2721,3060],[421,476,493,494,1857,2721,3054,3062],[421,476,493,494,1857,2721,3142],[421,476,493,494,1857,2716,2721,3064],[421,476,493,494,1857,3059,3066],[421,476,493,494,1857,3059,3068,3147],[421,476,493,494,1857,2721,3070],[421,476,493,494,1857,2719],[421,476,493,494,1857,2719,3054],[421,476,493,494,1857,3058,3147],[421,476,493,494,1857,3054,3058],[421,476,493,494,1857,3058],[421,476,493,494,1857,2719,2828],[421,476,493,494,1857,2719,3055,3146],[421,476,493,494,1857,3080,3083],[421,476,493,494,1857,2719,3086],[421,476,493,494,1857,2719,2757],[421,476,493,494,1857,3057,3058],[421,476,493,494,1857,3054,3059,3072],[421,476,493,494,1857,3059,3074],[421,476,493,494,1857,2721,3076],[421,476,493,494,1857,2721,2828,2829],[421,476,493,494,1857,2721,3055,3078,3146],[421,476,493,494,1857,3059,3080,3147],[421,476,493,494,1857,3081,3082],[421,476,493,494,1857,2721,3140],[421,476,493,494,1857,2721,3084],[421,476,493,494,1857,2721,3086,3087],[421,476,493,494,1857,2721,2757,3089],[421,476,493,494,1857,3057,3059,3091],[421,476,493,494,1857,3059,3093],[421,476,493,494,1857,2716,3146,3148],[421,476,493,494,1857,2716,2721,3146,3147],[421,476,493,494,1857,2716,2993,3146],[421,476,493,494,511,519,1857,2716,2761,2873,2992,2995,3097,3146,3148,3149,3150,3151,3152],[421,476,493,494,511,1857,2716,2761,2992,2994,2995,2996,2998,3146],[421,476,493,494,1857,2992],[421,476,493,494,1857,3020,3021,3022],[421,476,493,494,1857,2716,2992,2997],[421,476,493,494,1857,2998,3014,3015,3016],[421,476,493,494,1857,2999],[421,476,493,494,1857,2999,3146,3153,3154],[421,476,493,494,1857,2873,2993,3009,3128,3148,3149,3150,3151],[421,476,493,494,1857,2993],[421,476,493,494,1857,2992,3177],[421,476,493,494,511,519,1857,2761,2995],[421,476,493,494,1857,3009,3153],[421,476,493,494,511,1857,2716],[421,476,493,494,1857,2761,3085,3147],[421,476,493,494,1857,2716,2761,2762,2773,2776,2781,3146],[421,476,493,494,1857,2716,3031,3034,3146],[421,476,493,494,1857,3032],[421,476,493,494,1857,2995,3031],[421,476,493,494,1857,2962,2973],[421,476,493,494,519,1857,2716,2717,2718,2719,2720,2721,2725,2726,2732,2748,2749,2750,2751,2752,2753,2754,2756,2757,2758,2759,2761,2762,2763,2764,2765,2766,2767,2769,2770,2771,2772,2773,2774,2776,2777,2780,2781,2785,2786,2788,2789,2806,2822,2823,2825,2828,2831,2832,2833,2835,2836,2837,2838,2839,2840,2841,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2874,2875,2876,2877,2878,2879,2880,2881,2882,2961,2962,2963,2964,2965,2966,2967,2968,2970,2971,2973,2978,2980,2981,2982,2984,2988,2989,2990,2992,2995,2999,3001,3004,3005,3008,3009,3010,3011,3012,3019,3026,3030,3034,3035,3036,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3050,3051,3052,3053,3054,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3080,3081,3083,3084,3085,3086,3089,3090,3091,3092,3093,3094,3095,3096,3098,3099,3100,3102,3104,3109,3110,3114,3115,3117,3118,3119,3120,3121,3122,3123,3130,3139,3141,3145,3146,3147,3148,3153,3154,3155,3156,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176],[421,476,493,494,1857,2978,3100,3101],[421,476,493,494,1857,2789,2973],[421,476,493,494,1857,2716,3034],[421,476,493,494,1857,2721,2725,3146,3147],[421,476,493,494,1857,3024],[421,476,493,494,1857,3136,3137],[421,476,493,494,1857,3136],[421,476,493,494,1857,2732,2733],[421,476,493,494,1857,2716,2732,2733,2973,3146],[421,476,493,494,1857,2731,2973],[421,476,493,494,1857,3105],[421,476,493,494,1857,3106],[421,476,493,494,1857,2761,2995,3036,3107,3108,3110,3146],[421,476,493,494,1857,2716,2728,2973,2978],[421,476,493,494,1857,2716,2782,2783,2973,2978],[421,476,493,494,1857,2973],[421,476,493,494,1857,2973,2978],[421,476,493,494,1857,2716,2728,2784],[421,476,493,494,1857,2716,2728,2730,2759,2960,2969,2973,2978],[421,476,493,494,1857,2716,2728,2973],[421,476,493,494,1857,2716,2721,2728,2730,2744,2753,2756,2757,2759,2781,2785,2822,2840,2851,2854,2855,2874,2945,2960,2961,2969,2971,2973,2978,2979,2980,2981,2982,2983,2984,2985,2988,2989,2990,2991,3000,3146],[421,476,493,494,1857,2716,2721,2728,2730,2754,2756,2759,2782,2783,2789,2820,2960,2962,2969,2973,2974,2975,2976,2977],[421,476,493,494,1857,2716,2756,2978],[421,476,493,494,1857,2716,2721,2757,2820,2821],[421,476,493,494,1857,2716,2838],[421,476,493,494,1857,2837],[421,476,493,494,1857,2716,2757],[421,476,493,494,1857,2721,2757],[421,476,493,494,1857,2716,2721,2730,2757,2771,2775,2781],[421,476,493,494,1857,2716,2828,2844],[421,476,493,494,1857,2721,2757,2761,2831,2843],[421,476,493,494,1857,2761,2842],[421,476,493,494,1857,2716,2757,2759,2767],[421,476,493,494,1857,2716,2721,2756,2757],[421,476,493,494,1857,2716,2721,2757],[421,476,493,494,1857,2716,2973,3001],[421,476,493,494,1857,2716,2721,2754,2755,2756,2978],[421,476,493,494,1857,2716,2757,2759,2769,2770,2773,2776,2781],[421,476,493,494,1857,2716,2759,2778,2779,2781],[421,476,493,494,1857,2716,2721,2757,2773,2776,2778,2779,2780],[421,476,493,494,1857,2730,2778],[421,476,493,494,1857,2765,2769,2770,2773,2774,2776,2777],[421,476,493,494,1857,2716,2721,2756,2757,2820,2856,3001,3146],[421,476,493,494,1857,2716,2858],[421,476,493,494,1857,2716,2721,2730,2757,2760,2763,2771,2772,2775,2781],[421,476,493,494,1857,2716,2721,2757,2764,2765,2766,2769,2770,2773,2776,2781],[421,476,493,494,1857,2757,2781],[421,476,493,494,1857,2716,2721,2753,2756,2757,2820],[421,476,493,494,1857,2716,2757,2759,2823],[421,476,493,494,1857,2716,2721,2757,2820,2824,2825,2831,2834,2835,2836],[421,476,493,494,1857,2716,2828,2830,3147],[421,476,493,494,1857,2716,2721,2826,2827,3147],[421,476,493,494,1857,2716,3147],[421,476,493,494,1857,2716,2721,2832,2833,2834,3147],[421,476,493,494,1857,2716,2721,2835,3147],[421,476,493,494,1857,2832],[421,476,493,494,1857,2716,2835,3147],[421,476,493,494,1857,2832,2961,3116],[421,476,493,494,1857,2730,2757,2771],[421,476,493,494,1857,2716,2757,2775,2781,3001,3146],[421,476,493,494,1857,2716,2756,2757,2769,2781],[421,476,493,494,1857,2716,2730,2757,2771,2775,2781],[421,476,493,494,1857,2716,2721,2756,2757,2820,2873],[421,476,493,494,1857,2716,2759,2767,2769],[421,476,493,494,1857,2716,2721,2730,2757,2759,2767,2768,2771,2775,2781,3146],[421,476,493,494,1857,2716,2721,2756,2757,2785,2973,2978],[421,476,493,494,1857,2716,2753,2757],[421,476,493,494,1857,2716,2757,2759,2877,2880,2881],[421,476,493,494,1857,2716,2757,2759,2878],[421,476,493,494,1857,2757,2880],[421,476,493,494,1857,2716,2757,2961,2962,2973],[421,476,493,494,1857,2716,2721,2730,2757,2760,2771,2775,2781],[421,476,493,494,1857,2721,2757,2835],[421,476,493,494,1857,2735,2743],[421,476,493,494,1857,2735,2978],[421,476,493,494,1857,2735,2738],[421,476,493,494,1857,2730,2735,2978],[421,476,493,494,1857,2716,2728,2729,2730,2732,2734,2735,2736,2737,2739,2740,2741,2744,2745,2758,2769,2770,2781,2786,2972,2978,3001,3147],[421,476,493,494,1857,2716,2973],[421,476,493,494,1857,2730,2759,2960,2969,2973,2978],[421,476,493,494,1857,2716,2721,2753,2757,2961,2971,2978],[421,476,493,494,1857,2883],[421,476,493,494,1857,2716,2721,2800,2971],[421,476,493,494,1857,2716,2819,2888],[421,476,493,494,1857,2716,2890,2971],[421,476,493,494,1857,2716,2887,2890,2898,2971],[421,476,493,494,1857,2806],[421,476,493,494,1857,2971],[421,476,493,494,1857,2716,2721,2754,2755,2970,2978],[421,476,493,494,1857,2716,2819,2890,2895,2971],[421,476,493,494,1857,2716,2819,2890,2895,2898,2971],[421,476,493,494,1857,2716,2819,2895,2971],[421,476,493,494,1857,2716,2819,2887,2890,2895,2898,2902,2903,2971],[421,476,493,494,1857,2716,2819,2887,2895,2971],[421,476,493,494,1857,2716,2819,2887,2890,2895,2971],[421,476,493,494,1857,2716,2887,2971],[421,476,493,494,1857,2910],[421,476,493,494,1857,2716,2818,2819,2895,2971],[421,476,493,494,1857,2716,2895,2971],[421,476,493,494,1857,2716,2819,2887,2890,2895,2903,2971],[421,476,493,494,1857,2716,2806,2819],[421,476,493,494,1857,2716,2806,2808,2887],[421,476,493,494,1857,2716,2805,2806,2890,2895],[421,476,493,494,1857,2716,2721,2789,2799,2800,2805,2971],[421,476,493,494,1857,2716,2806,2818,2819,2895],[421,476,493,494,1857,2716,2819,2931],[421,476,493,494,1857,2716,2812,2814,2818,2819,2890,2933,2971],[421,476,493,494,1857,2716,2819,2890,2971],[421,476,493,494,1857,2888],[421,476,493,494,1857,2716,2805,2819,2890,2895,2971],[421,476,493,494,1857,2716,2888,2940],[421,476,493,494,1857,2716,2806,2895],[421,476,493,494,1857,2716,2753,2971],[421,476,493,494,1857,2716,2721,2730,2759,2801,2803,2806,2807,2808,2810,2812,2813,2814,2818,2819,2960,2969,2971,2978],[421,476,493,494,1857,2953],[421,476,493,494,1857,2716,2806,2807,2808,2819,2890],[421,476,493,494,1857,2716,2819,2890,2895,2950],[421,476,493,494,1857,2716,2898,2950,2952],[421,476,493,494,1857,2716,2806,2819,2895],[421,476,493,494,1857,2716,2728,2758,2770,2784],[421,476,493,494,1857,2716,3001],[421,476,493,494,1857,2721,3147],[421,476,493,494,1857,3109,3146],[421,476,493,494,1857,2716,2789,2961,2973,2974,2986,2987,3001,3146],[421,476,493,494,1857,3121],[421,476,493,494,1857,2721,3122,3147],[421,476,493,494,1857,2973,2988,3001],[421,476,493,494,1857,2716],[421,476,493,494,1857,2716,2811,3146],[421,476,493,494,1857,2716,2812,3146],[421,476,493,494,1857,2716,3146],[421,476,493,494,1857,2716,2810,3146],[421,476,493,494,1857,2716,2951,3146],[421,476,493,494,1857,2716,2897,3146],[421,476,493,494,1857,2716,2817,3146],[421,476,493,494,1857,2716,2807,3146],[421,476,493,494,1857,2716,2804,3146],[421,476,493,494,1857,2716,2809,3146],[421,476,493,494,1857,2716,2799,3146],[421,476,493,494,1857,2716,2813,3146],[421,476,493,494,1857,2716,2808,3146],[421,476,493,494,1857,2716,2815,2816,3146],[421,476,493,494,1857,2716,2801,2802,3146],[421,476,493,494,1857,2716,2803,3146],[421,476,493,494,1857,2973,2979],[421,476,493,494,1857,2716,2973,2979],[421,476,493,494,519,1857,2716,2761,3146],[421,476,493,494,1857,2765,2769,2770,2773,2774,2776],[421,476,493,494,1857,2716,2761,3144,3147],[421,476,481,493,494,499,508,511,519,520,1857,2716,2721,2726,2730,2732,2748,2749,2750,2751,2752,2753,2754,2756,2757,2758,2759,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2779,2780,2781,2784,2785,2786,2788,2789,2792,2798,2799,2800,2801,2803,2804,2805,2806,2807,2808,2810,2812,2813,2814,2817,2818,2819,2822,2823,2824,2825,2828,2831,2832,2833,2835,2836,2837,2838,2839,2840,2841,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2951,2952,2953,2954,2955,2956,2957,2958,2959,2961,2962,2963,2964,2965,2966,2967,2968,2970,2971,2972,2973,2975,2977,2978,2980,2981,2982,2984,2988,2989,2990,2992,2995,2999,3001,3009,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3050,3051,3052,3053,3054,3055,3057,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3086,3088,3090,3092,3094,3095,3096,3097,3098,3099,3100,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3117,3118,3119,3120,3121,3122,3123,3124,3126,3129,3130,3131,3132,3133,3134,3135,3138,3139,3141,3143,3145,3147,3148,3152,3153],[421,476,493,494,1857,2716,2855,3146,3147],[421,476,493,494,1857,3008,3029,3034,3160],[421,476,493,494,1857,2716,3174],[421,476,493,494,1857,2726,3146,3164,3173],[421,476,493,494,1857,2716,2761,3001,3124,3125,3126,3127,3128,3146],[421,476,493,494,1857,2716,3085,3147],[421,476,493,494,1857,3124],[421,476,493,494,1857,3119,3146],[421,476,493,494,1857,2324],[421,476,493,494,1857,2324,2325,2326,2328,2337],[421,476,493,494,526,1683,1857],[421,476,487,493,494,526,1580,1683,1699,1857],[421,476,493,494,1684,1688,1698,1701,1857],[421,476,487,493,494,526,1580,1683,1684,1685,1687,1688,1695,1698,1700,1857],[421,476,493,494,1684,1857],[421,476,484,493,494,526,1688,1695,1696,1857],[421,476,487,493,494,526,1683,1684,1685,1687,1688,1696,1697,1701,1857],[421,476,484,493,494,526,1857],[421,476,493,494,1683,1857],[421,476,493,494,1689,1857],[421,476,493,494,1691,1857],[421,476,487,493,494,516,526,1683,1689,1691,1692,1697,1857],[421,476,493,494,1695,1857],[421,476,493,494,496,516,526,1683,1689,1857],[421,476,493,494,1683,1684,1685,1686,1689,1693,1694,1695,1696,1697,1698,1701,1702,1857],[421,476,493,494,1688,1690,1693,1694,1857],[421,476,493,494,1686,1857],[421,476,493,494,496,516,526,1857],[421,476,493,494,1683,1684,1686,1857],[421,476,493,494,526,1564,1857],[421,476,487,493,494,526,1564,1580,1581,1857],[421,476,493,494,1565,1569,1579,1583,1857],[421,476,487,493,494,526,1564,1565,1566,1568,1569,1576,1579,1580,1582,1857],[421,476,493,494,1565,1857],[421,476,484,493,494,526,1569,1576,1577,1857],[421,476,487,493,494,526,1564,1565,1566,1568,1569,1577,1578,1583,1857],[421,476,493,494,1564,1857],[421,476,493,494,1570,1857],[421,476,493,494,1572,1857],[421,476,487,493,494,516,526,1564,1570,1572,1573,1578,1857],[421,476,493,494,1576,1857],[421,476,493,494,496,516,526,1564,1570,1857],[421,476,493,494,1564,1565,1566,1567,1570,1574,1575,1576,1577,1578,1579,1583,1584,1857],[421,476,493,494,1569,1571,1574,1575,1857],[421,476,493,494,1567,1857],[421,476,493,494,1564,1565,1567,1857],[421,476,493,494,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,1857],[421,476,493,494,612,1857],[421,476,493,494,612,622,1857],[421,476,493,494,895,1857],[421,476,493,494,737,841,1857],[421,476,493,494,841,1857],[421,476,493,494,733,735,736,737,841,1857],[421,476,493,494,841,858,1857],[421,476,493,494,656,1857],[421,476,493,494,733,735,736,737,738,841,878,1857],[421,476,493,494,732,734,735,878,1857],[421,476,493,494,736,841,1857],[421,476,493,494,661,662,676,690,691,720,854,1857],[421,476,493,494,737,841,858,1857],[421,476,493,494,734,1857],[421,476,493,494,733,735,736,737,738,841,865,1857],[421,476,493,494,732,733,734,735,865,1857],[421,476,493,494,678,854,1857],[421,476,493,494,733,735,736,737,738,841,871,1857],[421,476,493,494,732,733,734,735,871,1857],[421,476,493,494,854,1857],[421,476,493,494,733,735,736,737,738,841,859,1857],[421,476,493,494,733,734,735,859,1857],[421,476,493,494,724,847,854,1857],[421,476,493,494,732,1857],[421,476,493,494,734,735,739,1857],[421,476,493,494,658,733,734,1857],[421,476,493,494,734,735,1857],[421,476,493,494,734,739,1857],[421,476,493,494,697,703,1857],[421,476,493,494,694,703,1857],[421,476,493,494,759,762,1857],[421,476,493,494,656,658,704,741,746,754,755,756,757,760,776,778,787,789,794,795,796,798,799,1857],[421,476,493,494,645,656,658,694,704,757,773,774,775,798,799,1857],[421,476,493,494,645,694,703,1857],[421,476,493,494,658,704,812,1857],[421,476,493,494,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,744,745,747,748,753,754,755,756,757,758,759,760,761,762,763,764,765,766,768,769,770,772,773,774,775,776,777,778,780,781,782,783,786,787,788,789,790,791,792,793,794,797,798,799,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,825,826,827,828,829,830,832,835,837,838,841,842,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,1857],[421,476,493,494,658,704,731,732,734,735,736,738,740,741,742,787,789,811,818,819,837,838,839,840,1857],[421,476,493,494,883,1857],[421,476,493,494,645,660,1857],[421,476,493,494,645,669,1857],[421,476,493,494,645,646,664,1857],[421,476,493,494,645,677,692,693,782,1857],[421,476,493,494,645,1857],[421,476,493,494,645,648,664,1857],[421,476,493,494,645,646,652,661,662,663,665,670,671,672,673,674,675,1857],[421,476,493,494,645,719,1857],[421,476,493,494,645,646,1857],[421,476,493,494,645,647,648,649,650,659,1857],[421,476,493,494,645,648,652,1857],[421,476,493,494,645,699,1857],[421,476,493,494,647,666,667,668,1857],[421,476,493,494,645,646,652,664,677,1857],[421,476,493,494,645,652,658,660,669,1857],[421,476,493,494,645,651,681,1857],[421,476,493,494,645,648,651,664,711,1857],[421,476,493,494,645,677,683,688,689,692,693,701,706,710,717,718,727,1857],[421,476,493,494,645,648,1857],[421,476,493,494,645,651,652,1857],[421,476,493,494,645,652,1857],[421,476,493,494,645,651,1857],[421,476,493,494,645,705,1857],[421,476,493,494,645,708,1857],[421,476,493,494,645,646,648,652,659,1857],[421,476,493,494,645,684,1857],[421,476,493,494,645,648,652,701,706,710,717,718,722,723,724,1857],[421,476,493,494,645,687,1857],[421,476,493,494,645,708,754,1857],[421,476,493,494,645,754,790,1857],[421,476,493,494,645,696,791,792,1857],[421,476,493,494,645,652,688,694,701,710,717,718,719,1857],[421,476,493,494,645,646,648,677,721,1857],[421,476,493,494,645,721,1857],[421,476,493,494,645,646,647,648,649,650,651,652,659,660,661,662,663,664,665,666,667,668,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,698,699,700,701,702,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,730,731,745,753,754,773,774,775,780,781,782,783,788,790,791,792,793,820,821,846,847,848,849,850,851,852,1857],[421,476,493,494,645,646,647,648,649,650,651,652,659,660,661,662,663,664,665,666,667,668,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,698,699,700,701,702,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,730,745,753,754,773,774,775,780,781,782,783,788,790,791,792,793,820,821,846,847,848,849,850,851,852,1857],[421,476,493,494,645,691,1857],[421,476,493,494,645,692,1857],[421,476,493,494,645,692,693,780,781,1857],[421,476,493,494,645,697,1857],[421,476,493,494,645,780,1857],[421,476,493,494,645,646,648,1857],[421,476,493,494,645,677,688,692,693,698,704,705,706,710,711,717,718,720,725,726,728,1857],[421,476,493,494,645,648,652,695,1857],[421,476,493,494,645,648,652,658,1857],[421,476,493,494,645,698,1857],[421,476,493,494,645,677,683,684,685,686,688,689,690,692,693,698,701,702,706,707,709,710,1857],[421,476,493,494,645,652,694,695,697,1857],[421,476,493,494,648,696,1857],[421,476,493,494,645,677,683,688,689,693,701,706,710,717,718,721,1857],[421,476,493,494,645,681,820,1857],[421,476,493,494,645,700,1857],[421,476,493,494,645,703,704,753,754,755,756,799,1857],[421,476,493,494,799,1857],[421,476,493,494,645,704,745,1857],[421,476,493,494,645,704,1857],[421,476,493,494,654,658,760,830,1857],[421,476,493,494,645,694,704,752,797,1857],[421,476,493,494,684,797,799,1857],[421,476,493,494,648,755,756,797,821,1857],[421,476,493,494,658,688,758,760,1857],[421,476,493,494,657,658,760,835,1857],[421,476,493,494,692,704,762,765,798,799,1857],[421,476,493,494,762,780,799,1857],[421,476,493,494,645,648,658,694,696,697,704,752,754,756,762,766,793,798,1857],[421,476,493,494,653,654,655,657,763,1857],[421,476,493,494,664,1857],[421,476,493,494,658,760,778,1857],[421,476,493,494,658,698,704,756,762,778,797,798,1857],[421,476,493,494,704,707,797,1857],[421,476,493,494,645,652,658,694,704,759,798,1857],[421,476,493,494,658,755,799,1857],[421,476,493,494,754,798,799,848,1857],[421,476,493,494,655,658,760,829,1857],[421,476,493,494,658,721,755,756,797,799,1857],[421,476,493,494,645,704,708,752,798,1857],[421,476,493,494,658,700,704,828,829,830,831,837,1857],[421,476,493,494,658,733,734,740,1857],[421,476,493,494,658,733,734,740,889,1857],[421,476,493,494,681,753,754,820,1857],[421,476,493,494,658,731,733,734,1857],[421,476,493,494,658,694,704,757,766,777,783,785,798,799,1857],[421,476,493,494,656,704,755,757,776,788,799,1857],[421,476,493,494,700,703,1857],[421,476,493,494,654,656,658,703,704,705,728,729,731,732,740,741,742,755,757,760,761,763,766,768,769,772,777,798,799,824,825,827,1857],[421,476,493,494,656,658,704,752,756,776,779,786,799,1857],[421,476,493,494,757,799,1857],[421,476,493,494,653,656,658,703,704,705,725,729,731,732,740,741,742,756,763,769,772,798,822,823,824,825,826,827,1857],[421,476,493,494,658,688,703,757,798,799,1857],[421,476,493,494,645,694,704,791,793,1857],[421,476,493,494,657,658,703,704,720,729,731,732,741,742,755,757,760,761,763,769,798,799,822,823,824,825,827,829,1857],[421,476,493,494,729,1857],[421,476,493,494,658,703,704,722,756,757,768,798,799,823,1857],[421,476,493,494,704,766,1857],[421,476,493,494,692,703,764,1857],[421,476,493,494,658,797,798,824,1857],[421,476,493,494,703,704,766,777,782,784,1857],[421,476,493,494,756,763,824,1857],[421,476,493,494,704,711,1857],[421,476,493,494,656,658,704,705,709,710,711,729,731,732,740,741,742,752,755,756,757,760,761,763,766,767,768,769,770,771,772,776,777,798,799,1857],[421,476,493,494,655,656,658,703,704,705,726,729,731,732,740,741,742,755,757,760,761,763,766,768,769,772,777,798,799,823,824,825,827,1857],[421,476,493,494,658,757,798,799,1857],[421,476,493,494,731,733,1857],[421,476,493,494,645,646,647,648,649,650,651,652,659,660,661,662,663,664,665,666,667,668,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,698,699,700,701,702,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,730,731,732,733,745,753,754,773,774,775,780,781,782,783,788,790,791,792,793,820,821,846,847,848,849,850,851,852,853,1857],[421,476,493,494,664,673,676,678,679,680,682,712,713,714,715,716,720,729,730,731,732,1857],[421,476,493,494,653,701,740,741,760,763,778,796,828,831,832,833,834,836,1857],[421,476,493,494,731,732,733,734,737,739,740,843,1857],[421,476,493,494,732,737,740,843,1857],[421,476,493,494,731,732,733,734,737,739,740,741,1857],[421,476,493,494,741,1857],[421,476,493,494,731,732,733,734,737,739,740,1857],[421,476,493,494,664,704,731,732,734,740,811,1857],[421,476,493,494,812,1857],[421,476,493,494,665,703,743,746,1857],[421,476,493,494,659,676,703,731,732,741,742,747,1857],[421,476,493,494,676,678,703,704,731,732,741,742,799,1857],[421,476,493,494,676,703,704,731,732,741,742,744,746,747,748,749,750,751,800,801,802,803,1857],[421,476,493,494,676,703,731,732,741,742,1857],[421,476,493,494,647,703,1857],[421,476,493,494,659,660,703,704,743,1857],[421,476,493,494,658,678,703,704,731,732,741,742,757,797,799,1857],[421,476,493,494,679,703,731,732,741,742,1857],[421,476,493,494,680,703,704,731,732,741,742,744,746,747,801,802,803,1857],[421,476,493,494,682,703,731,732,741,742,1857],[421,476,493,494,703,712,731,732,741,742,778,812,1857],[421,476,493,494,673,703,731,732,741,742,1857],[421,476,493,494,703,713,731,732,741,742,1857],[421,476,493,494,703,714,731,732,741,742,1857],[421,476,493,494,703,715,731,732,741,742,1857],[421,476,493,494,703,716,731,732,741,742,1857],[421,476,493,494,659,666,703,1857],[421,476,493,494,667,703,1857],[421,476,493,494,703,730,731,732,741,742,1857],[421,476,493,494,740,741,804,805,806,807,808,809,810,813,814,815,816,817,1857],[421,476,493,494,668,703,1857],[421,476,493,494,658,1857],[421,476,493,494,704,1857],[421,476,493,494,653,654,655,657,658,732,742,1857],[421,476,493,494,658,732,1857],[421,476,493,494,653,654,655,656,657,1857],[421,476,493,494,1032,1136,1857],[421,476,493,494,1136,1857],[421,476,493,494,1028,1030,1031,1032,1136,1857],[421,476,493,494,1136,1153,1857],[421,476,493,494,951,1857],[421,476,493,494,1028,1030,1031,1032,1033,1136,1173,1857],[421,476,493,494,1027,1029,1030,1173,1857],[421,476,493,494,1031,1136,1857],[421,476,493,494,956,957,971,985,986,1015,1149,1857],[421,476,493,494,1032,1136,1153,1857],[421,476,493,494,1029,1857],[421,476,493,494,1028,1030,1031,1032,1033,1136,1160,1857],[421,476,493,494,1027,1028,1029,1030,1160,1857],[421,476,493,494,973,1149,1857],[421,476,493,494,1028,1030,1031,1032,1033,1136,1166,1857],[421,476,493,494,1027,1028,1029,1030,1166,1857],[421,476,493,494,1149,1857],[421,476,493,494,1028,1030,1031,1032,1033,1136,1154,1857],[421,476,493,494,1028,1029,1030,1154,1857],[421,476,493,494,1019,1142,1149,1857],[421,476,493,494,1027,1857],[421,476,493,494,1029,1030,1034,1857],[421,476,493,494,953,1028,1029,1857],[421,476,493,494,1029,1030,1857],[421,476,493,494,1029,1034,1857],[421,476,493,494,992,998,1857],[421,476,493,494,989,998,1857],[421,476,493,494,1054,1057,1857],[421,476,493,494,951,953,999,1036,1041,1049,1050,1051,1052,1055,1071,1073,1082,1084,1089,1090,1091,1093,1094,1857],[421,476,493,494,940,951,953,989,999,1052,1068,1069,1070,1093,1094,1857],[421,476,493,494,940,989,998,1857],[421,476,493,494,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1039,1040,1042,1043,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1063,1064,1065,1067,1068,1069,1070,1071,1072,1073,1075,1076,1077,1078,1081,1082,1083,1084,1085,1086,1087,1088,1089,1092,1093,1094,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1120,1121,1122,1123,1124,1125,1127,1130,1132,1133,1136,1137,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1857],[421,476,493,494,953,999,1026,1027,1029,1030,1031,1033,1035,1036,1037,1082,1084,1106,1113,1114,1132,1133,1134,1135,1857],[421,476,493,494,1178,1857],[421,476,493,494,940,955,1857],[421,476,493,494,940,964,1857],[421,476,493,494,940,941,959,1857],[421,476,493,494,940,972,987,988,1077,1857],[421,476,493,494,940,1857],[421,476,493,494,940,943,959,1857],[421,476,493,494,940,941,947,956,957,958,960,965,966,967,968,969,970,1857],[421,476,493,494,940,1014,1857],[421,476,493,494,940,941,1857],[421,476,493,494,940,942,943,944,945,954,1857],[421,476,493,494,940,943,947,1857],[421,476,493,494,940,994,1857],[421,476,493,494,942,961,962,963,1857],[421,476,493,494,940,941,947,959,972,1857],[421,476,493,494,940,947,953,955,964,1857],[421,476,493,494,940,946,976,1857],[421,476,493,494,940,943,946,959,1006,1857],[421,476,493,494,940,972,978,983,984,987,988,996,1001,1005,1012,1013,1022,1857],[421,476,493,494,940,943,1857],[421,476,493,494,940,946,947,1857],[421,476,493,494,940,947,1857],[421,476,493,494,940,946,1857],[421,476,493,494,940,1000,1857],[421,476,493,494,940,1003,1857],[421,476,493,494,940,941,943,947,954,1857],[421,476,493,494,940,979,1857],[421,476,493,494,940,943,947,996,1001,1005,1012,1013,1017,1018,1019,1857],[421,476,493,494,940,982,1857],[421,476,493,494,940,1003,1049,1857],[421,476,493,494,940,1049,1085,1857],[421,476,493,494,940,991,1086,1087,1857],[421,476,493,494,940,947,983,989,996,1005,1012,1013,1014,1857],[421,476,493,494,940,941,943,972,1016,1857],[421,476,493,494,940,1016,1857],[421,476,493,494,940,941,942,943,944,945,946,947,954,955,956,957,958,959,960,961,962,963,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,993,994,995,996,997,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1025,1026,1040,1048,1049,1068,1069,1070,1075,1076,1077,1078,1083,1085,1086,1087,1088,1115,1116,1141,1142,1143,1144,1145,1146,1147,1857],[421,476,493,494,940,941,942,943,944,945,946,947,954,955,956,957,958,959,960,961,962,963,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,993,994,995,996,997,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1025,1040,1048,1049,1068,1069,1070,1075,1076,1077,1078,1083,1085,1086,1087,1088,1115,1116,1141,1142,1143,1144,1145,1146,1147,1857],[421,476,493,494,940,986,1857],[421,476,493,494,940,987,1857],[421,476,493,494,940,987,988,1075,1076,1857],[421,476,493,494,940,992,1857],[421,476,493,494,940,1075,1857],[421,476,493,494,940,941,943,1857],[421,476,493,494,940,972,983,987,988,993,999,1000,1001,1005,1006,1012,1013,1015,1020,1021,1023,1857],[421,476,493,494,940,943,947,990,1857],[421,476,493,494,940,943,947,953,1857],[421,476,493,494,940,993,1857],[421,476,493,494,940,972,978,979,980,981,983,984,985,987,988,993,996,997,1001,1002,1004,1005,1857],[421,476,493,494,940,947,989,990,992,1857],[421,476,493,494,943,991,1857],[421,476,493,494,940,972,978,983,984,988,996,1001,1005,1012,1013,1016,1857],[421,476,493,494,940,976,1115,1857],[421,476,493,494,940,995,1857],[421,476,493,494,940,998,999,1048,1049,1050,1051,1094,1857],[421,476,493,494,1094,1857],[421,476,493,494,940,999,1040,1857],[421,476,493,494,940,999,1857],[421,476,493,494,949,953,1055,1125,1857],[421,476,493,494,940,989,999,1047,1092,1857],[421,476,493,494,979,1092,1094,1857],[421,476,493,494,943,1050,1051,1092,1116,1857],[421,476,493,494,953,983,1053,1055,1857],[421,476,493,494,952,953,1055,1130,1857],[421,476,493,494,987,999,1057,1060,1093,1094,1857],[421,476,493,494,1057,1075,1094,1857],[421,476,493,494,940,943,953,989,991,992,999,1047,1049,1051,1057,1061,1088,1093,1857],[421,476,493,494,948,949,950,952,1058,1857],[421,476,493,494,959,1857],[421,476,493,494,953,1055,1073,1857],[421,476,493,494,953,993,999,1051,1057,1073,1092,1093,1857],[421,476,493,494,999,1002,1092,1857],[421,476,493,494,940,947,953,989,999,1054,1093,1857],[421,476,493,494,953,1050,1094,1857],[421,476,493,494,1049,1093,1094,1143,1857],[421,476,493,494,950,953,1055,1124,1857],[421,476,493,494,953,1016,1050,1051,1092,1094,1857],[421,476,493,494,940,999,1003,1047,1093,1857],[421,476,493,494,953,995,999,1123,1124,1125,1126,1132,1857],[421,476,493,494,953,1028,1029,1035,1857],[421,476,493,494,953,1028,1029,1035,1184,1857],[421,476,493,494,976,1048,1049,1115,1857],[421,476,493,494,953,1026,1028,1029,1857],[421,476,493,494,953,989,999,1052,1061,1072,1078,1080,1093,1094,1857],[421,476,493,494,951,999,1050,1052,1071,1083,1094,1857],[421,476,493,494,995,998,1857],[421,476,493,494,949,951,953,998,999,1000,1023,1024,1026,1027,1035,1036,1037,1050,1052,1055,1056,1058,1061,1063,1064,1067,1072,1093,1094,1119,1120,1122,1857],[421,476,493,494,951,953,999,1047,1051,1071,1074,1081,1094,1857],[421,476,493,494,1052,1094,1857],[421,476,493,494,948,951,953,998,999,1000,1020,1024,1026,1027,1035,1036,1037,1051,1058,1064,1067,1093,1117,1118,1119,1120,1121,1122,1857],[421,476,493,494,953,983,998,1052,1093,1094,1857],[421,476,493,494,940,989,999,1086,1088,1857],[421,476,493,494,952,953,998,999,1015,1024,1026,1027,1036,1037,1050,1052,1055,1056,1058,1064,1093,1094,1117,1118,1119,1120,1122,1124,1857],[421,476,493,494,1024,1857],[421,476,493,494,953,998,999,1017,1051,1052,1063,1093,1094,1118,1857],[421,476,493,494,999,1061,1857],[421,476,493,494,987,998,1059,1857],[421,476,493,494,953,1092,1093,1119,1857],[421,476,493,494,998,999,1061,1072,1077,1079,1857],[421,476,493,494,1051,1058,1119,1857],[421,476,493,494,999,1006,1857],[421,476,493,494,951,953,999,1000,1004,1005,1006,1024,1026,1027,1035,1036,1037,1047,1050,1051,1052,1055,1056,1058,1061,1062,1063,1064,1065,1066,1067,1071,1072,1093,1094,1857],[421,476,493,494,950,951,953,998,999,1000,1021,1024,1026,1027,1035,1036,1037,1050,1052,1055,1056,1058,1061,1063,1064,1067,1072,1093,1094,1118,1119,1120,1122,1857],[421,476,493,494,953,1052,1093,1094,1857],[421,476,493,494,1026,1028,1857],[421,476,493,494,940,941,942,943,944,945,946,947,954,955,956,957,958,959,960,961,962,963,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,993,994,995,996,997,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1025,1026,1027,1028,1040,1048,1049,1068,1069,1070,1075,1076,1077,1078,1083,1085,1086,1087,1088,1115,1116,1141,1142,1143,1144,1145,1146,1147,1148,1857],[421,476,493,494,959,968,971,973,974,975,977,1007,1008,1009,1010,1011,1015,1024,1025,1026,1027,1857],[421,476,493,494,948,996,1035,1036,1055,1058,1073,1091,1123,1126,1127,1128,1129,1131,1857],[421,476,493,494,1026,1027,1028,1029,1032,1034,1035,1138,1857],[421,476,493,494,1027,1032,1035,1138,1857],[421,476,493,494,1026,1027,1028,1029,1032,1034,1035,1036,1857],[421,476,493,494,1036,1857],[421,476,493,494,1026,1027,1028,1029,1032,1034,1035,1857],[421,476,493,494,959,999,1026,1027,1029,1035,1106,1857],[421,476,493,494,1107,1857],[421,476,493,494,960,998,1038,1041,1857],[421,476,493,494,954,971,998,1026,1027,1036,1037,1042,1857],[421,476,493,494,971,973,998,999,1026,1027,1036,1037,1094,1857],[421,476,493,494,971,998,999,1026,1027,1036,1037,1039,1041,1042,1043,1044,1045,1046,1095,1096,1097,1098,1857],[421,476,493,494,971,998,1026,1027,1036,1037,1857],[421,476,493,494,942,998,1857],[421,476,493,494,954,955,998,999,1038,1857],[421,476,493,494,953,973,998,999,1026,1027,1036,1037,1052,1092,1094,1857],[421,476,493,494,974,998,1026,1027,1036,1037,1857],[421,476,493,494,975,998,999,1026,1027,1036,1037,1039,1041,1042,1096,1097,1098,1857],[421,476,493,494,977,998,1026,1027,1036,1037,1857],[421,476,493,494,998,1007,1026,1027,1036,1037,1073,1107,1857],[421,476,493,494,968,998,1026,1027,1036,1037,1857],[421,476,493,494,998,1008,1026,1027,1036,1037,1857],[421,476,493,494,998,1009,1026,1027,1036,1037,1857],[421,476,493,494,998,1010,1026,1027,1036,1037,1857],[421,476,493,494,998,1011,1026,1027,1036,1037,1857],[421,476,493,494,954,961,998,1857],[421,476,493,494,962,998,1857],[421,476,493,494,998,1025,1026,1027,1036,1037,1857],[421,476,493,494,1035,1036,1099,1100,1101,1102,1103,1104,1105,1108,1109,1110,1111,1112,1857],[421,476,493,494,963,998,1857],[421,476,493,494,953,1857],[421,476,493,494,999,1857],[421,476,493,494,948,949,950,952,953,1027,1037,1857],[421,476,493,494,953,1027,1857],[421,476,493,494,948,949,950,951,952,1857],[421,476,493,494,1461,1857],[421,476,493,494,1857,3229,3230],[421,476,493,494,1857,2484],[421,476,493,494,1857,2478,2479,2480,2481,2482,2483,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518],[421,476,493,494,1857,2499],[421,476,493,494,1857,2501],[294,417,421,476,493,494,1857,2362,2387],[417,421,476,493,494,1857,2361,2362,2384],[417,421,476,493,494,1857,2388],[417,421,476,493,494,1857,2361,2362,2388],[417,421,476,493,494,1857,2385],[317,417,421,476,493,494,1857,2388],[417,421,476,493,494,1857,2362,2387],[421,476,493,494,1857,2357,2385,2386,2388,2389,2390,2391,2392,2393,2394,2395],[421,476,493,494,1857,2361,2384],[421,476,493,494,1704,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1723,1724,1857],[417,421,476,493,494,1709,1857],[260,417,421,476,493,494,1709,1857],[65,421,476,493,494,1709,1857],[417,421,476,493,494,1708,1709,1717,1857],[421,476,493,494,1707,1709,1857],[417,421,476,493,494,1707,1708,1857],[421,475,476,493,494,1705,1706,1709,1857],[417,421,476,493,494,1707,1857],[417,421,476,493,494,1722,1857],[417,421,476,493,494,1304,1857],[421,476,493,494,1704,1857],[417,421,476,493,494,895,1857],[421,476,493,494,1776,1857,2263,2264,2265,2266,2267,2270,2271],[421,476,493,494,1774,1775,1857],[317,417,421,476,493,494,1773,1857],[421,476,493,494,1775,1857],[421,476,493,494,1857,2268,2269],[421,476,493,494,1773,1775,1857],[417,421,476,493,494,1776,1857],[421,476,493,494,1857,1862],[421,476,493,494,526,1193,1194,1195,1857],[421,476,493,494,508,526,1193,1857],[421,476,493,494,1857,1939],[421,476,493,494,1857,1937,1939],[421,476,493,494,1857,1928,1936,1937,1938,1940,1942],[421,476,493,494,1857,1926],[421,476,493,494,1857,1929,1934,1939,1942],[421,476,493,494,1857,1925,1942],[421,476,493,494,1857,1929,1930,1933,1934,1935,1942],[421,476,493,494,1857,1929,1930,1931,1933,1934,1942],[421,476,493,494,1857,1926,1927,1928,1929,1930,1934,1935,1936,1938,1939,1940,1942],[421,476,493,494,1857,1942],[421,476,493,494,1857,1924,1926,1927,1928,1929,1930,1931,1933,1934,1935,1936,1937,1938,1939,1940,1941],[421,476,493,494,1857,1924,1942],[421,476,493,494,1857,1929,1931,1932,1934,1935,1942],[421,476,493,494,1857,1933,1942],[421,476,493,494,1857,1934,1935,1939,1942],[421,476,493,494,1857,1927,1937],[421,476,493,494,508,1857],[421,476,493,494,1857,1885],[421,476,488,493,494,508,1857],[421,476,493,494,1857,3184,3234,3235],[421,476,493,494,1857,3183,3184],[72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,88,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,191,192,193,195,204,206,207,208,209,210,211,213,214,216,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,421,476,493,494,1857],[117,421,476,493,494,1857],[75,76,421,476,493,494,1857],[72,73,74,76,421,476,493,494,1857],[73,76,421,476,493,494,1857],[76,117,421,476,493,494,1857],[72,76,194,421,476,493,494,1857],[74,75,76,421,476,493,494,1857],[72,76,421,476,493,494,1857],[76,421,476,493,494,1857],[75,421,476,493,494,1857],[72,75,117,421,476,493,494,1857],[73,75,76,233,421,476,493,494,1857],[75,76,233,421,476,493,494,1857],[75,241,421,476,493,494,1857],[73,75,76,421,476,493,494,1857],[85,421,476,493,494,1857],[108,421,476,493,494,1857],[129,421,476,493,494,1857],[75,76,117,421,476,493,494,1857],[76,124,421,476,493,494,1857],[75,76,117,135,421,476,493,494,1857],[75,76,135,421,476,493,494,1857],[76,176,421,476,493,494,1857],[72,76,195,421,476,493,494,1857],[201,203,421,476,493,494,1857],[72,76,194,201,202,421,476,493,494,1857],[194,195,203,421,476,493,494,1857],[201,421,476,493,494,1857],[72,76,201,202,203,421,476,493,494,1857],[217,421,476,493,494,1857],[212,421,476,493,494,1857],[215,421,476,493,494,1857],[73,75,195,196,197,198,421,476,493,494,1857],[117,195,196,197,198,421,476,493,494,1857],[195,197,421,476,493,494,1857],[75,196,197,199,200,204,421,476,493,494,1857],[72,75,421,476,493,494,1857],[76,219,421,476,493,494,1857],[77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,421,476,493,494,1857],[205,421,476,493,494,1857],[421,476,493,494,1857,1924,3218],[421,476,493,494,1857,3205],[421,476,493,494,1857,3201,3218],[421,476,493,494,1857,3200,3201,3202,3205,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226],[421,476,493,494,1857,3222],[421,476,493,494,1857,3200,3202,3205,3223,3224],[421,476,493,494,1857,3221,3225],[421,476,493,494,1857,3200,3203,3204],[421,476,493,494,1857,3203],[421,476,493,494,1857,3200,3201,3202,3205,3217],[421,476,493,494,1857,3206,3211,3217],[421,476,493,494,1857,3217],[421,476,493,494,1857,3206,3217],[421,476,493,494,1857,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216],[421,476,488,490,493,494,1857],[421,476,493,494,1353,1857],[421,476,493,494,1353,1354,1857],[421,476,493,494,1349,1857],[421,476,493,494,1351,1355,1356,1857],[421,476,490,493,494,1348,1350,1351,1358,1360,1857],[421,476,490,491,492,493,494,1348,1350,1351,1355,1356,1357,1358,1359,1857],[421,476,493,494,1351,1352,1355,1357,1358,1360,1857],[421,476,490,493,494,502,1857],[421,476,490,493,494,1348,1350,1351,1352,1355,1356,1357,1359,1857],[421,476,493,494,1857,2594,2597],[421,476,493,494,1857,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624],[421,476,493,494,1857,2597,2602,2603],[421,476,493,494,1857,2594,2598,2599,2601],[421,476,493,494,1857,2600],[421,476,493,494,1857,2594,2597,2598,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2626,2627,2628],[421,476,493,494,1857,2604],[421,476,493,494,1857,2596,2597],[421,476,493,494,1857,2595,2596],[421,476,493,494,1857,2597],[421,476,493,494,1857,2596],[421,476,493,494,1857,2598,2604,2625],[421,476,493,494,1857,2598],[421,476,493,494,1857,3196],[421,476,493,494,1857,2707],[421,476,493,494,1857,2313],[421,434,437,440,441,476,493,494,519,1857],[421,437,476,493,494,508,519,1857],[421,437,441,476,493,494,519,1857],[421,431,476,493,494,1857],[421,435,476,493,494,1857],[421,433,434,437,476,493,494,519,1857],[421,476,493,494,496,516,1857],[421,431,476,493,494,526,1857],[421,433,437,476,493,494,496,519,1857],[421,428,429,430,432,436,476,487,493,494,508,519,1857],[421,437,445,453,476,493,494,1857],[421,429,435,476,493,494,1857],[421,437,462,463,476,493,494,1857],[421,429,432,437,476,493,494,511,519,526,1857],[421,437,476,493,494,1857],[421,433,437,476,493,494,519,1857],[421,428,476,493,494,1857],[421,431,432,433,435,436,437,438,439,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,463,464,465,466,467,476,493,494,1857],[421,437,455,458,476,484,493,494,1857],[421,437,445,446,447,476,493,494,1857],[421,435,437,446,448,476,493,494,1857],[421,436,476,493,494,1857],[421,429,431,437,476,493,494,1857],[421,437,441,446,448,476,493,494,1857],[421,441,476,493,494,1857],[421,435,437,440,476,493,494,519,1857],[421,429,433,437,445,476,493,494,1857],[421,437,455,476,493,494,1857],[421,448,476,493,494,1857],[421,431,437,462,476,493,494,511,524,526,1857],[421,476,493,494,1857,3240,3241],[421,476,493,494,1857,3240],[421,476,493,494,1857,3180],[421,476,487,488,490,491,492,493,494,496,508,516,519,525,526,1857,3180,3181,3182,3184,3185,3187,3188,3198,3199,3228,3232,3233,3234,3235],[421,476,493,494,1857,3180,3181,3182,3186],[421,476,493,494,1857,3182],[421,476,493,494,1857,3227],[421,476,493,494,1857,3231],[421,476,493,494,1857,3197],[421,476,493,494,1857,3184,3235],[421,476,493,494,1857,2715,3252,3253,3262],[421,476,493,494,1857,2704,2712,2715,3245,3246,3262],[421,476,493,494,1857,3255],[421,476,493,494,1857,3178],[421,476,493,494,1857,2704,2715,3179,3245,3254,3261,3262],[421,476,493,494,1857,3238],[421,476,479,488,493,494,508,1857,2704,2709,2712,2715,3179,3235,3238,3239,3242,3245,3247,3248,3251,3254,3256,3257,3262,3263],[421,476,493,494,1857,2715,3252,3253,3254,3262],[421,476,493,494,1857,3235,3258,3263],[421,476,493,494,1857,2715,3179,3242,3245,3247,3262],[421,476,493,494,524,1857,3248],[421,476,479,488,493,494,508,524,1857,2704,2709,2712,2715,3178,3179,3235,3238,3239,3242,3245,3246,3247,3248,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3270],[421,476,493,494,1857,3271],[421,476,493,494,1857,3177],[421,476,488,493,494,534,554,555,556,557,558,610,1779,1781,1845,1857,2274,2343,2351,2355],[417,421,476,493,494,609,610,1304,1378,1524,1682,1725,1779,1781,1782,1786,1852,1857,1873,1966,2047,2078,2272,2274,2276,2306,2316,2317,2322,2323,2347,2351,2397,2407,2426,2448,2533,2563,2564,2565,2566,2567,2568,2580,2581],[421,476,493,494,554,1304,1845,1857,2582],[417,421,476,489,493,494,498,1304,1331,1378,1524,1725,1779,1781,1786,1853,1857,1865,1964,2080,2272,2316,2568,2593,2629],[421,476,493,494,1857,2396,2397],[421,476,493,494,1857,2398,2399,2400,2401,2402,2403,2404,2405,2406],[421,476,493,494,1857,1861,2396,2397],[421,476,493,494,610,1200,1857,2396,2397],[421,476,493,494,1857,2342,2396],[421,476,493,494,609,1378,1850,1857],[421,476,488,493,494,498,568,608,609,1857],[417,421,476,493,494,535,609,939,1521,1525,1853,1857,2317,2408,2409],[417,421,476,493,494,609,939,1521,1522,1525,1853,1857,1868,2317,2413],[417,421,476,493,494,609,939,1521,1525,1853,1857,2317,2415,2416],[417,421,476,493,494,939,1857,2419],[417,421,476,493,494,535,609,939,1521,1525,1781,1847,1848,1850,1853,1857,2317,2346,2421,2422,2423,2426],[417,421,476,493,494,609,939,1521,1525,1532,1847,1853,1856,1857,2317,2319,2428],[417,421,476,493,494,609,939,1525,1853,1857,2317,2430],[417,421,476,493,494,535,609,939,1525,1853,1857,1861,2316,2317,2432],[417,421,476,493,494,535,554,609,939,1521,1781,1853,1857,2316,2317,2344,2346,2347,2432,2434],[417,421,476,493,494,609,939,1525,1853,1857,2317,2346,2436,2437],[417,421,476,493,494,609,939,1521,1522,1525,1853,1857,2317,2439,2441],[417,421,476,493,494,609,939,1521,1525,1853,1857,1859,2317,2443],[421,476,493,494,1857,2410,2414,2417,2420,2427,2429,2431,2433,2435,2438,2442,2444,2449,2451,2452,2455,2457,2459,2461,2462,2465,2466,2475,2476,2521,2524,2527,2528,2531,2536,2539,2540,2543,2548,2551,2553,2557,2559,2562],[417,421,476,493,494,609,939,1525,1853,1857,1959,2317,2445,2446,2447,2448],[417,421,476,493,494,609,939,1521,1853,1857,1961,2317,2450],[417,421,476,493,494,535,609,939,1525,1849,1853,1857,2316,2317,2432,2434],[417,421,476,493,494,609,939,1525,1853,1857,2317,2453,2454],[417,421,476,493,494,609,939,1521,1522,1525,1853,1857,2034,2317,2456],[417,421,476,493,494,609,939,1525,1853,1857,1958,2040,2304,2317,2458],[417,421,476,493,494,609,939,1521,1525,1853,1857,2040,2317,2460],[417,421,476,493,494,609,939,1521,1525,1853,1857,2317,2463,2464],[417,421,476,493,494,535,609,939,1521,1522,1525,1781,1853,1857,1859,2317,2346,2443],[417,421,476,493,494,609,939,1521,1853,1857,2317,2467,2474],[417,421,476,493,494,609,939,1525,1853,1857,1959,2317,2448],[417,421,476,493,494,609,939,1525,1853,1857,1859,2317,2319,2477,2520],[417,421,476,493,494,609,939,1853,1857,2305,2317,2342,2348,2349,2522,2523],[417,421,476,493,494,609,939,1521,1525,1853,1857,2317,2525,2526],[417,421,476,493,494,535,609,939,1521,1522,1525,1781,1847,1853,1857,2316,2317,2340,2341,2432],[417,421,476,493,494,609,939,1521,1522,1525,1853,1857,2317,2529,2530],[417,421,476,493,494,535,609,939,1525,1844,1853,1857,2317,2319,2533,2535],[417,421,476,493,494,609,939,1853,1857,2304,2317,2419,2538],[417,421,476,493,494,609,939,1853,1857,2317,2522,2523],[417,421,476,493,494,609,939,1521,1522,1525,1853,1857,1860,2317,2542],[417,421,476,493,494,609,939,1525,1853,1857,2317,2546,2547],[417,421,476,493,494,609,939,1522,1525,1853,1857,2317,2549,2550],[417,421,476,493,494,609,939,1521,1525,1847,1853,1857,1861,2317,2411,2525,2552],[417,421,476,493,494,535,609,939,1521,1525,1781,1853,1857,1861,2317,2346,2348,2411,2426,2554,2555,2556],[417,421,476,493,494,609,939,1525,1853,1857,2317,2319,2558],[417,421,476,493,494,609,939,1521,1525,1853,1857,2317,2560,2561],[421,476,481,493,494,498,609,1779,1781,1846,1857,1882,1966,2039,2044,2078,2310,2318,2320],[421,476,493,494,609,895,1783,1787,1788,1821,1822,1837,1850,1857,2319],[417,421,476,493,494,609,939,1200,1213,1527,1778,1852,1857],[421,476,493,494,939,1519,1521,1857,1861,2320],[421,476,493,494,609,895,939,1213,1331,1519,1521,1522,1525,1850,1854,1857,1861,2319,2320],[421,476,493,494,609,939,1519,1521,1857],[421,476,493,494,939,1521,1857],[417,421,476,493,494,609,939,1331,1519,1521,1847,1857],[421,476,493,494,609,895,939,1521,1525,1532,1850,1853,1854,1855,1857,1859,1860,1861,1875,2312,2318,2320],[421,476,493,494,609,939,1331,1519,1521,1522,1846,1853,1857],[421,476,493,494,609,939,1331,1519,1521,1850,1857,2320],[421,476,493,494,939,1519,1521,1857],[421,476,493,494,939,1519,1857],[421,476,493,494,939,1519,1521,1847,1857],[421,476,493,494,939,1331,1519,1521,1857,2319],[421,476,493,494,939,1331,1519,1521,1857],[421,476,493,494,609,1331,1519,1521,1857],[421,476,493,494,939,1850,1854,1857,2320],[421,476,493,494,609,1521,1857],[421,476,493,494,939,1519,1521,1857,2320],[421,476,493,494,609,939,1331,1519,1521,1525,1853,1857,2319,2320],[421,476,493,494,939,1857],[421,476,493,494,1521,1857],[421,476,493,494,939,1519,1521,1857,1861,2043],[421,476,493,494,568,609,895,939,1331,1519,1521,1525,1532,1801,1850,1853,1854,1857,1858,2320],[421,476,493,494,609,939,1331,1519,1521,1821,1857],[421,476,493,494,609,939,1519,1521,1821,1857,2320],[421,476,493,494,609,939,1857,1959],[421,476,493,494,609,939,1521,1853,1857],[421,476,493,494,609,939,1331,1519,1521,1853,1857,1868,2319,2320],[421,476,493,494,608,939,1857,2304],[421,476,493,494,609,939,1519,1521,1853,1857,1868,2319,2320],[421,476,493,494,939,1519,1521,1525,1857,2319,2320],[421,476,493,494,609,939,1519,1521,1532,1850,1857,2319],[421,476,493,494,609,939,1331,1519,1521,1850,1851,1857,1963],[421,476,493,494,939,1519,1521,1850,1854,1857,2320],[421,476,493,494,609,939,1519,1521,1857,2544,2545],[421,476,493,494,609,939,1331,1519,1521,1850,1857],[421,476,493,494,939,1848,1857],[421,476,493,494,609,939,1331,1519,1521,1850,1854,1857,2320],[421,476,493,494,609,939,1331,1519,1521,1821,1857,2320],[421,476,493,494,1857,1904,1949,1950,1952,1953,1958],[421,476,493,494,1857,1904,1949],[421,476,493,494,1857,1904,1949,1951],[421,476,493,494,1857,1904,1949,1950,2631],[421,476,493,494,1857,1904,1949,1952,1958],[421,476,477,493,494,498,524,609,895,1191,1779,1786,1838,1857,1966,2396,2582],[417,421,476,493,494,535,609,1304,1781,1849,1857,2351],[417,421,476,477,493,494,498,610,1857],[417,421,476,493,494,1360,1781,1849,1852,1857,1873,2303],[417,421,476,493,494,535,554,609,1521,1781,1849,1857,2305,2316,2317,2344,2346,2347,2351,2432,2435,2524,2564],[417,421,476,488,490,493,494,535,609,610,611,644,1779,1781,1782,1845,1849,1850,1857,1873,1966,2047,2078,2305,2310,2311,2321,2322,2323,2342,2343,2347,2349,2350],[260,417,421,476,493,494,535,609,1857,2315,2317,2421,2422],[417,421,476,493,494,535,609,939,1304,1525,1781,1857,2315,2316],[260,417,421,476,493,494,1781,1845,1857,2532],[260,342,417,421,476,481,493,494,498,508,535,609,1304,1781,1848,1850,1857,2078,2317,2318,2422,2424,2425],[417,421,476,493,494,535,1725,1781,1857,2532],[260,417,421,476,493,494,535,1781,1857],[417,421,476,493,494,1360,1703,1779,1857,1872,2354],[421,476,493,494,609,1857],[417,421,476,493,494,609,895,1524,1786,1838,1853,1857],[417,421,476,493,494,609,895,1523,1524,1786,1790,1838,1853,1857,2320],[417,421,476,493,494,609,895,1524,1794,1838,1853,1857],[417,421,476,493,494,895,1523,1524,1783,1786,1788,1838,1853,1857,1868,2320],[417,421,476,493,494,895,1523,1524,1786,1795,1838,1853,1857,2320],[417,421,476,493,494,609,1360,1703,1779,1852,1857,1872],[417,421,476,493,494,895,1524,1532,1838,1853,1857,2320],[417,421,476,493,494,609,895,1523,1524,1786,1838,1853,1857,1875,2320],[417,421,476,493,494,609,895,1213,1523,1524,1525,1783,1786,1787,1802,1803,1805,1838,1845,1853,1857,2320],[417,421,476,493,494,609,895,1524,1838,1853,1857],[417,421,476,488,493,494,498,535,557,609,610,1200,1331,1519,1650,1682,1703,1725,1776,1777,1778,1850,1853,1857],[417,421,476,493,494,1369,1378,1781,1857],[417,421,476,481,488,493,494,1857,1879,1881],[417,421,476,489,493,494,498,608,609,610,895,1200,1521,1524,1527,1533,1779,1781,1786,1838,1850,1853,1857],[417,421,476,493,494,609,895,1524,1786,1838,1857],[417,421,476,493,494,609,895,1523,1524,1782,1783,1786,1838,1853,1857,2319,2320],[417,421,476,493,494,1781,1850,1857,1887,1901,1904,1954,1955,1956,1957],[417,421,476,493,494,609,1213,1304,1331,1360,1525,1779,1781,1850,1851,1853,1857,2320],[421,476,493,494,1779,1781,1782,1785,1846,1852,1857,1864,1865,1866,1867,1869,1870,1873,1874,1876,1877,1878,1882,1883,1884,1958,1960,1962,1964,1966,1967,2033,2035,2038,2039,2041,2042,2043,2044,2046,2047,2048,2049,2050,2051,2052,2078,2079,2080,2081,2274,2275,2276,2277,2278,2306,2307],[417,421,476,493,494,515,609,1304,1331,1650,1682,1779,1781,1845,1850,1852,1853,1857,1959],[417,421,476,493,494,609,895,1524,1529,1838,1853,1857,1961],[417,421,476,493,494,609,1725,1779,1780,1853,1857],[417,421,476,489,493,494,568,1781,1851,1857,1963],[417,421,476,488,489,493,494,503,609,610,895,1524,1779,1781,1809,1815,1838,1853,1857,1965,1966],[417,421,476,489,493,494,508,568,609,610,1532,1781,1845,1850,1857,1858,2029,2030,2031,2032,2320],[417,421,476,493,494,568,609,895,1523,1524,1810,1838,1850,1853,1857,2034],[417,421,476,493,494,1781,1857,1875,2029,2037],[417,421,476,493,494,609,895,1524,1814,1838,1853,1857],[421,476,493,494,568,895,1524,1816,1838,1853,1857,2040,2320],[417,421,476,493,494,609,1781,1857,1863],[417,421,476,493,494,895,1524,1806,1838,1853,1856,1857],[417,421,476,493,494,895,1523,1524,1819,1838,1853,1857,2320],[417,421,476,493,494,609,895,1523,1524,1784,1786,1800,1801,1808,1838,1853,1857,2320],[417,421,476,489,493,494,895,1523,1524,1838,1853,1857,2045,2320],[417,421,476,477,493,494,508,1857],[417,421,476,481,493,494,609,895,1521,1524,1782,1783,1784,1786,1838,1853,1857,2319],[417,421,476,477,489,493,494,520,1779,1781,1857,2029,2031],[417,421,476,493,494,568,895,1523,1524,1786,1823,1838,1853,1857,2320],[421,476,493,494,895,1524,1838,1853,1857],[417,421,476,493,494,609,895,1213,1523,1524,1783,1787,1824,1838,1853,1857,2320],[417,421,476,493,494,895,1523,1524,1530,1786,1838,1853,1857,2320],[417,421,476,488,489,493,494,498,508,525,1781,1857,1875,1961,2054,2057,2077],[417,421,476,493,494,609,895,1524,1828,1838,1853,1857],[417,421,476,493,494,895,1524,1838,1850,1853,1857,2320],[417,421,476,489,493,494,895,1524,1829,1838,1850,1853,1857],[417,421,476,493,494,895,1524,1781,1830,1831,1838,1853,1857,2320],[417,421,476,493,494,609,610,1213,1304,1331,1773,1779,1781,1857,2085,2129,2159,2163,2188,2191,2194,2200,2254,2262,2272,2273],[421,476,493,494,609,895,1524,1838,1853,1857],[417,421,476,493,494,568,609,895,1523,1524,1528,1786,1838,1850,1853,1857,2320],[417,421,476,493,494,895,1524,1836,1838,1853,1857],[421,476,493,494,609,895,1524,1786,1838,1853,1857],[417,421,476,493,494,1360,1525,1781,1844,1845,1852,1857,2040,2303,2305,2319],[417,421,476,493,494,609,895,1524,1837,1838,1853,1857],[421,476,493,494,609,1200,1857],[421,476,493,494,1200,1857],[421,476,493,494,1200,1526,1527,1528,1529,1530,1783,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1857],[421,476,493,494,609,610,895,1781,1782,1786,1857],[421,476,493,494,609,895,1857],[421,476,493,494,895,1781,1857],[421,476,493,494,895,1786,1857],[421,476,493,494,1200,1528,1787,1788,1789,1853,1857],[421,476,493,494,1200,1788,1853,1857],[421,476,493,494,1200,1527,1787,1788,1853,1857],[421,476,493,494,1200,1853,1857],[421,476,493,494,609,1200,1527,1528,1788,1853,1857],[421,476,493,494,609,1200,1527,1528,1787,1853,1857],[421,476,493,494,609,1200,1528,1853,1857],[421,476,493,494,1200,1527,1532,1787,1853,1857],[421,476,493,494,1200,1787,1853,1857,2320],[421,476,493,494,609,1200,1526,1527,1787,1800,1853,1857],[421,476,493,494,609,1200,1787,1853,1857],[421,476,493,494,1200,1787,1857],[421,476,493,494,609,1200,1527,1787,1853,1857],[421,476,493,494,609,1200,1526,1527,1528,1529,1530,1786,1853,1857],[421,476,493,494,1200,1801,1857],[421,476,493,494,1200,1528,1853,1857],[421,476,493,494,1200,1810,1853,1857],[421,476,493,494,1200,1527,1787,1810,1853,1857],[421,476,493,494,609,1200,1527,1528,1853,1857],[421,476,493,494,1200,1527,1528,1853,1857],[421,476,493,494,1200,1527,1528,1801,1853,1857],[421,476,493,494,609,1200,1821,1857],[421,476,493,494,1200,1787,1824,1857],[421,476,493,494,609,1200,1528,1788,1857],[421,476,493,494,1200,1527,1528,1787,1853,1857],[421,476,493,494,609,1200,1823,1853,1857],[421,476,493,494,609,1200,1850,1857],[421,476,493,494,1200,1787,1830,1857],[421,476,493,494,1200,1830,1857],[421,476,493,494,609,1200,1853,1857],[421,476,493,494,609,1200,1527,1528,1850,1853,1857],[421,476,493,494,609,895,1200,1527,1853,1857],[421,476,493,494,609,1200,1528,1821,1822,1857],[417,421,476,493,494,609,1525,1857,2311,2320,2408],[417,421,476,493,494,609,1522,1525,1854,1857,1868,1869,2311,2318,2412],[417,421,476,493,494,609,1525,1857,2308,2311,2320,2415],[417,421,476,488,493,494,535,610,1378,1779,1781,1845,1857,2316,2339,2341,2342],[417,421,476,493,494,498,609,1520,1525,1786,1847,1848,1850,1857,1875,2308,2311,2315,2317,2318,2320,2321,2346,2421],[417,421,476,493,494,568,609,610,1213,1525,1532,1786,1847,1850,1853,1854,1856,1857,1858,2308,2311,2318,2319,2320],[417,421,476,493,494,568,609,610,1853,1857,2311],[417,421,476,493,494,1525,1857,2311],[417,421,476,490,493,494,498,568,609,610,611,1519,1525,1857,1861,1864,1875,2308,2311,2312,2315,2320,2321],[417,421,476,493,494,610,895,1520,1528,1779,1781,1782,1785,1846,1851,1852,1857,1864,1865,1866,1867,1869,1870,1873,1874,1876,1877,1878,1882,1883,1884,1958,1960,1962,1964,1966,1967,2033,2035,2038,2039,2041,2042,2043,2044,2046,2047,2048,2049,2050,2051,2052,2078,2079,2080,2081,2274,2275,2276,2277,2278,2306,2307,2308,2310,2320,2321],[417,421,476,493,494,498,609,610,1200,1845,1849,1857,1861,2311,2350],[417,421,476,493,494,498,508,509,568,608,609,610,1213,1779,1781,1782,1845,1852,1853,1857,1878,1960,1966,2047,2078,2276,2310,2321,2322,2344,2345,2346],[417,421,476,493,494,608,609,610,1850,1853,1857,2311],[417,421,476,493,494,498,609,1525,1857,2078,2311,2312,2321,2412,2436],[417,421,476,493,494,609,610,1522,1525,1785,1845,1850,1853,1857,2311,2319,2439,2440],[421,476,493,494,1857,2316,2341,2342,2343,2347,2349,2397,2409,2413,2416,2419,2422,2428,2430,2434,2437,2441,2443,2447,2448,2450,2454,2456,2458,2460,2464,2474,2520,2523,2526,2530,2535,2538,2542,2547,2550,2552,2556,2558,2561,2569,2570,2573,2575,2576,2577,2578,2579],[417,421,476,493,494,609,1850,1852,1853,1857,2311,2312,2319,2445],[417,421,476,480,488,493,494,498,609,610,895,1787,1843,1845,1850,1852,1853,1857,1875,1961,1962,2311,2321],[417,421,476,493,494,609,1845,1849,1850,1852,1853,1857,2311,2350],[417,421,476,493,494,1525,1857,2311,2318,2453],[417,421,476,493,494,609,610,1532,1845,1850,1851,1853,1857,1858,1875,1876,1964,2304,2311,2318,2320,2321,2571,2572],[417,421,476,493,494,568,609,1522,1525,1853,1857,2034,2311,2318],[417,421,476,488,489,493,494,498,568,609,610,895,1213,1783,1786,1800,1801,1845,1850,1852,1853,1854,1857,1875,1967,2029,2038,2311,2318,2320,2321,2541,2574],[417,421,476,493,494,609,1525,1845,1857,1958,2040,2304,2311],[417,421,476,493,494,609,1525,1845,1850,1852,1853,1857,1868,1958,2040,2304,2311,2319,2346,2412,2418],[417,421,476,493,494,609,610,1786,1845,1850,1853,1857,1964,2311],[417,421,476,493,494,609,1525,1857,1861,2043,2311,2320,2463],[417,421,476,493,494,609,610,895,1522,1525,1801,1808,1845,1850,1853,1857,1858,1859,1875,1964,2044,2311,2318,2320,2346],[417,421,476,493,494,609,895,1781,1787,1846,1857,1865,1869,1882,2308,2471],[417,421,476,493,494,498,609,1331,1519,1850,1852,1853,1857,2045,2311,2320,2467,2471,2472,2473],[417,421,476,493,494,609,1331,1525,1845,1850,1851,1852,1853,1857,1959,2311,2446],[417,421,476,493,494,609,1525,1845,1857,1859,2308,2311,2318,2319,2477,2519],[417,421,476,493,494,609,610,1845,1853,1857,1875,2276,2305,2311,2312,2321,2348],[417,421,476,493,494,568,609,1525,1852,1853,1857,2311,2525],[417,421,476,493,494,609,1191,1522,1525,1845,1847,1857,2311,2340],[417,421,476,493,494,609,610,1845,1850,1851,1852,1853,1857,2311],[417,421,476,493,494,609,1521,1522,1525,1857,2311,2529],[417,421,476,493,494,498,568,609,1520,1850,1852,1853,1857,2304,2311,2318,2321,2346,2537],[417,421,476,493,494,498,609,610,1845,1850,1853,1857,2311,2321],[417,421,476,493,494,508,568,609,610,895,1525,1778,1828,1844,1850,1853,1857,2080,2311,2312,2318,2319,2534],[417,421,476,493,494,609,1213,1331,1851,1852,1853,1857,2304,2310,2311,2418],[417,421,476,493,494,609,1857,2311,2522],[417,421,476,493,494,609,895,1522,1525,1786,1831,1853,1857,1860,2311,2318,2541],[421,476,493,494,609,1213,1852,1853,1857,2311],[417,421,476,493,494,609,1525,1846,1857,2308,2311,2318,2546],[417,421,476,493,494,609,610,1522,1525,1853,1857,2311,2549],[417,421,476,493,494,609,610,1525,1847,1857,1861,2276,2311,2411,2412,2525],[417,421,476,493,494,568,609,610,895,1525,1528,1850,1853,1857,1861,2276,2311,2321,2346,2348,2411,2412,2554,2555],[417,421,476,493,494,568,608,609,610,1850,1852,1853,1857,2305,2311],[417,421,476,493,494,1525,1857,2311,2319],[417,421,476,493,494,609,1525,1857,2311,2320,2472,2560],[421,476,493,494,609,610,895,1525,1532,1848,1849,1851,1857,2320],[417,421,476,493,494,609,1525,1778,1857,1865,2320],[417,421,476,493,494,609,1522,1525,1846,1848,1850,1852,1857,1865,2043,2308,2317,2320,2321],[417,421,476,493,494,939,1331,1519,1521,1853,1857,2544],[421,476,493,494,609,1213,1331,1519,1533,1779,1781,1845,1850,1851,1857,1966,2304,2309],[421,476,493,494,609,895,1191,1200,1523,1531,1532,1783,1785,1838,1850,1857,2320],[421,476,493,494,568,1857],[421,476,493,494,1857,2319],[421,476,493,494,1850,1856,1857,2320],[421,476,493,494,610,1857],[417,421,476,489,493,494,498,520,535,609,1781,1845,1857,2078],[417,421,476,493,494,1781,1857],[421,476,481,493,494,498,609,644,1360,1703,1779,1849,1852,1857,1872,2078,2321],[421,476,493,494,609,610,1850,1857,2304],[421,476,493,494,498,609,1857],[417,421,476,488,493,494,498,609,610,898,939,1213,1781,1840,1843,1844,1851,1857],[421,476,493,494,1213,1857],[421,476,493,494,609,1213,1845,1850,1857,2312,2411],[421,476,490,493,494,1857,2314],[421,476,493,494,535,568,609,1525,1857],[421,476,493,494,609,1844,1850,1857],[421,476,493,494,1857,2081,2320],[421,476,493,494,1532,1850,1856,1857],[417,421,476,493,494,568,939,1331,1369,1421,1519,1520,1853,1857],[421,476,493,494,554,1304,1845,1857,1873,2343,2356,2582],[421,476,493,494,554,1304,1845,1857,1873,2351,2356,2582],[421,476,493,494,524,610,1304,1779,1781,1845,1857,1873,2274,2355,2582]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d8dedbec739bc79642c1e96e9bfc0b83b25b104a0486aebf016fc7b85b39f48","impliedFormat":1},{"version":"e89535c3ec439608bcd0f68af555d0e5ddf121c54abe69343549718bd7506b9c","impliedFormat":1},{"version":"622a984b60c294ffb2f9152cf1d4d12e91d2b733d820eec949cf54d63a3c1025","impliedFormat":1},{"version":"81aae92abdeaccd9c1723cef39232c90c1aed9d9cf199e6e2a523b7d8e058a11","impliedFormat":1},{"version":"a63a6c6806a1e519688ef7bd8ca57be912fc0764485119dbd923021eb4e79665","impliedFormat":1},{"version":"75b57b109d774acca1e151df21cf5cb54c7a1df33a273f0457b9aee4ebd36fb9","impliedFormat":1},{"version":"073ca26c96184db9941b5ec0ddea6981c9b816156d9095747809e524fdd90e35","impliedFormat":1},{"version":"e41d17a2ec23306d953cda34e573ed62954ca6ea9b8c8b74e013d07a6886ce47","impliedFormat":1},{"version":"241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","impliedFormat":1},{"version":"2ae3787e1498b20aad1b9c2ee9ea517ec30e89b70d242d8e3e52d1e091039695","impliedFormat":1},{"version":"c7c72c4cffb1bc83617eefed71ed68cc89df73cab9e19507ccdecb3e72b4967e","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","impliedFormat":1},{"version":"38b38db08e7121828294dec10957a7a9ff263e33e2a904b346516d4a4acca482","impliedFormat":1},{"version":"a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","impliedFormat":1},{"version":"8a2aaea564939c22be05d665cc955996721bad6d43148f8fa21ae8f64afecd37","impliedFormat":1},{"version":"e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","impliedFormat":1},{"version":"e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","impliedFormat":1},{"version":"95950a187596e206d32d5d9c7b932901088c65ed8f9040e614aa8e321e0225ef","impliedFormat":1},{"version":"89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","impliedFormat":1},{"version":"e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","impliedFormat":1},{"version":"71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","impliedFormat":1},{"version":"7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","impliedFormat":1},{"version":"78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","impliedFormat":1},{"version":"5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","impliedFormat":1},{"version":"f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","impliedFormat":1},{"version":"9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","impliedFormat":1},{"version":"3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","impliedFormat":1},{"version":"2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","impliedFormat":1},{"version":"4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","impliedFormat":1},{"version":"61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","impliedFormat":1},{"version":"64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","impliedFormat":1},{"version":"0521108c9f8ddb17654a0a54dae6ba9667c99eddccfd6af5748113e022d1c37a","impliedFormat":1},{"version":"c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","impliedFormat":1},{"version":"ee764e6e9a7f2b987cc1a2c0a9afd7a8f4d5ebc4fdb66ad557a7f14a8c2bd320","impliedFormat":1},{"version":"0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","impliedFormat":1},{"version":"5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","impliedFormat":1},{"version":"e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","impliedFormat":1},{"version":"b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","impliedFormat":1},{"version":"6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","impliedFormat":1},{"version":"d7058e75920120b142a9d57be25562a3cd9a936269fd52908505f530105f2ec4","impliedFormat":1},{"version":"6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","impliedFormat":1},{"version":"0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","impliedFormat":1},{"version":"91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","impliedFormat":1},{"version":"db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","impliedFormat":1},{"version":"758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","impliedFormat":1},{"version":"2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","impliedFormat":1},{"version":"6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","impliedFormat":1},{"version":"a472a1d3f25ce13a1d44911cd3983956ac040ce2018e155435ea34afb25f864c","impliedFormat":1},{"version":"b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","impliedFormat":1},{"version":"792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","impliedFormat":1},{"version":"a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","impliedFormat":1},{"version":"93181bac0d90db185bb730c95214f6118ae997fe836a98a49664147fbcaf1988","impliedFormat":1},{"version":"8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","impliedFormat":1},{"version":"b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","impliedFormat":1},{"version":"4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","impliedFormat":1},{"version":"cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","impliedFormat":1},{"version":"75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","impliedFormat":1},{"version":"b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","impliedFormat":1},{"version":"c54166a85bd60f86d1ebb90ce0117c0ecb850b8a33b366691629fdf26f1bbbd8","impliedFormat":1},{"version":"0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","impliedFormat":1},{"version":"80f23f1d60fbed356f726b3b26f9d348dddbb34027926d10d59fad961e70a730","impliedFormat":1},{"version":"cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","impliedFormat":1},{"version":"cc20bb2227dd5de0aab0c8d697d1572f8000550e62c7bf5c92f212f657dd88c5","impliedFormat":1},{"version":"06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","impliedFormat":1},{"version":"860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","impliedFormat":1},{"version":"f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","impliedFormat":1},{"version":"d0da80c845999a16c24d0783033fb5366ada98df17867c98ad433ede05cd87fd","impliedFormat":1},{"version":"bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","impliedFormat":1},{"version":"fd9a991b51870325e46ebb0e6e18722d313f60cd8e596e645ec5ac15b96dbf4e","impliedFormat":1},{"version":"c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","impliedFormat":1},{"version":"a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","impliedFormat":1},{"version":"d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","impliedFormat":1},{"version":"fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","impliedFormat":1},{"version":"063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","impliedFormat":1},{"version":"314e402cd481370d08f63051ae8b8c8e6370db5ee3b8820eeeaaf8d722a6dac6","impliedFormat":1},{"version":"9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","impliedFormat":1},{"version":"4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","impliedFormat":1},{"version":"656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","impliedFormat":1},{"version":"3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","impliedFormat":1},{"version":"1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","impliedFormat":1},{"version":"af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","impliedFormat":1},{"version":"70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","impliedFormat":1},{"version":"af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","impliedFormat":1},{"version":"cefc20054d20b85b534206dbcedd509bb74f87f3d8bc45c58c7be3a76caa45e1","impliedFormat":1},{"version":"ad6eee4877d0f7e5244d34bc5026fd6e9cf8e66c5c79416b73f9f6ebf132f924","impliedFormat":1},{"version":"4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","impliedFormat":1},{"version":"f4749c102ced952aa6f40f0b579865429c4869f6d83df91000e98005476bee87","impliedFormat":1},{"version":"56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","impliedFormat":1},{"version":"8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","impliedFormat":1},{"version":"05f56cd4b929977d18df8f3d08a4c929a2592ef5af083e79974b20a063f30940","impliedFormat":1},{"version":"547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","impliedFormat":1},{"version":"b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","impliedFormat":1},{"version":"3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","impliedFormat":1},{"version":"140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","impliedFormat":1},{"version":"0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","impliedFormat":1},{"version":"cb46b38d5e791acaa243bf342b8b5f8491639847463ac965b93896d4fb0af0d9","impliedFormat":1},{"version":"7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","impliedFormat":1},{"version":"af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","impliedFormat":1},{"version":"006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","impliedFormat":1},{"version":"7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","impliedFormat":1},{"version":"339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","impliedFormat":1},{"version":"34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","impliedFormat":1},{"version":"9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","impliedFormat":1},{"version":"18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","impliedFormat":1},{"version":"5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","impliedFormat":1},{"version":"5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","impliedFormat":1},{"version":"907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","impliedFormat":1},{"version":"ce60a562cd2a92f37a88f2ddd99a3abfbc5848d7baf38c48fb8d3243701fcb75","impliedFormat":1},{"version":"a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","impliedFormat":1},{"version":"f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","impliedFormat":1},{"version":"75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","impliedFormat":1},{"version":"9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","impliedFormat":1},{"version":"b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","impliedFormat":1},{"version":"b6e2b0448ced813b8c207810d96551a26e7d7bb73255eea4b9701698f78846d6","impliedFormat":1},{"version":"8ae10cd85c1bd94d2f2d17c4cbd25c068a4b2471c70c2d96434239f97040747a","impliedFormat":1},{"version":"9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","impliedFormat":1},{"version":"b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","impliedFormat":1},{"version":"e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","impliedFormat":1},{"version":"ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","impliedFormat":1},{"version":"8776a368617ce51129b74db7d55c3373dadcce5d0701e61d106e99998922a239","impliedFormat":1},{"version":"5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","impliedFormat":1},{"version":"9108ab5af05418f599ab48186193b1b07034c79a4a212a7f73535903ba4ca249","impliedFormat":1},{"version":"bb4e2cdcadf9c9e6ee2820af23cee6582d47c9c9c13b0dca1baaffe01fbbcb5f","impliedFormat":1},{"version":"6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","impliedFormat":1},{"version":"423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","impliedFormat":1},{"version":"fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","impliedFormat":1},{"version":"2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","impliedFormat":1},{"version":"c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","impliedFormat":1},{"version":"02ae43d5bae42efcd5a00d3923e764895ce056bca005a9f4e623aa6b4797c8af","impliedFormat":1},{"version":"db6e01f17012a9d7b610ae764f94a1af850f5d98c9c826ad61747dca0fb800bd","impliedFormat":1},{"version":"8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","impliedFormat":1},{"version":"24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","impliedFormat":1},{"version":"33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","impliedFormat":1},{"version":"0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","impliedFormat":1},{"version":"16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","impliedFormat":1},{"version":"8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","impliedFormat":1},{"version":"d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","impliedFormat":1},{"version":"97f9169882d393e6f303f570168ca86b5fe9aab556e9a43672dae7e6bb8e6495","impliedFormat":1},{"version":"7c9adb3fcd7851497818120b7e151465406e711d6a596a71b807f3a17853cb58","impliedFormat":1},{"version":"6752d402f9282dd6f6317c8c048aaaac27295739a166eed27e00391b358fed9a","impliedFormat":1},{"version":"9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","impliedFormat":1},{"version":"fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","impliedFormat":1},{"version":"85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","impliedFormat":1},{"version":"84794e3abd045880e0fadcf062b648faf982aa80cfc56d28d80120e298178626","impliedFormat":1},{"version":"053d8b827286a16a669a36ffc8ccc8acdf8cc154c096610aa12348b8c493c7b8","impliedFormat":1},{"version":"3cce4ce031710970fe12d4f7834375f5fd455aa129af4c11eb787935923ff551","impliedFormat":1},{"version":"8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","impliedFormat":1},{"version":"62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","impliedFormat":1},{"version":"c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","impliedFormat":1},{"version":"8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","impliedFormat":1},{"version":"132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","impliedFormat":1},{"version":"df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","impliedFormat":1},{"version":"33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","impliedFormat":1},{"version":"ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","impliedFormat":1},{"version":"a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","impliedFormat":1},{"version":"eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","impliedFormat":1},{"version":"0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","impliedFormat":1},{"version":"aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","impliedFormat":1},{"version":"0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","impliedFormat":1},{"version":"40f06693e2e3e58526b713c937895c02e113552dc8ba81ecd49cdd9596567ddb","impliedFormat":1},{"version":"4ed5e1992aedb174fb8f5aa8796aa6d4dcb8bd819b4af1b162a222b680a37fa0","impliedFormat":1},{"version":"d7f4bd46a8b97232ea6f8c28012b8d2b995e55e729d11405f159d3e00c51420a","impliedFormat":1},{"version":"d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","impliedFormat":1},{"version":"e4f4f9cf1e3ac9fd91ada072e4d428ecbf0aa6dc57138fb797b8a0ca3a1d521c","impliedFormat":1},{"version":"12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","impliedFormat":1},{"version":"340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","impliedFormat":1},{"version":"c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","impliedFormat":1},{"version":"7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","impliedFormat":1},{"version":"5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","impliedFormat":1},{"version":"9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","impliedFormat":1},{"version":"1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","impliedFormat":1},{"version":"8018dd2e95e7ce6e613ddd81672a54532614dc745520a2f9e3860ff7fb1be0ca","impliedFormat":1},{"version":"b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","impliedFormat":1},{"version":"0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","impliedFormat":1},{"version":"3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","impliedFormat":1},{"version":"032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","impliedFormat":1},{"version":"69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","impliedFormat":1},{"version":"0e704ee6e9fd8b6a5a7167886f4d8915f4bc22ed79f19cb7b32bd28458f50643","impliedFormat":1},{"version":"06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","impliedFormat":1},{"version":"904a96f84b1bcee9a7f0f258d17f8692e6652a0390566515fe6741a5c6db8c1c","impliedFormat":1},{"version":"11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","impliedFormat":1},{"version":"2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","impliedFormat":1},{"version":"1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","impliedFormat":1},{"version":"1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","impliedFormat":1},{"version":"07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","impliedFormat":1},{"version":"619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","impliedFormat":1},{"version":"f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","impliedFormat":1},{"version":"f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","impliedFormat":1},{"version":"350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","impliedFormat":1},{"version":"eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","impliedFormat":1},{"version":"45b74185005ed45bec3f07cac6e4d68eaf02ead9ff5a66721679fb28020e5e7c","impliedFormat":1},{"version":"0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","impliedFormat":1},{"version":"c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","impliedFormat":1},{"version":"5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","impliedFormat":1},{"version":"ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","impliedFormat":1},{"version":"795a08ae4e193f345073b49f68826ab6a9b280400b440906e4ec5c237ae777e6","impliedFormat":1},{"version":"8153df63cf65122809db17128e5918f59d6bb43a371b5218f4430c4585f64085","impliedFormat":1},{"version":"a8150bc382dd12ce58e00764d2366e1d59a590288ee3123af8a4a2cb4ef7f9df","impliedFormat":1},{"version":"5adfaf2f9f33957264ad199a186456a4676b2724ed700fc313ff945d03372169","impliedFormat":1},{"version":"d5c41a741cd408c34cb91f84468f70e9bda3dfeabf33251a61039b3cdb8b22d8","impliedFormat":1},{"version":"a20c3e0fe86a1d8fc500a0e9afec9a872ad3ab5b746ceb3dd7118c6d2bff4328","impliedFormat":1},{"version":"cbaf4a4aa8a8c02aa681c5870d5c69127974de29b7e01df570edec391a417959","impliedFormat":1},{"version":"c7135e329a18b0e712378d5c7bc2faec6f5ab0e955ea0002250f9e232af8b3e4","impliedFormat":1},{"version":"340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","impliedFormat":1},{"version":"fae330f86bc10db6841b310f32367aaa6f553036a3afc426e0389ddc5566cd74","impliedFormat":1},{"version":"2bee1efe53481e93bb8b31736caba17353e7bb6fc04520bd312f4e344afd92f9","impliedFormat":1},{"version":"357b67529139e293a0814cb5b980c3487717c6fbf7c30934d67bc42dad316871","impliedFormat":1},{"version":"99d99a765426accf8133737843fb024a154dc6545fc0ffbba968a7c0b848959d","impliedFormat":1},{"version":"c782c5fd5fa5491c827ecade05c3af3351201dd1c7e77e06711c8029b7a9ee4d","impliedFormat":1},{"version":"883d2104e448bb351c49dd9689a7e8117b480b614b2622732655cef03021bf6d","impliedFormat":1},{"version":"d9b00ee2eca9b149663fdba1c1956331841ae296ee03eaaff6c5becbc0ff1ea8","impliedFormat":1},{"version":"09a7e04beb0547c43270b327c067c85a4e2154372417390731dfe092c4350998","impliedFormat":1},{"version":"eee530aaa93e9ec362e3941ee8355e2d073c7b21d88c2af4713e3d701dab8fef","impliedFormat":1},{"version":"28d47319b97dbeee9130b78eae03b2061d46dedbf92b0d9de13ed7ab8399ccd0","impliedFormat":1},{"version":"6559a36671052ca93cab9a289279a6cef6f9d1a72c34c34546a8848274a9c66c","impliedFormat":1},{"version":"7a0e4cd92545ad03910fd019ae9838718643bd4dde39881c745f236914901dfa","impliedFormat":1},{"version":"c99ebd20316217e349004ee1a0bc74d32d041fb6864093f10f31984c737b8cad","impliedFormat":1},{"version":"6f622e7f054f5ab86258362ac0a64a2d6a27f1e88732d6f5f052f422e08a70e7","impliedFormat":1},{"version":"d62d2ef93ceeb41cf9dfab25989a1e5f9ca5160741aac7f1453c69a6c14c69be","impliedFormat":1},{"version":"1491e80d72873fc586605283f2d9056ee59b166333a769e64378240df130d1c9","impliedFormat":1},{"version":"c32c073d389cfaa3b3e562423e16c2e6d26b8edebbb7d73ccffff4aa66f2171d","impliedFormat":1},{"version":"eca72bf229eecadb63e758613c62fab13815879053539a22477d83a48a21cd73","impliedFormat":1},{"version":"633db46fd1765736409a4767bfc670861468dde60dbb9a501fba4c1b72f8644d","impliedFormat":1},{"version":"f379412f2c0dddd193ff66dcdd9d9cc169162e441d86804c98c84423f993aa8a","impliedFormat":1},{"version":"f2ee748883723aa9325e5d7f30fce424f6a786706e1b91a5a55237c78ee89c4a","impliedFormat":1},{"version":"eda4760e5d7b171132265e970b67c322bcfffacb84248f44def26ed160eb722e","impliedFormat":1},{"version":"142f5190d730259339be1433931c0eb31ae7c7806f4e325f8a470bd9221b6533","impliedFormat":1},{"version":"cbd19f594f0ee7beffeb37dc0367af3908815acf4ce46d86b0515478718cfed8","impliedFormat":1},{"version":"3cdb96f128133efd129c798ac11f959e59d278ae439f69983224774d79ed11db","impliedFormat":1},{"version":"8776e64e6165838ac152fa949456732755b0976d1867ae5534ce248f0ccd7f41","impliedFormat":1},{"version":"896bbc7402b3a403cda96813c8ea595470ff76d31f32869d053317c00ca2589a","impliedFormat":1},{"version":"5c4c5b49bbb01828402bb04af1d71673b18852c11b7e95bfd5cf4c3d80d352c8","impliedFormat":1},{"version":"7030df3d920343df00324df59dc93a959a33e0f4940af3fefef8c07b7ee329bf","impliedFormat":1},{"version":"a96bc00e0c356e29e620eaec24a56d6dd7f4e304feefcc99066a1141c6fe05a7","impliedFormat":1},{"version":"d12cc0e5b09943c4cd0848f787eb9d07bf78b60798e4588c50582db9d4decc70","impliedFormat":1},{"version":"7333ee6354964fd396297958e52e5bf62179aa2c88ca0a35c6d3a668293b7e0e","impliedFormat":1},{"version":"19c3760af3cbc9da99d5b7763b9e33aaf8d018bc2ed843287b7ff4343adf4634","impliedFormat":1},{"version":"9d1e38aeb76084848d2fcd39b458ec88246de028c0f3f448b304b15d764b23d2","impliedFormat":1},{"version":"d406da1eccf18cec56fd29730c24af69758fe3ff49c4f94335e797119cbc0554","impliedFormat":1},{"version":"4898c93890a136da9156c75acd1a80a941a961b3032a0cf14e1fa09a764448b7","impliedFormat":1},{"version":"f5d7a845e3e1c6c27351ea5f358073d0b0681537a2da6201fab254aa434121d3","impliedFormat":1},{"version":"3a47d4582ef0697cccf1f3d03b620002f03fb0ff098f630e284433c417d6c61b","impliedFormat":1},{"version":"d7c30f0abfe9e197e376b016086cf66b2ffb84015139963f37301ed0da9d3d0d","impliedFormat":1},{"version":"ff75bba0148f07775bcb54bf4823421ed4ebdb751b3bf79cc003bd22e49d7d73","impliedFormat":1},{"version":"d40d20ac633703a7333770bfd60360126fc3302d5392d237bbb76e8c529a4f95","impliedFormat":1},{"version":"35a9867207c488061fb4f6fe4715802fbc164b4400018d2fa0149ad02db9a61c","impliedFormat":1},{"version":"b5fd805b7c578ca6a42c42bbfa6fda95a85d9e332106d810bb18116dc13a45f8","impliedFormat":1},{"version":"3abd9ab4fb3a035c865e6a68cb9f4260515354d5ebebacd5c681aee52c046d1f","impliedFormat":1},{"version":"13e82862532619a727cff9a9ba78df7ca66e8a9b69e4cbd18e9809257b6bf7ba","impliedFormat":1},{"version":"601fe4e366b99181cd0244d96418cffeaaa987a7e310c6f0ed0f06ce63dfe3e9","impliedFormat":1},{"version":"c66a4f2b1362abc4aeee0870c697691618b423c8c6e75624a40ef14a06f787b7","impliedFormat":1},{"version":"8808b1c4f84f2e43da98757a959fe7282cb1795737e16534a97b7d4d33e84dfc","impliedFormat":1},{"version":"cd0565ace87a2d7802bf4c20ea23a997c54e598b9eb89f9c75e69478c1f7a0b4","impliedFormat":1},{"version":"738020d2c8fc9df92d5dee4b682d35a776eaedfe2166d12bc8f186e1ea57cc52","impliedFormat":1},{"version":"86dd7c5657a0b0bc6bee8002edcfd544458d3d3c60974555746eb9b2583dc35e","impliedFormat":1},{"version":"d97b96b6ecd4ee03f9f1170722c825ef778430a6a0d7aab03b8929012bf773cd","impliedFormat":1},{"version":"e84e9b89251a57da26a339e75f4014f52e8ef59b77c2ee1e0171cde18d17b3b8","impliedFormat":1},{"version":"272dbfe04cfa965d6fff63fdaba415c1b5a515b1881ae265148f8a84ddeb318f","impliedFormat":1},{"version":"2035fb009b5fafa9a4f4e3b3fdb06d9225b89f2cbbf17a5b62413bf72cea721a","impliedFormat":1},{"version":"eefafec7c059f07b885b79b327d381c9a560e82b439793de597441a4e68d774a","impliedFormat":1},{"version":"72636f59b635c378dc9ea5246b9b3517b1214e340e468e54cb80126353053b2e","impliedFormat":1},{"version":"ebb79f267a3bf2de5f8edc1995c5d31777b539935fab8b7d863e8efb06c8e9ea","impliedFormat":1},{"version":"ada033e6a4c7f4e147e6d76bb881069dc66750619f8cc2472d65beeec1100145","impliedFormat":1},{"version":"0c04cc14a807a5dc0e3752d18a3b2655a135fefbf76ddcdabd0c5df037530d41","impliedFormat":1},{"version":"605d29d619180fbec287d1701e8b1f51f2d16747ec308d20aba3e9a0dac43a0f","impliedFormat":1},{"version":"67c19848b442d77c767414084fc571ce118b08301c4ddff904889d318f3a3363","impliedFormat":1},{"version":"c704ff0e0cb86d1b791767a88af21dadfee259180720a14c12baee668d0eb8fb","impliedFormat":1},{"version":"195c50e15d5b3ea034e01fbdca6f8ad4b35ad47463805bb0360bdffd6fce3009","impliedFormat":1},{"version":"da665f00b6877ae4adb39cd548257f487a76e3d99e006a702a4f38b4b39431cb","impliedFormat":1},{"version":"083aebdd7c96aee90b71ec970f81c48984d9c8ab863e7d30084f048ddcc9d6af","impliedFormat":1},{"version":"1c3bde1951add95d54a05e6628a814f2f43bf9d49902729eaf718dc9eb9f4e02","impliedFormat":1},{"version":"d7a4309673b06223537bc9544b1a5fe9425628e1c8ab5605f3c5ebc27ecb8074","impliedFormat":1},{"version":"0be3da88f06100e2291681bbda2592816dd804004f0972296b20725138ebcddf","impliedFormat":1},{"version":"3eadfd083d40777b403f4f4eecfa40f93876f2a01779157cc114b2565a7afb51","impliedFormat":1},{"version":"cb6789ce3eba018d5a7996ccbf50e27541d850e9b4ee97fdcb3cbd8c5093691f","impliedFormat":1},{"version":"a3684ea9719122f9477902acd08cd363a6f3cff6d493df89d4dc12fa58204e27","impliedFormat":1},{"version":"ff3c48a17bf10dfbb62448152042e4a48a56c9972059997ab9e7ed03b191809b","impliedFormat":1},{"version":"bc3561e460de5a2c19123f618fc1d5a96a484d168884d00666997d847f502bf9","impliedFormat":1},{"version":"c0c46113b4cd5ec9e7cf56e6dbfb3930ef6cbba914c0883eeced396988ae8320","impliedFormat":1},{"version":"118ea3f4e7b9c12e92551be0766706f57a411b4f18a1b4762cfde3cd6d4f0a96","impliedFormat":1},{"version":"01acd7f315e2493395292d9a02841f3b0300e77ccf42f84f4f11460e7623107d","impliedFormat":1},{"version":"656d1ce5b8fbed896bb803d849d6157242261030967b821d01e72264774cab55","impliedFormat":1},{"version":"da66c1b41d833858fe61947432130d39649f0b53d992dfd7d00f0bbe57191ef4","impliedFormat":1},{"version":"835739c6dcf0a9a1533d1e95b7d7cf8e44ca1341652856b897f4573078b23a31","impliedFormat":1},{"version":"774a3bcc0700036313c57a079e2e1161a506836d736203aa0463efa7b11a7e54","impliedFormat":1},{"version":"96577e3f8e0f9ea07ddf748d72dc1908581ef2aafd4ae7418a4574c26027cf02","impliedFormat":1},{"version":"f55971cb3ede99c17443b03788fe27b259dcd0f890ac31badcb74e3ffb4bb371","impliedFormat":1},{"version":"0ef0c246f8f255a5d798727c40d6d2231d2b0ebda5b1ec75e80eadb02022c548","impliedFormat":1},{"version":"ea127752a5ec75f2ac6ef7f1440634e6ae5bc8d09e6f98b61a8fb600def6a861","impliedFormat":1},{"version":"862320e775649dcca8915f8886865e9c6d8affc1e70ed4b97199f3b70a843b47","impliedFormat":1},{"version":"561764374e9f37cb895263d5c8380885972d75d09d0db64c12e0cb10ba90ae3e","impliedFormat":1},{"version":"ee889da857c29fa7375ad500926748ef2e029a6645d7c080e57769923d15dfef","impliedFormat":1},{"version":"56984ba2d781bd742b6bc0fa34c10df2eae59b42ec8b1b731d297f1590fa4071","impliedFormat":1},{"version":"7521de5e64e2dd022be87fce69d956a52d4425286fbc5697ecfec386da896d7e","impliedFormat":1},{"version":"f50b072ec1f4839b54fd1269a4fa7b03efbc9c59940224c7939632c0f70a39c3","impliedFormat":1},{"version":"a5b7ec6f1ff3f1d19a2547f7e1a50ab1284e6b4755d260a481ea01ed2c7cec60","impliedFormat":1},{"version":"1747f9eebf5beb8cfc46cf0303e300950b7bff20cff60b9c46818caced3226e3","impliedFormat":1},{"version":"9d969f36abb62139a90345ee5d03f1c2479831bd84c8f843d87ec304cad96ead","impliedFormat":1},{"version":"e972b52218fd5919aec6cd0e5e2a5fb75f5d2234cf05597a9441837a382b2b29","impliedFormat":1},{"version":"d1e292b0837d0ef5ede4f52363c9d8e93f5d5234086adc796e11eae390305b36","impliedFormat":1},{"version":"0a9e10028a96865d0f25aeca9e3b1ff0691b9b662aa186d9d490728434cf8261","impliedFormat":1},{"version":"1aed740b674839c89f427f48737bad435ee5a39d80b5929f9dc9cc9ac10a7700","impliedFormat":1},{"version":"6e9e3690dc3a6e99a845482e33ee78915893f2d0d579a55b6a0e9b4c44193371","impliedFormat":1},{"version":"4e7a76cce3b537b6cdb1c4b97e29cb4048ee8e7d829cf3a85f4527e92eb573f2","impliedFormat":1},{"version":"bedbf6e1e952560ff250828c494da56976ca88860f8ba3dfb17dc89eac2e3463","impliedFormat":1},{"version":"46f1fe93f199a419172d7480407d9572064b54712b69406efa97e0244008b24e","impliedFormat":1},{"version":"044e6aaa3f612833fb80e323c65e9d816c3148b397e93630663cda5c2d8f4de1","impliedFormat":1},{"version":"deaf8eb392c46ea2c88553d3cc38d46cfd5ee498238dbc466e3f5be63ae0f651","impliedFormat":1},{"version":"6a79b61f57699de0a381c8a13f4c4bcd120556bfab0b4576994b6917cb62948b","impliedFormat":1},{"version":"c5133d7bdec65f465df12f0b507fbc0d96c78bfa5a012b0eb322cf1ff654e733","impliedFormat":1},{"version":"7905c052681cbe9286797ec036942618e1e8d698dcc2e60f4fb7a0013d470442","impliedFormat":1},{"version":"89049878a456b5e0870bb50289ea8ece28a2abd0255301a261fa8ab6a3e9a07d","impliedFormat":1},{"version":"d0da4f4fd66f37c13deabc1a641edd629141c333ccf862733788bd27e89436ac","impliedFormat":1},{"version":"d4a4f10062a6d82ba60d3ffde9154ef24b1baf2ce28c6439f5bdfb97aa0d18fc","impliedFormat":1},{"version":"f13310c360ecffddb3858dcb33a7619665369d465f55e7386c31d45dfc3847bf","impliedFormat":1},{"version":"e7bde95a05a0564ee1450bc9a53797b0ac7944bf24d87d6f645baca3aa60df48","impliedFormat":1},{"version":"62e68ce120914431a7d34232d3eca643a7ddd67584387936a5202ae1c4dd9a1b","impliedFormat":1},{"version":"91d695bba902cc2eda7edc076cd17c5c9340f7bb254597deb6679e343effadbb","impliedFormat":1},{"version":"e1cb8168c7e0bd4857a66558fe7fe6c66d08432a0a943c51bacdac83773d5745","impliedFormat":1},{"version":"a464510505f31a356e9833963d89ce39f37a098715fc2863e533255af4410525","impliedFormat":1},{"version":"0612b149cabbc136cb25de9daf062659f306b67793edc5e39755c51c724e2949","impliedFormat":1},{"version":"2579b150b86b5f644d86a6d58f17e3b801772c78866c34d41f86f3fc9eb523fe","impliedFormat":1},{"version":"e4b3a3e1b21a194b29d35488ec880948fc2ef8e937288463ea2981ad62a7b106","impliedFormat":1},{"version":"0353e05b0d8475c10ddd88056e0483b191aa5cdea00a25e0505b96e023f1a2d9","impliedFormat":1},{"version":"6a312caabb43c284a4b0da60d5c24f285338096eb9e977af1faca38d32a34685","impliedFormat":1},{"version":"b6eda93163beb978dd0d3042b11c60373506400c94613c0b40d1c0a9a9f1020e","impliedFormat":1},{"version":"a8af4739274959d70f7da4bfdd64f71cfc08d825c2d5d3561bc7baed760b33ef","impliedFormat":1},{"version":"99193bafaa9ce112889698de25c4b8c80b1209bb7402189aea1c7ada708a8a54","impliedFormat":1},{"version":"70473538c6eb9494d53bf1539fe69df68d87c348743d8f7244dcb02ca3619484","impliedFormat":1},{"version":"c48932ab06a4e7531bdca7b0f739ace5fa273f9a1b9009bcd26902f8c0b851f0","impliedFormat":1},{"version":"df6c83e574308f6540c19e3409370482a7d8f448d56c65790b4ac0ab6f6fedd8","impliedFormat":1},{"version":"ebbe6765a836bfa7f03181bc433c8984ca29626270ca1e240c009851222cb8a7","impliedFormat":1},{"version":"20f630766b73752f9d74aab6f4367dba9664e8122ea2edcb00168e4f8b667627","impliedFormat":1},{"version":"468df9d24a6e2bc6b4351417e3b5b4c2ca08264d6d5045fe18eb42e7996e58b4","impliedFormat":1},{"version":"954523d1f4856180cbf79b35bd754e14d3b2aea06c7efd71b254c745976086e9","impliedFormat":1},{"version":"31a030f1225ab463dd0189a11706f0eb413429510a7490192a170114b2af8697","impliedFormat":1},{"version":"6f48f244cd4b5b7e9a0326c74f480b179432397580504726de7c3c65d6304b36","impliedFormat":1},{"version":"5520e6defac8e6cdced6dd28808fafe795cb2cd87407bb1012e13a2b061f50b7","impliedFormat":1},{"version":"c3451661fb058f4e15971bbed29061dd960d02d9f8db1038e08b90d294a05c68","impliedFormat":1},{"version":"1f21aefa51f03629582568f97c20ef138febe32391012828e2a0149c2c393f62","impliedFormat":1},{"version":"b18141cda681d82b2693aef045107a910b90a7409ecff0830e1283f0bb2a53e6","impliedFormat":1},{"version":"18eb53924f27af2a5e9734dce28cf5985df7b2828dade1239241e95b639e9bf1","impliedFormat":1},{"version":"a9f1c52f4e7c2a2c4988b5638bd3dbfe38e408b358d02dd2fb8c8920e877f088","impliedFormat":1},{"version":"a7e10a8ad6536dd0225029e46108b18cee0d3c15c2f6e49bd62798ad85bc57b6","impliedFormat":1},{"version":"8db1ed144dd2304b9bd6e41211e22bad5f4ab1d8006e6ac127b29599f4b36083","impliedFormat":1},{"version":"843a5e3737f2abbbbd43bf2014b70f1c69a80530814a27ae1f8be213ae9ec222","impliedFormat":1},{"version":"6fc1be224ad6b3f3ec11535820def2d21636a47205c2c9de32238ba1ac8d82e6","impliedFormat":1},{"version":"5a44788293f9165116c9c183be66cefef0dc5d718782a04847de53bf664f3cc1","impliedFormat":1},{"version":"afd653ae63ce07075b018ba5ce8f4e977b6055c81cc65998410b904b94003c0a","impliedFormat":1},{"version":"9172155acfeb17b9d75f65b84f36cb3eb0ff3cd763db3f0d1ad5f6d10d55662f","impliedFormat":1},{"version":"71807b208e5f15feffb3ff530bec5b46b1217af0d8cc96dde00d549353bcb864","impliedFormat":1},{"version":"1a6eca5c2bc446481046c01a54553c3ffb856f81607a074f9f0256c59dd0ab13","impliedFormat":1},{"version":"04de5584b953b03611eeef01ba9948607def8f64f1e7fbc840752b13b4521b52","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"c06b2652ffeb89afd0f1c52c165ced77032f9cd09bc481153fbd6b5504c69494","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"612422d5ba6b4a5c4537f423e9199645468ad80a689801da63ab7edb43f7b835","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"0904660ae854e6d41f6ff25356db1d654436c6305b0f0aa89d1532df0253486e","impliedFormat":1},{"version":"060d305fe4494d8cb2b99d620928d369d1ee55c1645f5e729a2aca07d0f108cb","impliedFormat":1},{"version":"230bdc111d7578276e4a3bb9d075d85c78c6b68f428c3a9935e2eaa10f4ae1f5","impliedFormat":1},{"version":"0c50296ee73dae94efc3f0da4936b1146ca6ce2217acfabb44c19c9a33fa30e5","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"0e5974dfff7a97181c7c376545f126b20acf2f1341db7d3fccea4977bf3ce19c","impliedFormat":1},{"version":"c7f977ea78a1b060a30554c1c4ec0e2269c6e305a349ca2ada14931ac27ecc0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3806cdd6b48ba01a9198134e62a384ec217a98f316d4baef74dd46d62c947a63","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"2c9adcc85574b002c9a6311ff2141055769e0071856ec979d92ff989042b1f1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bf3fe89ec8baa335f6370b9fa36308e1bc7a72e2eb2dad1e94f31e27fa28b5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"35390d6fa94bdb432c5d0bcb6547bdd11406c2692a6b90b9e47be2105ea19bd6","impliedFormat":1},{"version":"3910dab597c40e173bf0e0d419d3ce9682c54ebf6ae84849f9b829b1451a17ec","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"486c074a5c0f2254345c0d1c9540380f5463999e42d7e1a159305ea823d3c4b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"8e7c3bed5f19ade8f911677ddc83052e2283e25b0a8654cd89db9079d4b323c7","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"ccf3afaeebbeee4ca9092101e99fd6abd681116b6e5ec23e381bbb1e1f32262c","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"ab7818a9d57a9297b90e456fc68b77f84d74395a9210a3cfa9d87db33aff8b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb08062718a5470cd864c1fae0eb5b3a3adc5bcd05dcf87608d6f60b65eca3f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a815b7d1aebc0646b91548eab2fc19dada09ff255d04c71ced00bbd3058c8eb","impliedFormat":1},{"version":"255d948f87f24ffd57bcb2fdf95792fd418a2e1f712a98cf2cce88744d75085c","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"836b36913830645ac3b28fe33731aac3fdb3524ee8adbb4cdab9a5c189f41943","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd3b3c21a56104693183942e221c1896ee23bcb8f8d91ab0b941f7b32985411","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"f429b61e369208ef7668ebf1dc63176e506fbfaea7b0ecc13d586a5839ebb071","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"168d88e14e0d81fe170e0dadd38ae9d217476c11435ea640ddb9b7382bdb6c1f","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"25e5c8b73c6ad21f39e8e72f954090f30b431a993252bccea5bdad4a3d93c760","impliedFormat":1},{"version":"5bf595f68b7c1d46ae8385e3363c6e0d4695b6da58a84c6340489fc07ffc73f8","impliedFormat":1},{"version":"b87682ddc9e2c3714ca66991cdd86ff7e18cae6fd010742a93bd612a07d19697","impliedFormat":1},{"version":"0d621d4e5ae0224d434f840a32f871bad9e9236dd18b13bb34164a769c4a964e","impliedFormat":1},{"version":"86bf2bfe29d0bc3fbc68e64c25ea6eab9bcb3c518ae941012ed75b1e87d391ae","impliedFormat":1},{"version":"3c74d80d1dd95437cc9bbf22d88199e7410fd85af06171327125bcf4025deae8","impliedFormat":1},{"version":"00b4f8b82e78f658b7e269c95d07e55d391235ce34d432764687441177ae7f64","impliedFormat":1},{"version":"57880096566780d72e02a5b34d8577e78cdf072bfd624452a95d65bd8f07cbe0","impliedFormat":1},{"version":"10ac50eaf9eb62c048efe576592b14830a757f7ea7ed28ee8deafc19c9845297","impliedFormat":1},{"version":"e75af112e5487476f7c427945fbd76ca46b28285586ad349a25731d196222d56","impliedFormat":1},{"version":"e91adad3da69c366d57067fcf234030b8a05bcf98c25a759a7a5cd22398ac201","impliedFormat":1},{"version":"d7d6e1974124a2dad1a1b816ba2436a95f44feeda0573d6c9fb355f590cf9086","impliedFormat":1},{"version":"464413fcd7e7a3e1d3f2676dc5ef4ebe211c10e3107e126d4516d79439e4e808","impliedFormat":1},{"version":"18f912e4672327b3dd17d70e91da6fcd79d497ba01dde9053a23e7691f56908c","impliedFormat":1},{"version":"2974e2f06de97e1d6e61d1462b54d7da2c03b3e8458ee4b3dc36273bc6dda990","impliedFormat":1},{"version":"d8c1697db4bb3234ff3f8481545284992f1516bc712421b81ee3ef3f226ae112","impliedFormat":1},{"version":"59b6cce93747f7eb2c0405d9f32b77874e059d9881ec8f1b65ff6c068fcce6f2","impliedFormat":1},{"version":"e2c3c3ca3818d610599392a9431e60ec021c5d59262ecd616538484990f6e331","impliedFormat":1},{"version":"e3cd60be3c4f95c43420be67eaa21637585b7c1a8129f9b39983bbd294f9513c","impliedFormat":1},{"version":"dbd0794f86b0f3e7c2c28bbe6cbf91adc6ef2203c6a832548ef199816d47039c","affectsGlobalScope":true,"impliedFormat":1},{"version":"f35d278fc8e426db8655f179cffdc044c1d4fb83bd31b85bbdad31beb14c2e83","impliedFormat":1},{"version":"53477a1815e915b8c20222a2ac8f9e3de880a1e8c8dbf9dae529b3d2e2b4a53b","impliedFormat":1},{"version":"d6178e0ea8afbf02a236966bd0d99eed2646599482249e6ba281d16e6fb185d0","impliedFormat":1},{"version":"5339f84dfcb7b04aa1c2b4d7713d6128039381447f07abc2e48d36685e2eef44","impliedFormat":1},{"version":"fb35a61a39c933d31b5b2549d906b2c932a1486622958586f662dbd4b2fe72e6","impliedFormat":1},{"version":"24e2728268be1ad2407bab004549d2753a49b2acb0f117a04c4e28ffb3ecdd4f","impliedFormat":1},{"version":"aff159b14eba59afe98a88fe6f57881ba02895fb9763512dda9083497bdcd0e6","impliedFormat":1},{"version":"1f2bddea07543ccda708134cca0600b4d9ac9bd774ec1ede0a69935b04df1496","impliedFormat":1},{"version":"6e8997d08f6798d0a9416df24312cafd084e6184a205d9283eba95ef56f8ef8b","impliedFormat":1},{"version":"ac6968717607889d24d6e407effb48dd5af82005925b4725b1d9eb52a8a047e2","impliedFormat":1},{"version":"26080058b725ac0b480241751255b4391f722263778e84e66a62068705aafd3c","impliedFormat":1},{"version":"46afbf46c3d62eac2afead3a2011d506637bf4f2c05e1fd64bbf7e2bb2947b7c","impliedFormat":1},{"version":"84d02daa32c7a8bff4946bbc7d878ffb7114c19879f7bfceeeb39bef48e93c42","impliedFormat":1},{"version":"ce6a3f09b8db73a7e9701aca91a04b4fabaf77436dd35b24482f9ee816016b17","impliedFormat":1},{"version":"20e086e5b64fdd52396de67761cc0e94693494deadb731264aac122adf08de3f","impliedFormat":1},{"version":"6e78f75403b3ec65efb41c70d392aeda94360f11cedc9fb2c039c9ea23b30962","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"eefd2bbc8edb14c3bd1246794e5c070a80f9b8f3730bd42efb80df3cc50b9039","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"a56fe175741cc8841835eb72e61fa5a34adcbc249ede0e3494c229f0750f6b85","impliedFormat":1},{"version":"fcf72a208e45fe550fcbd5eccb52e85f1140e99ad3c75f0faa4d5f94c5579c80","impliedFormat":1},{"version":"066d53e96c145215c40d71b5aff1fb8bdd37d711291dce11cf825bda6293ebee","impliedFormat":1},{"version":"79c164aa4f8a8418df7717206ea52508f72743224a6b9c705f10724c6dbb5548","impliedFormat":1},{"version":"7bb53546e9bd6e3f22804497a41d4b885674e7b15b7d64c7d3f83722dfd2b456","impliedFormat":1},{"version":"4083e6d84bfe72b0835b600185c7b7ce321da3d6053f866859185eefc161e7a0","impliedFormat":1},{"version":"b883e245dc30c73b655ffe175712cac82981fc999d6284685f0ed7c1dac8aa6f","impliedFormat":1},{"version":"626e3504b81883fa94578c2a97eff345fadc5eae17a57c39f585655eef5b8272","impliedFormat":1},{"version":"e9a15eeba29ceb0ee109dd5e0282d2877d8165d87251f2ea9741a82685a25c61","impliedFormat":1},{"version":"c6cb06cc021d9149301f3c51762a387f9d7571feed74273b157d934c56857fac","impliedFormat":1},{"version":"cd7c133395a1c72e7c9e546f62292f839819f50a8aa46050f8588b63ef56df88","impliedFormat":1},{"version":"196f5f74208ce4accea017450ed2abc9ce4ab13c29a9ea543db4c2d715a19183","impliedFormat":1},{"version":"4687c961ab2e3107379f139d22932253afb7dd52e75a18890e70d4a376cdf5d9","impliedFormat":1},{"version":"ae8cfe2e3bdef3705fc294d07869a0ab8a52d9b623d1cc0482b6fc2be262b015","impliedFormat":1},{"version":"94c8e9c00244bbf1c868ca526b12b4db1fab144e3f5e18af3591b5b471854157","impliedFormat":1},{"version":"827d576995f67a6205c0f048ae32f6a1cf7bda9a7a76917ab286ef11d7987fd7","impliedFormat":1},{"version":"cb5dc83310a61d2bb351ddcdcaa6ec1cf60cc965d26ce6f156a28b4062e96ab2","impliedFormat":1},{"version":"0091cb2456a823e123fe76faa8b94dea81db421770d9a9c9ade1b111abe0fcd1","impliedFormat":1},{"version":"034d811fd7fb2262ad35b21df0ecab14fdd513e25dbf563572068e3f083957d9","impliedFormat":1},{"version":"298bcc906dd21d62b56731f9233795cd11d88e062329f5df7cdb4e499207cdd4","impliedFormat":1},{"version":"f7e64be58c24f2f0b7116bed8f8c17e6543ddcdc1f46861d5c54217b4a47d731","impliedFormat":1},{"version":"966394e0405e675ca1282edbfa5140df86cb6dc025e0f957985f059fe4b9d5d6","impliedFormat":1},{"version":"b0587deb3f251b7ad289240c54b7c41161bb6488807d1f713e0a14c540cbcaee","impliedFormat":1},{"version":"4254aab77d0092cab52b34c2e0ab235f24f82a5e557f11d5409ae02213386e29","impliedFormat":1},{"version":"19db45929fad543b26b12504ee4e3ff7d9a8bddc1fc3ed39723c2259e3a4590f","impliedFormat":1},{"version":"b21934bebe4cd01c02953ab8d17be4d33d69057afdb5469be3956e84a09a8d99","impliedFormat":1},{"version":"b2b734c414d440c92a17fd409fa8dac89f425031a6fc7843bac765c6c174d1ca","impliedFormat":1},{"version":"239f39e8ad95065f5188a7acd8dbefbbbf94d9e00c460ffdc331e24bc1f63a54","impliedFormat":1},{"version":"d44f78893cb79e00e16a028e3023a65c1f2968352378e8e323f8c8f88b8da495","impliedFormat":1},{"version":"32afc9daae92391cb4efeb0d2dac779dc0fb17c69be0eb171fd5ed7f7908eeb4","impliedFormat":1},{"version":"b835c6e093ad9cda87d376c248735f7e4081f64d304b7c54a688f1276875cbf0","impliedFormat":1},{"version":"a9eabe1d0b20e967a18758a77884fbd61b897d72a57ddd9bf7ea6ef1a3f4514b","impliedFormat":1},{"version":"64c5059e7d7a80fe99d7dad639f3ba765f8d5b42c5b265275d7cd68f8426be75","impliedFormat":1},{"version":"05dc1970dc02c54db14d23ff7a30af00efbd7735313aa8af45c4fd4f5c3d3a33","impliedFormat":1},{"version":"a0caf07fe750954ad4cf079c5cf036be2191a758c2700424085ffde6af60d185","impliedFormat":1},{"version":"1ea59d0d71022de8ea1c98a3f88d452ad5701c7f85e74ddaa0b3b9a34ed0e81c","impliedFormat":1},{"version":"eab89b3aa37e9e48b2679f4abe685d56ac371daa8fbe68526c6b0c914eb28474","impliedFormat":1},{"version":"df09e59ace0cf7fd8e3c767b0b8f3d5b2212bd40d4e9dbf49a388526ead5e545","impliedFormat":1},{"version":"03fe713f6d3e69f47d4871545b2cd40e1f714b11e3945f6ab1e05361cad19192","impliedFormat":1},{"version":"25ea3ca113eb33c517ace8bd6555e8caf1c99d34dea7b3a48b074bdc5e7cc735","impliedFormat":1},{"version":"d5f83721da8ee61cd1620f0e4abc9d60453b4ef0b25945172bbd478ff6e3adcb","impliedFormat":1},{"version":"597536b4c8e7e309dd823f61206ff169ca90a3d68245343a5226a8d20f7a9ffd","impliedFormat":1},{"version":"cfed3c4118baa2ae69ec0da47b5fa722c49e5915c1cb7ffa8d5b53b678b641ca","impliedFormat":1},{"version":"3b5f9ed01add914f4bf2220544cdd4099583c2a72895b2ea495e9284be88b894","impliedFormat":1},{"version":"575425068684056c113b93ec316870eca50195835f04179630997e7b075164d4","impliedFormat":1},{"version":"aa0af7166f48f67765f96dc70c1d7f9f55ae264b96cadf5b6077b2bc0aa2b5dd","impliedFormat":1},{"version":"2fc9c7c6695b151ffd3ed667d6d793c2f656461978e840eff1d1350fc0bb1ebb","impliedFormat":1},{"version":"4d590f0e0b4abaf693f94d08b5c414928f2571aea5ac6efb97e4646e195dac48","impliedFormat":1},{"version":"bf1655c135bd654637f98f934f9a9eb4d6450194ca2f4968b79263608da59fdd","impliedFormat":1},{"version":"1ebe079cc9ed9ec4cd11d02c70f209caf16e9dd8e1e801a36648ce711bb3c404","impliedFormat":1},{"version":"b9a49ec04f7dac4bdcb928894d3c6bfc15a4ffee5f14d4b2bef69069de2b1d25","impliedFormat":1},{"version":"d2554dc921a526fc29600ef66da5d37577ce64557eaceebdb2b6170776051ffd","impliedFormat":1},{"version":"1fffc635777e6b7edc2caf5e8473fd161ba8fe5605ae84b64746a2a34045e6e3","impliedFormat":1},{"version":"f6f35852e407d4c04e578478e743c8101227037abd405ad71564e8430d4e4c1c","impliedFormat":1},{"version":"0e16f517285c960f284ff5367c239c24e20acfd3b3aced00d7842c7cd867898c","impliedFormat":1},{"version":"063929189f06ac3087123f98ce8736eea5c2a4cecbaa46c54b58118608fb8708","impliedFormat":1},{"version":"95e249a5d61382550bbf6341cb31a3114b0c10c232b0fbac97da74f83275dbab","impliedFormat":1},{"version":"34880c694bdb6f266bf484dbc60bd887890ab1c8d6807459fdf93f6ab0b0c792","impliedFormat":1},{"version":"d490c69a03b97298294b4d2159175f2f9b62a7dfcd81efc63ea3505c60fc0ac8","impliedFormat":1},{"version":"c0511c2a0a6ae726a66a0b25336fdc61c632c6c1505eb0bbbe1556055fd06919","impliedFormat":1},{"version":"bbd577f9d34a868d751e14a904401a6a026de322bd0f7cc7d51ecc585b57c6e6","impliedFormat":1},{"version":"e06f1dbc167fd37808d2f36aee8ef3bfae734d13fc4afcd9994072a30099df0b","impliedFormat":1},{"version":"7e0693b9604ff4fd358a2f21db90982fce11a4ff216eeae85e326f108d648d68","impliedFormat":1},{"version":"69d5a40440e664ec9493c61169414208472583f342346fb31dcbebad23c6a780","impliedFormat":1},{"version":"3d1efa91afa616c307864fa93f9e7777672bf90ac79c16936969efbc6629cbc1","impliedFormat":1},{"version":"722d99f854a33867a3397fe397924c0de326741e9d7830876481ccf87643a133","impliedFormat":1},{"version":"6ddebf5efb47d10d48d734f855b5cd13772de6d14b50779a17590afa30fcaefc","impliedFormat":1},{"version":"0c4e55d5ee917d3efca585b9eb138df9eb9cd38ec5a8ab258fc0e4fe8d54abd6","impliedFormat":1},{"version":"a41283ab6303ab1d21729da5723952e1b7d9d1bf379b9cce09132403f6f0f07d","impliedFormat":1},{"version":"1557f6fa35f1fc5d23911982761a7ddc4fbe9322eda575f6dadca8d5515e0cee","impliedFormat":1},{"version":"ded4768515ff723001ca99221ec8a7b751a4f90af8be95c885ec8a21efa548d4","impliedFormat":1},{"version":"86a6b6352a6a47fa8698f68119eb716ea951f541128d108382137e3d85900162","impliedFormat":1},{"version":"b9e6aa9de64cbd004d2c59ad79cff12a5d34406153456b869eae6b1d8f5bbb61","impliedFormat":1},{"version":"b864079910dbf273badc3367d21910e6f8887705defda6d51882084ef5b6ebb5","impliedFormat":1},{"version":"5e1fbca4c7648ff481cd7dda46ca8651239f4898bbed3d5066b8d6db0f60c555","impliedFormat":1},{"version":"0fd72d2cd43f9da04478aa6cbb922c27fda6b4a0ca7235aee8f6a933941bae92","impliedFormat":1},{"version":"28a5fc04797c6992303791a4b79ed99431bf2af90b77842948e3e8bc0f681d97","impliedFormat":1},{"version":"20a397ebeea68a193465caeb8f1b3225c49c6bdc4545a0ca6521fa684ef2fc5b","impliedFormat":1},{"version":"9edb51982e31faae66cef7076aacce409cab4637f0ec6e6851331fc87d9fa872","impliedFormat":1},{"version":"8a954a3b53672645d10a61e617272cd309bd7dc442f914427291ea8a2cb3c599","impliedFormat":1},{"version":"69e56ac933cbb0a62cbed3436a44068445460c3a246ae5b7b70e010dd3d8e0e5","impliedFormat":1},{"version":"dbafd3b17be2ca81493a6d6daf7afb6d04b83dd3b80c556ae5973e9a375aa6ff","impliedFormat":1},{"version":"8ea7264ce539f97f4720250a14695a1f82c3ac33ed66617991438cfb3d41947f","impliedFormat":1},{"version":"abf4fe7ebd8771a5c9d963754ae0c088c159e0e12ff77ed2e48f69d86ed50be5","impliedFormat":1},{"version":"050985cfd782bb62131bdc040cd444f65bbd35ca1b45e3eefde79ef713ddeb1b","impliedFormat":1},{"version":"cd935cd60191b79134684160cf08d5ab555512b7befd5f88b449681f7e037a3e","impliedFormat":1},{"version":"5e61341da5f93b211c8c11f6ca709a2dda33feded2cb3e1481d0b727aed23cd7","impliedFormat":1},{"version":"3df29fc79cceaa80012df2005f745c1b635a41dda0766ddd29ac8e078c4216f8","impliedFormat":1},{"version":"bb8aac29b972b3826d70b106373ed2600bfa8377ddd5672b0b5e256f361acfb9","impliedFormat":1},{"version":"721e984c6181cf2f1587226d11d2265f5bd1450da58e7598845ae15cee0465b4","impliedFormat":1},{"version":"bfa5dd71d432e277bbf3c44b3dd91db853fd833da21f43cc3a0a2dc324b7af47","impliedFormat":1},{"version":"987f95fafbf1296cd653459ac69b3a73cc4f7f37f38a1c769902bcaabd516452","impliedFormat":1},{"version":"5f3f4c3ea0ce78180d0482cfc808410092b441b727bee9a26d26ef09decb64c3","impliedFormat":1},{"version":"6b1c226b8c0d272c37948df86f81f100157b7cef9d97d2651f1d8e740a2be268","impliedFormat":1},{"version":"3e1e6a7a6e3d0615d046dd62062c557404c9e1c622dfbef4fa83d17c628e314a","impliedFormat":1},{"version":"ded6a76ae5fa6fc3f7f860a187f3b1c81b5bafb953be192501a937307dc739b9","impliedFormat":1},{"version":"8ee4717c4ad7d5976ab1bece799c68045b7b346e274d7774e86ff394cf867d47","impliedFormat":1},{"version":"a9e3299c6098d323bcd9787e2ac5e4d74457e5427c305ebd432e52ed13dd23c0","impliedFormat":1},{"version":"3b8ddc84907c11d89e5240f8299e87fe506a1c18764fb9d546b02f9e347f93e4","impliedFormat":1},{"version":"4b5186a238a3fbfeca1b14fe6b234b8bd5b93ac89a47984715f76f8919e29d96","impliedFormat":1},{"version":"dd693a36f441a1337e9a34b6da2cfdc53d7cd9dbf0d1cde334cab196c3e6f17a","impliedFormat":1},{"version":"e284b0d144003a25e3b7da92c55d80a085531c0c84a77a62f1a3e2bfe82454b1","impliedFormat":1},{"version":"e09a001b1588cde9f5e77560730c5ec6ea346ea09da2d65b3a02629e390d0923","impliedFormat":1},{"version":"77a38dc0e4afa289c6ceaf9121c7718fac9231904ff5f30c0c1201524fb25f23","impliedFormat":1},{"version":"2505ab6e616e35b2a63dcc8cafd3d6092c6e0109b206cec1be7d80cd450cfb7e","impliedFormat":1},{"version":"c2d66e86bd5f13ad098ddb98ab863bcf0d15b323cc9bce6ff56e20eb50648926","impliedFormat":1},{"version":"1959affb5ce54dd86a2bca9ba087da5a29fcd1849eb1710f1d6807512ac513d6","impliedFormat":1},{"version":"8ae1ca3c5186af2c3a6e979998c00c82a363d024ed26a8bcb84a6ef21878d4b4","impliedFormat":1},{"version":"05ec4ee3055f601ad3f932832a0b7fb5842fafa6d3a4f29b200c49e0c8d36bc4","impliedFormat":1},{"version":"cf0430d48488f45abbb7184e36b580c1933cc8078581c038583e16cdfa80863d","impliedFormat":1},{"version":"aeb0806490c71f371a75629556f469419997367aafa673ae2e86705652f39227","impliedFormat":1},{"version":"b445ce66b11750fb2172525591647d30b75ec8d003a93ee3efc12954ffb8d5ec","impliedFormat":1},{"version":"a36860808f7994a6ce2c965e11e7a971ae9b438422ffefe9471ed4f3ba3ef3f6","impliedFormat":1},{"version":"6335dfc1f7c285b25ca643890becb12d22fd24079624d91b660f31a3ef130f8a","impliedFormat":1},{"version":"e0e3a4eb638ceb6583ebfa8a83fb27d5ca98ba93ce00d396dd09d41630834a68","impliedFormat":1},{"version":"54927a5dc7fa2c1d7b8232c756d658d051f2c0620533c4048343e671d18c7983","impliedFormat":1},{"version":"8ff6d24bddad8f2bb8ac0ae129760dd1df427765f4f6199390347c0009ff9b48","impliedFormat":1},{"version":"25a0403b5a28416593fc09c3e5150e981c742afedf0b6e423f8a94f1351352c8","impliedFormat":1},{"version":"0db51b9c351d7c2313296e5879fbad8f20af8b9061885c8590ae0216ff6154a2","impliedFormat":1},{"version":"1c6454d7f733067337f1685a06c4981a78d1925ae0381bcd09f2c43b73755aaf","impliedFormat":1},{"version":"fa7cfbc437c87d93860a4a1304a12e8fa9a28a24695e1f4c36d266b4cbdf4e7b","impliedFormat":1},{"version":"4afe4410e572d10448fb1f7f254bc2eca329e00180e75529be8b22465718b2c4","impliedFormat":1},{"version":"6d57f0ab1e858b12895e1eca5e6f407a835c13038fadd5f85134740e6e32b613","impliedFormat":1},{"version":"5d6ef65ccf14b0d51af503adffccdbaa846848cf0fe82310816cf82eb364d107","impliedFormat":1},{"version":"397a17567b445fbeed01f58163c2b9667638ff815881f349cffec5ad30844905","impliedFormat":1},{"version":"4bbac0cdef9e2f41b2d70826633298df274436caf011a093bfc1bd57dd2269c1","impliedFormat":1},{"version":"38bc1e63328558fecd8e2c3f9159ded06a2fd86059b0a91e93f11aeebeb1f177","impliedFormat":1},{"version":"e4756baf25dba2f6660043ca4fc6e36ab8d31a0c34d507624d8a12cbe6ab9b30","impliedFormat":1},{"version":"4be799bfee1766047c11b3b5d371ca9e3993526d50c3e276e7cdb3943dd680a6","impliedFormat":1},{"version":"513f887178e2df3ea70340c20bffc633827c2f0a4e1340a4176eecb6d3c5a4e7","impliedFormat":1},{"version":"7b6ae8994d485350989d50cae27221f2d9929d60677b8c5de4ceb81baf480d3e","impliedFormat":1},{"version":"7adc87c8c1d3fdf85652694a636c6e032b7ea76335de7a110ffb215970d9b1f0","impliedFormat":1},{"version":"27f60ec60daf015ed0510587fd37d65818c085d47f320f03e2178e80ae1b96d2","impliedFormat":1},{"version":"69f868104a0f83fc97451cb143d1fdee65d6133442e585048983a8e27c6dd4be","impliedFormat":1},{"version":"a4fd1c983504d251988ad2e8629dc110228a591e1bc9f85e57b35895e8141cf3","impliedFormat":1},{"version":"8e82daa0bb799f366cfc646fcd65e507d3db4921082426dc45b78cedcb60f71c","impliedFormat":1},{"version":"a2f99636b48361b7e10c232cdeeb3aede976279f950b7f84e8b970471a0dc606","impliedFormat":1},{"version":"e31bcde9cdc47ff503a45bb8d68c38fd39039b06567c8017021f9116e31ecde2","impliedFormat":1},{"version":"bddecda3271cc5aaf904e94c2b65c23cb7528e27567ef31d1302bc8845374e56","impliedFormat":1},{"version":"23306c0e57b32fdf724bb0aba128d0023fd57b856490b1cd69bdc0de2acc334a","impliedFormat":1},{"version":"4df175087aed418f42fd5cf507c1f57f0972484cadbe0f6c38cabd0c6b3576ce","impliedFormat":1},{"version":"df51e368f1e65529fd132dd67c8312f21b644063ce7950e8b820905d70b28eb7","impliedFormat":1},{"version":"74d10836d7259d3a664ed517a3c8547003e1de056d85b8e324a11dbca522503e","impliedFormat":1},{"version":"b020142c9cb2c061e119c6ebc1712f2e66a68968657f4867332789688c706189","impliedFormat":1},{"version":"df08a61b7eb2b11b4e9c771cc3b538f3fc4260c170f8fd89110843323fac2ba2","impliedFormat":1},{"version":"acc1e28219b83d788ef0e28b8d7ff1f3a8fc7df6a49ec141402e044badc84108","impliedFormat":1},{"version":"3552e9ab64219d9d980f9406c354e620f04ca17944459d4b23c62d472d9be2dc","impliedFormat":1},{"version":"e9f94a086b52c2f522f2bc9ecf7539d7bffc390578cc41db9547005b93df5d88","impliedFormat":1},{"version":"66d87665eb8cc693d6ea61f7735ceacf60c373d7901b8fab3a283b843c45cf33","impliedFormat":1},{"version":"5c25d35c4bbeabb961925d2b114602191800afb4d4f164e45979dd2c83f965c2","impliedFormat":1},{"version":"8b989bf267ff6ef7a00f318e95794bcefd06cda44f3cffde905ca579d17acad5","impliedFormat":1},{"version":"f3983ffdad35bf9234e36a691bf959934b723134c070fa5dffccffe046009e2f","impliedFormat":1},{"version":"2d8c69bb71790264bc61c5858afcfd00d5bd7bca6c9c38185f07896661053790","impliedFormat":1},{"version":"0396db572d4384fab79c5ad3b2cf330f167496da87da0e61a3f55e803f0fcc4b","impliedFormat":1},{"version":"9eb195a59362d107cf8f1d92d704fcd034bd92796f72cf031ad0525d88e36d4f","impliedFormat":1},{"version":"b60a1aeffa207842414020d16c86854f99bebff51832478b00451c1770fc9708","impliedFormat":1},{"version":"178ae1eaa5cd24618fec31c62ee6b66f5f57d76b075d9d8b34cc0db5543c0fec","impliedFormat":1},{"version":"4f31b5dbde1dcb81687ef4e06c2636809f6a0517615876bc937fa266f42e87b4","impliedFormat":1},{"version":"33d7dde5b3614d1f000ab11f9be2cb0f032615b726ca8537afc272db0b522a7e","impliedFormat":1},{"version":"97b8ea7292ec9f0828af2d58952ea17497a73943eaa0a2dd3046a4e07a530c61","impliedFormat":1},{"version":"ebba07507741f7d53d05cbb59a8dea0b3b75aba278810b4d2696776f95b779e1","impliedFormat":1},{"version":"5c840682cf2d211808e4f0dc5cd32da409352e8b3d11d7e9ba25c92796932cdf","impliedFormat":1},{"version":"f278958ac0fde187482abb825e61be120427e8aecb42a9155f0144767a29a358","impliedFormat":1},{"version":"cf35b9aa3b45b2098ec7033db87d004913ac7bf1ce52c9c8154fa86477e9046e","impliedFormat":1},{"version":"8002100726ad65ae695ef88b091b9c8cb73e024eaf23b31d228a5a8ce19af31f","impliedFormat":1},{"version":"f7a7233cef5a86a5c2c5e4dab11b46e0688707bd066a80aa5249e6cd6e0211f6","impliedFormat":1},{"version":"354126b46c623665e6aac86b6deb693dc43499dbd71bf655aa5f6bcd7753dae0","impliedFormat":1},{"version":"1f1d4396e7a118ba9e1f49f290b29d0aa946e91fc8180909b1d64b2998b08953","impliedFormat":1},{"version":"534f6fde91eb366097dbf65174356c88c2726d513c55f0f60b2098fc3f6e87ab","impliedFormat":1},{"version":"bc8d8ff31066bbfb937d223a528d545abfba45a0a646b141e2a15dd1948026e9","impliedFormat":1},{"version":"8a03c390eab5e99798e3d24c1d86a9b0ee851d315c0cb7480b42f6a49338d694","impliedFormat":1},{"version":"46b25c26bc3816d779c0353b3c1f6b83eeda1030b99401472a4341a9ab94138f","impliedFormat":1},{"version":"0ba4da683fe4d459827bca4e9c2befc46b9fe589353a08d874440dc6b1119df9","impliedFormat":1},{"version":"a5ed548aea7fdd435b68149641d20d0c823ae4341afc4c5c027d246a321e358b","impliedFormat":1},{"version":"c831a507ce1fa56d927c77b0296eaebbe63208dc2e10bea30ee19c19d3832ac9","impliedFormat":1},{"version":"0e0775f99d5750b8ea2409b6d5783ecb7465552176022512c4ab695e2cc07b25","impliedFormat":1},{"version":"998b22c2762b4c5dda982144f4273439478216601e1dbf607f8da50f90028302","impliedFormat":1},{"version":"de07059049dbb4d7b800fad4f5919c62c0c572d021f2cde9b4cb92d9d312464b","impliedFormat":1},{"version":"b006db5c3868f18e051c60c815dd8d18b42f0bd1f2a4732e8baab08e56443fa4","impliedFormat":1},{"version":"f6162b05c0a5b26d3446503c022652af632a803010319ff6c65ddb425c88c1da","impliedFormat":1},{"version":"ce99d9af9d4091b04b4c2266c06f38d7f39e5614616973e0d17f01a36212c516","impliedFormat":1},{"version":"f4349410e6586843ef78e2795d631a66a9b5a8496e07452948461643f6774753","impliedFormat":1},{"version":"afbf6dde412faa5825df13ab00b8eabe1358558603d6e4c34b4ff83c06128500","impliedFormat":1},{"version":"9468d74878264e4ed6214c0127326482d3d81d8b39c2ffb3ef0887348cfc116c","impliedFormat":1},{"version":"5d761b75b6780d20af311198f88e4a894243753acf28338ce7cc0cb1d5e3bfca","impliedFormat":1},{"version":"4c02021950d7f559417399582f74b4f23e7acf96bf4abfc8511ca9f349e7b090","impliedFormat":1},{"version":"f05da64b51a564bd57764011df409a699928b2b9e018a9692e06d5a3e761a8ae","impliedFormat":1},{"version":"448a1d960c3243442ffb6ddec7087a5dbd062a8b2fdbbc39f6ced3f5b7dd1cef","impliedFormat":1},{"version":"c01a88ada696e9f65a4dd8248bd9a568a3f1ce0c2eaa5e7f8696a2c3b3573654","impliedFormat":1},{"version":"6ca73337f9333cbe5e31c1e03fee42dfbdb119e7fdf991e8aa96767f4696d0b3","impliedFormat":1},{"version":"9235105279d1e63c87e3ea34fb6b20eb4968d7696c4783236a2d8ab5e924807f","impliedFormat":1},{"version":"fb3a41f5d7c41e4195119f98b0df0018e7e04a1b025d7b10ed82741f65c0493d","impliedFormat":1},{"version":"bf21257fb910b2a765ad8529cb457d0d9eb99d8d14ef01836bf04422c185f230","impliedFormat":1},{"version":"9dfbe916e48a8172cc0db07e20248214755205bbd16cd5bc0672dc2cbd80a429","impliedFormat":1},{"version":"cfb85bf0a694c3e0630400fdb2c1f135132b500c152aee6b9ae9d842637378f8","impliedFormat":1},{"version":"2067e20e971aec9f9c3b7a80aa3f2ce908fa690d29614956ab939d4137527d46","impliedFormat":1},{"version":"469bd9ff94e8ee2180eaa7be310e626022f4b97990e01fdee2cb681eadfca444","impliedFormat":1},{"version":"9199cfe666c63b59bfc7a0215ad7b834165e2c8678769aa29b6b15d4035dd874","impliedFormat":1},{"version":"75c20bb61d4944a90fd9fc4d79be814af84552497a30059d1f4a5979e338b576","impliedFormat":1},{"version":"e36d57187446a9b265d011815e80c5ac2d31cdd839e5dfed3cadbade9d63084d","impliedFormat":1},{"version":"ff94c04aacb366b85fa01b058ce27e3f2a26305e87a512b6472013f3951a7639","impliedFormat":1},{"version":"f28c4909885c804c93aabb9561ef520ff620576369eb310195a7a6bbb8d9e587","impliedFormat":1},{"version":"e971398a29ade533ddc2730c360a22672144389e077633fc950660f4c4d9d046","impliedFormat":1},{"version":"52677e8175f66b1d6b684e8249f7b12af8932267f0b2f363ab973fb94ee4d319","impliedFormat":1},{"version":"d1e84e4b4b53354c6333f50ae4337b96f1004f28875d3d7b3800cdf79b0ffd4c","impliedFormat":1},{"version":"a9f319a6a5287c95b72c37b461e0f70f490324cc4a55d71378e2a37f1ca67adc","impliedFormat":1},{"version":"df7c9a0919ac54bb69647b916261beffb40d84494f9cc3e68fc7927a79ccb64f","impliedFormat":1},{"version":"30a24fccfdf6a40249949b222a11c755421b9479bd68a96ee97413540443216b","impliedFormat":1},{"version":"da0ed328391d742978219a5ab07decbdcd353bbdbc87708a2176afa971056a3d","impliedFormat":1},{"version":"14a5746786128a83561f1d719290db89ed9b225e42959bbe0023112035a6e0a0","impliedFormat":1},{"version":"71db39385fc6c5eddb6cc70b1b68920b2aa06cd85ca4a95b1de585e127984881","impliedFormat":1},{"version":"c9f95e2f5326df254b2c867de54f7264763065fa4d29f5f9d10960d97352afcf","impliedFormat":1},{"version":"59e6446d76c9c7a1cf516435f942c5e122b3fa9c80d4962c4eeae63f3bb605af","impliedFormat":1},{"version":"ee28654c6c98fe6b359d34465dbe1f9798d1e7a6ed5ece29daf19de11cb8323e","impliedFormat":1},{"version":"68d524e37e75f230102cd0444befe3e17a8c85438060a552322e7e400519f2c3","impliedFormat":1},{"version":"282d6f2f2150a26e8c5cce93eaf68e829a8683171ba13e92ad7dc8b28a12c623","impliedFormat":1},{"version":"34b95fa727e92d0a2fbe45e37352127297aedd9af64e56dfb324ff1280517f3c","impliedFormat":1},{"version":"4d37c6842a01d7310940ed2d39cfd4a8d63e7676d1113070b3cd725131347844","impliedFormat":1},{"version":"38ccba9a0d7f301e4b590f7a52de8a8fb12e9edb1de6d7ede6a8843176abfd54","impliedFormat":1},{"version":"db4e72e734c0d11d2051dea52f678270eb423be4541e3c39ede40bd29e733484","impliedFormat":1},{"version":"b6fa5f1295afc4b3a9bbae107ea00d1fc37956f25b846338916cbb195515a4e2","impliedFormat":1},{"version":"4b3e07d081541bd9f0418c1963a44b02a65923b6de04d6ef7bfaab8e8b1087d7","impliedFormat":1},{"version":"438659c94886ae81435567673c83b61937048729da03385738a023174cbff051","impliedFormat":1},{"version":"63310e90fe40fb7a431b9ff640d54b70ef30d31b23a634890799569521cc2a02","impliedFormat":1},{"version":"911e8affa1bea9b54a8926ce39295e190ba3e5e36182c7808c3d657fbd77d705","impliedFormat":1},{"version":"02353129e38fd07cc487b5f822ac710ec117e43e479e9f9f8039418ed3291ff5","impliedFormat":1},{"version":"54bd44d1d220488406919d2ddbdb92cef690c8ebfe41d2cdc61a8aaf26d6396c","impliedFormat":1},{"version":"790d0cef4abbfedbde0ff29c9a1865d5ed8364e9e251e25bb13794d30c13ac4b","impliedFormat":1},{"version":"88f2b0ad065d1ff42736c1efeb0e14061b3091d9376c272672be3f27d167a152","impliedFormat":1},{"version":"81de941dc5851bd7ce1e8f81d4d31db1e035de774e571947f8d03b351fe9f764","impliedFormat":1},{"version":"fdc68f982f0c7b074e3787534a5137c3f9d746edc323efddde286931ceb9c954","impliedFormat":1},{"version":"be922b6a92064b78554dfbf46decbddf5a0b023f49a656a7865e17ab0bf710c8","impliedFormat":1},{"version":"609d27139ad9aa20641c466c993b2d8f8c413296ee814b1afd79f48bd809a0f6","impliedFormat":1},{"version":"176b071fba5783d15078411e7c0753d2a874dc0ba0bf334c402e358b59e78f54","affectsGlobalScope":true,"impliedFormat":1},{"version":"774d51ea5facd44ed191c2e420f2a0ab4da76a41905e8c1c3aa2a532ec340d97","impliedFormat":1},{"version":"2be23228f8822815f04418af4b3616f6c12d2e8310d3536537ca59c791fd71bd","impliedFormat":1},{"version":"3e9c9a37943e0f4c86e33e47c598a43f25117acf8fdf177e6ff5e0476e6d0cee","impliedFormat":1},{"version":"2c0b6ecefb1757ad6ce6d2414b3c268cb9092cff307f6794c75e27f7b1b3b358","impliedFormat":1},{"version":"10f2d3d9c642a1e734adad62f07866c3217b1f5f89f9f3f47d3fd6a295bef8d9","impliedFormat":1},{"version":"4894b371550ff623685722b8fc3064eec2a1353d0a4f7a4f46707b446d3cd607","impliedFormat":1},{"version":"1306e750b3d9089eddb926279035e88119bff73ba6d12bcd1ac3907eef2bc235","impliedFormat":1},{"version":"f97a6ead0f9c40bd2bf83cdae4aa47655aea300282afd44998180d9cf62b7d76","impliedFormat":1},{"version":"a5d1b10c57d14126c7a312e2bb28763c745a87c4f5c005ec6b9ad79aa16850ae","impliedFormat":1},{"version":"33b25938d78614b92778d270bde2c971ecd7f369ef6c990d13e247eb2c7882ad","impliedFormat":1},{"version":"ef325176a8c255a9a55bec7c23d6289c98b00ebfd67112bd4b915c679d721b1d","impliedFormat":1},{"version":"81c53ecba335a74d626d838f842eaa7cf84289776b413356bcd61560f07c9e51","impliedFormat":1},{"version":"47a102af679f68d61d7754dd8f133fab95c3cf7c2dc6674e70efd1b7b7c815ce","impliedFormat":1},{"version":"41931aa72d208139935cd9537c83679c6ca91fe69fd1bd8ec88bbe8e93fe2a2e","impliedFormat":1},{"version":"793014c8196d3044e2d425d7de6339e130a8f81136c5876e2e88e1b8279dbea5","impliedFormat":1},{"version":"7cfcb8c758cb502085d9128ba3ff999084cafd64b9b7c317f87fc85170d1282c","impliedFormat":1},{"version":"6d0b4092bc1fdd4843d9a4313b470b6b7773b5fb712545d6174fd4d703265ae3","impliedFormat":1},{"version":"b6e63e92b837071df07652d3f5632727214b713881c8416a133f7afa977d6e44","impliedFormat":1},{"version":"b09eefc95f09a9a9c61e4f2ed3c1e22069c703493f8e231bc76d3c6cf7ab1422","impliedFormat":1},{"version":"1b08cc33d8dedfa20adf4a779020ec36d494ab7ea503395c658c5e286a3b50e1","impliedFormat":1},{"version":"2c94d2217244dd31275ca5e404560c5c2105b5f06f8985d0f039f39caa1e9e30","impliedFormat":1},{"version":"e77d73e81f5824767db0df8bdb7b7c72cb1741d5fd74e099bfaa6369b8716491","impliedFormat":1},{"version":"077f88e83a13ea89300c26c39ca8ec3708bfd09a15464c71e2fd762708fbecea","impliedFormat":1},{"version":"4f023892bf3e27c71473a12d3b838cbab4350e1108a47194d570627664beb5d8","impliedFormat":1},{"version":"774a6eb661aad32b5f9b73bf9d08af7f9204a4bc67a583494caf43fa09fb2af9","impliedFormat":1},{"version":"0c3d92e5fac4a662f12b04c12ca741b4f34a1bf2824a470414322ddb61b350bb","impliedFormat":1},{"version":"f1085f9fe245cfdb8ebe8b8fe55bd81e9adcb3381f206aedb6e45793b6debb47","impliedFormat":1},{"version":"a4c05674bf833557741ebbcc3fa4a25ddd052e1c762a91037db94a2d7688ebbe","impliedFormat":1},{"version":"97006e8ef367bc2388ea292d7eb6cf471bd2b53d266642ef8284b66afe6d01bf","impliedFormat":1},{"version":"927c282fb88ca5c95a9aaea00175b56b0a6dc8728b246c9e0ec455de40d54fe9","impliedFormat":1},{"version":"7dac0babb2b88108fc5a5410aaf6fe6e59ef1e158e3b5283a990ea503ac3ea07","impliedFormat":1},{"version":"2f4620eeb98e884074a0ba924445a69b29654da70dcff2e3f84f58092741e6f7","impliedFormat":1},{"version":"669f1bc764b5fd840e483e123909aefdab8dc82c9aeadae194d75129fbba0b53","impliedFormat":1},{"version":"23769d3f0549de671a5ec795a8c2c6c4fd80c22af92348daa349073b65355fe8","impliedFormat":1},{"version":"774182677ec80bd5e58d287833ec21e02bcfccfdd20247780375691f201a0263","impliedFormat":1},{"version":"66bc333acb797d6c079d8830ef73bd4a34c4e1709e6a9d40bc20d5b92141d50d","impliedFormat":1},{"version":"92fe8e78ad5d9f9eca627b40cbc1fcfc095a230aba0911101d1c74f3ef77c32c","impliedFormat":1},{"version":"78dc76bd9afff09e5cea823d477657d25be9b0e1da7582df7df6e713abc6b7e0","impliedFormat":1},{"version":"651be876b03c705ac06a8cddd6ea90f635855d6312702a441e37b710d4291387","impliedFormat":1},{"version":"ae2d7f7735a249142233a5b9624baf7d1076c1b8e30bf6f9ed1f1f96641d368c","impliedFormat":1},{"version":"667514a0b45b9137a724df446646e49c6c5ff8e6c52b51faf7e7d97c07876339","impliedFormat":1},{"version":"d9b1e95de78d5ed6313c1f5514d71dae8e2dfd758df656912f2e40ffae72fdc3","impliedFormat":1},{"version":"24e34d276c6b1d5b38adc1a02ebca9d211154478cf875a3d175c12bd2473180d","impliedFormat":1},{"version":"2e7a903e7bad7e1053fd16172349f653b8e1f04b118fa6a0c94f03a05ce66ee8","impliedFormat":1},{"version":"a2b7e8befa2bec65d655a9205fe6ba2c6c313e8af050e0ec6878d667368b0370","impliedFormat":1},{"version":"1fdae95c93d7a258da7b02e50e7c4f4eb2041c4e8c86819c6bab35f1d3b33825","impliedFormat":1},{"version":"8c1eacab9cdc1a87e6142c96994b4679c81c9445557e14fdf3210352b7586209","impliedFormat":1},{"version":"05c811914dd75723518d9e11ab4e406bf49ea23b21ca4b0c014f529630cd6bfc","impliedFormat":1},{"version":"cfb373d580586808b221e2ec5555e381569bbcd65ed91abf6467235796e4011f","impliedFormat":1},{"version":"c01126bfe2cf99a27503a39cb9bd923760f43179322d9ee06640c2e329e00916","impliedFormat":1},{"version":"2b6cf5f7e4b87a9d212aa0b043a4e0203f75aa7a505457838c5c12ef3c5cccf8","impliedFormat":1},{"version":"e9214291673a507e06de72638d08cb77a5a83946ff371fe3118231fd14b66148","impliedFormat":1},{"version":"09949a01affc32445e16e0360269d2a7c3f925c2e67789934fbbaf5658669765","impliedFormat":1},{"version":"ddf55f92812e0c95b45ad70bb3b594c23a9741c3c805e916747b8b4d74682763","impliedFormat":1},{"version":"6ecc423e71318bafbd230e6059e082c377170dfc7e02fccfa600586f8604d452","impliedFormat":1},{"version":"772f9bdd2bf50c9c01b0506001545e9b878faa7394ad6e7d90b49b179a024584","impliedFormat":1},{"version":"ccb26251684230c0e18bdc9fdffa313a9f92ba9f1e1c590bf4638cd5ca08b3e5","impliedFormat":1},{"version":"7467736a77548887faa90a7d0e074459810a5db4bbc6de302a2be6c05287ccae","impliedFormat":1},{"version":"39504a2c1278ee4d0dc1a34e27c80e58b4c53c08c87e3a7fc924f18c936bebb5","impliedFormat":1},{"version":"cd1ccdd9fd7980d43dfede5d42ee3d18064baed98b136089cf7c8221d562f058","impliedFormat":1},{"version":"d60f9a4fd1e734e7b79517f02622426ea1000deb7d6549dfdece043353691a4e","impliedFormat":1},{"version":"ec05ccc3a2e35ef2800a5b5ed2eb2ad4cd004955447bebd86883ddf49625b400","impliedFormat":1},{"version":"403d28b5e5f8fcff795ac038902033ec5890143e950af45bd91a3ed231e8b59c","impliedFormat":1},{"version":"c73b59f91088c00886d44ca296d53a75c263c3bda31e3b2f37ceb137382282be","impliedFormat":1},{"version":"e7aa2c584edb0970cb4bb01eb10344200286055f9a22bc3dadcc5a1f9199af3e","impliedFormat":1},{"version":"bfeb476eb0049185cb94c2bfcadb3ce1190554bbcf170d2bf7c68ed9bb00458e","impliedFormat":1},{"version":"ae23a65a2b664ffe979b0a2a98842e10bdf3af67a356f14bbc9d77eb3ab13585","impliedFormat":1},{"version":"2db00053dff66774bc4216209acf094dd70d9dfd8211e409fc4bd8d10f7f66f6","impliedFormat":1},{"version":"eccf6ad2a8624329653896e8dbd03f30756cbd902a81b5d3942d6cf0e1a21575","impliedFormat":1},{"version":"1930c964051c04b4b5475702613cd5a27fcc2d33057aa946ff52bfca990dbc84","impliedFormat":1},{"version":"762992adfa3fbf42c0bce86caed3dc185786855b21a20265089770485e6aa9d3","impliedFormat":1},{"version":"1dbdb9a095f0619197019e870f3481a91e9281c77b0092a19ddfd1903066cd54","impliedFormat":1},{"version":"62463aa3d299ae0cdc5473d2ac32213a05753c3adce87a8801c6d2b114a64116","impliedFormat":1},{"version":"16d1ff93435f6e81a94d2993b290e708ed84131e23a70c5838d80ed77c006618","impliedFormat":1},{"version":"bd3e38cbf8108b661c591dcd03290d5cf2f2a8a1c74b045ba6b6bf4118b0a967","impliedFormat":1},{"version":"40abfc1faa2971acedb69bde8d8c4bbd4edce4af12f786e747dfb8298e6a05a1","impliedFormat":1},{"version":"4423628def6b7993f94afbddba7dd2b0668f85f6dac83c4b8f8a578ee95524f9","impliedFormat":1},{"version":"f689c0633e8c95f550d36af943d775f3fae3dac81a28714b45c7af0bbb76a980","impliedFormat":1},{"version":"fef736cfb404b4db9aa942f377dbbac6edb76d18aabd3b647713fa75da8939e9","impliedFormat":1},{"version":"0495afa06118083a11cd4da27acfd96a01b989aff0fc633823c5febe9668ef15","impliedFormat":1},{"version":"67feb4436be89f58ba899dec57f6e703bee1bb7205ba21ab50fca237f6753787","impliedFormat":1},{"version":"75849f5ead7684bf85ee9cce7e84683ed4332fa187f8ee0978ba9df96c5cee06","impliedFormat":1},{"version":"b5325ff5c9dc488bb9c87711faf2b73f639c45f190b81df88ed056807206958b","impliedFormat":1},{"version":"cc4f5179acd0a8efad722a44c4621d0da29169e03d78a452a27f73e1e7f27985","impliedFormat":1},{"version":"a743cf98667fdbb6989d9a7629d25a9824a484ce639bbf2740dc809341e6dbce","impliedFormat":1},{"version":"a16d79b3c260525e9637a0d224d8461305097bb255e4a53b4c3d2d08ec3463fa","impliedFormat":1},{"version":"bb732222ec0c3c23753dcfbafd78ea3eba480c068d5b5c28d6f12d5bc1516cf0","impliedFormat":1},{"version":"8fc97ef271771dc6f81a9c846d007ac4f0cb5779e3f441c1de54dfda5046fe7b","impliedFormat":1},{"version":"649bc33e15b742fdfe68157f0c08dde7f7355d027515c321ca076f13c2b207e2","impliedFormat":1},{"version":"7b36f5bce24167f089e4d3601e5fde14f0a233e1a0954df5ec56ae07f36e2219","impliedFormat":1},{"version":"1c225a18846203fafc4334658715b0d3fd3ee842c4cfd42e628a535eda17730d","impliedFormat":1},{"version":"7ce93da38595d1caf57452d57e0733474564c2b290459d34f6e9dcf66e2d8beb","impliedFormat":1},{"version":"d7b672c1c583e9e34ff6df2549d6a55d7ca3adaf72e6a05081ea9ee625dac59f","impliedFormat":1},{"version":"f3a2902e84ebdef6525ed6bf116387a1256ea9ae8eeb36c22f070b7c9ea4cf09","impliedFormat":1},{"version":"33bb0d96cea9782d701332e6b7390f8efae3af92fd3e2aa2ac45e4a610e705d6","impliedFormat":1},{"version":"ae3e98448468e46474d817b5ebe74db11ab22c2feb60e292d96ce1a4ee963623","impliedFormat":1},{"version":"f0a2fdee9e801ac9320a8660dd6b8a930bf8c5b658d390ae0feafdba8b633688","impliedFormat":1},{"version":"7beb7f04f6186bdac5e622d44e4cac38d9f2b9fcad984b10d3762e369524dd77","impliedFormat":1},{"version":"df09e59ace0cf7fd8e3c767b0b8f3d5b2212bd40d4e9dbf49a388526ead5e545","impliedFormat":99},{"version":"03fe713f6d3e69f47d4871545b2cd40e1f714b11e3945f6ab1e05361cad19192","impliedFormat":99},{"version":"25ea3ca113eb33c517ace8bd6555e8caf1c99d34dea7b3a48b074bdc5e7cc735","impliedFormat":99},{"version":"d5f83721da8ee61cd1620f0e4abc9d60453b4ef0b25945172bbd478ff6e3adcb","impliedFormat":99},{"version":"597536b4c8e7e309dd823f61206ff169ca90a3d68245343a5226a8d20f7a9ffd","impliedFormat":99},{"version":"cfed3c4118baa2ae69ec0da47b5fa722c49e5915c1cb7ffa8d5b53b678b641ca","impliedFormat":99},{"version":"3b5f9ed01add914f4bf2220544cdd4099583c2a72895b2ea495e9284be88b894","impliedFormat":99},{"version":"575425068684056c113b93ec316870eca50195835f04179630997e7b075164d4","impliedFormat":99},{"version":"aa0af7166f48f67765f96dc70c1d7f9f55ae264b96cadf5b6077b2bc0aa2b5dd","impliedFormat":99},{"version":"2fc9c7c6695b151ffd3ed667d6d793c2f656461978e840eff1d1350fc0bb1ebb","impliedFormat":99},{"version":"4d590f0e0b4abaf693f94d08b5c414928f2571aea5ac6efb97e4646e195dac48","impliedFormat":99},{"version":"bf1655c135bd654637f98f934f9a9eb4d6450194ca2f4968b79263608da59fdd","impliedFormat":99},{"version":"1ebe079cc9ed9ec4cd11d02c70f209caf16e9dd8e1e801a36648ce711bb3c404","impliedFormat":99},{"version":"b9a49ec04f7dac4bdcb928894d3c6bfc15a4ffee5f14d4b2bef69069de2b1d25","impliedFormat":99},{"version":"d2554dc921a526fc29600ef66da5d37577ce64557eaceebdb2b6170776051ffd","impliedFormat":99},{"version":"1fffc635777e6b7edc2caf5e8473fd161ba8fe5605ae84b64746a2a34045e6e3","impliedFormat":99},{"version":"f6f35852e407d4c04e578478e743c8101227037abd405ad71564e8430d4e4c1c","impliedFormat":99},{"version":"0e16f517285c960f284ff5367c239c24e20acfd3b3aced00d7842c7cd867898c","impliedFormat":99},{"version":"063929189f06ac3087123f98ce8736eea5c2a4cecbaa46c54b58118608fb8708","impliedFormat":99},{"version":"95e249a5d61382550bbf6341cb31a3114b0c10c232b0fbac97da74f83275dbab","impliedFormat":99},{"version":"34880c694bdb6f266bf484dbc60bd887890ab1c8d6807459fdf93f6ab0b0c792","impliedFormat":99},{"version":"d490c69a03b97298294b4d2159175f2f9b62a7dfcd81efc63ea3505c60fc0ac8","impliedFormat":99},{"version":"c0511c2a0a6ae726a66a0b25336fdc61c632c6c1505eb0bbbe1556055fd06919","impliedFormat":99},{"version":"bbd577f9d34a868d751e14a904401a6a026de322bd0f7cc7d51ecc585b57c6e6","impliedFormat":99},{"version":"e06f1dbc167fd37808d2f36aee8ef3bfae734d13fc4afcd9994072a30099df0b","impliedFormat":99},{"version":"7e0693b9604ff4fd358a2f21db90982fce11a4ff216eeae85e326f108d648d68","impliedFormat":99},{"version":"69d5a40440e664ec9493c61169414208472583f342346fb31dcbebad23c6a780","impliedFormat":99},{"version":"3d1efa91afa616c307864fa93f9e7777672bf90ac79c16936969efbc6629cbc1","impliedFormat":99},{"version":"722d99f854a33867a3397fe397924c0de326741e9d7830876481ccf87643a133","impliedFormat":99},{"version":"6ddebf5efb47d10d48d734f855b5cd13772de6d14b50779a17590afa30fcaefc","impliedFormat":99},{"version":"0c4e55d5ee917d3efca585b9eb138df9eb9cd38ec5a8ab258fc0e4fe8d54abd6","impliedFormat":99},{"version":"a41283ab6303ab1d21729da5723952e1b7d9d1bf379b9cce09132403f6f0f07d","impliedFormat":99},{"version":"1557f6fa35f1fc5d23911982761a7ddc4fbe9322eda575f6dadca8d5515e0cee","impliedFormat":99},{"version":"ded4768515ff723001ca99221ec8a7b751a4f90af8be95c885ec8a21efa548d4","impliedFormat":99},{"version":"86a6b6352a6a47fa8698f68119eb716ea951f541128d108382137e3d85900162","impliedFormat":99},{"version":"b9e6aa9de64cbd004d2c59ad79cff12a5d34406153456b869eae6b1d8f5bbb61","impliedFormat":99},{"version":"b864079910dbf273badc3367d21910e6f8887705defda6d51882084ef5b6ebb5","impliedFormat":99},{"version":"5e1fbca4c7648ff481cd7dda46ca8651239f4898bbed3d5066b8d6db0f60c555","impliedFormat":99},{"version":"0fd72d2cd43f9da04478aa6cbb922c27fda6b4a0ca7235aee8f6a933941bae92","impliedFormat":99},{"version":"28a5fc04797c6992303791a4b79ed99431bf2af90b77842948e3e8bc0f681d97","impliedFormat":99},{"version":"20a397ebeea68a193465caeb8f1b3225c49c6bdc4545a0ca6521fa684ef2fc5b","impliedFormat":99},{"version":"9edb51982e31faae66cef7076aacce409cab4637f0ec6e6851331fc87d9fa872","impliedFormat":99},{"version":"8a954a3b53672645d10a61e617272cd309bd7dc442f914427291ea8a2cb3c599","impliedFormat":99},{"version":"69e56ac933cbb0a62cbed3436a44068445460c3a246ae5b7b70e010dd3d8e0e5","impliedFormat":99},{"version":"dbafd3b17be2ca81493a6d6daf7afb6d04b83dd3b80c556ae5973e9a375aa6ff","impliedFormat":99},{"version":"8ea7264ce539f97f4720250a14695a1f82c3ac33ed66617991438cfb3d41947f","impliedFormat":99},{"version":"abf4fe7ebd8771a5c9d963754ae0c088c159e0e12ff77ed2e48f69d86ed50be5","impliedFormat":99},{"version":"050985cfd782bb62131bdc040cd444f65bbd35ca1b45e3eefde79ef713ddeb1b","impliedFormat":99},{"version":"cd935cd60191b79134684160cf08d5ab555512b7befd5f88b449681f7e037a3e","impliedFormat":99},{"version":"5e61341da5f93b211c8c11f6ca709a2dda33feded2cb3e1481d0b727aed23cd7","impliedFormat":99},{"version":"3df29fc79cceaa80012df2005f745c1b635a41dda0766ddd29ac8e078c4216f8","impliedFormat":99},{"version":"bb8aac29b972b3826d70b106373ed2600bfa8377ddd5672b0b5e256f361acfb9","impliedFormat":99},{"version":"721e984c6181cf2f1587226d11d2265f5bd1450da58e7598845ae15cee0465b4","impliedFormat":99},{"version":"bfa5dd71d432e277bbf3c44b3dd91db853fd833da21f43cc3a0a2dc324b7af47","impliedFormat":99},{"version":"987f95fafbf1296cd653459ac69b3a73cc4f7f37f38a1c769902bcaabd516452","impliedFormat":99},{"version":"5f3f4c3ea0ce78180d0482cfc808410092b441b727bee9a26d26ef09decb64c3","impliedFormat":99},{"version":"6b1c226b8c0d272c37948df86f81f100157b7cef9d97d2651f1d8e740a2be268","impliedFormat":99},{"version":"3e1e6a7a6e3d0615d046dd62062c557404c9e1c622dfbef4fa83d17c628e314a","impliedFormat":99},{"version":"ded6a76ae5fa6fc3f7f860a187f3b1c81b5bafb953be192501a937307dc739b9","impliedFormat":99},{"version":"8ee4717c4ad7d5976ab1bece799c68045b7b346e274d7774e86ff394cf867d47","impliedFormat":99},{"version":"a9e3299c6098d323bcd9787e2ac5e4d74457e5427c305ebd432e52ed13dd23c0","impliedFormat":99},{"version":"3b8ddc84907c11d89e5240f8299e87fe506a1c18764fb9d546b02f9e347f93e4","impliedFormat":99},{"version":"4b5186a238a3fbfeca1b14fe6b234b8bd5b93ac89a47984715f76f8919e29d96","impliedFormat":99},{"version":"dd693a36f441a1337e9a34b6da2cfdc53d7cd9dbf0d1cde334cab196c3e6f17a","impliedFormat":99},{"version":"e284b0d144003a25e3b7da92c55d80a085531c0c84a77a62f1a3e2bfe82454b1","impliedFormat":99},{"version":"e09a001b1588cde9f5e77560730c5ec6ea346ea09da2d65b3a02629e390d0923","impliedFormat":99},{"version":"77a38dc0e4afa289c6ceaf9121c7718fac9231904ff5f30c0c1201524fb25f23","impliedFormat":99},{"version":"2505ab6e616e35b2a63dcc8cafd3d6092c6e0109b206cec1be7d80cd450cfb7e","impliedFormat":99},{"version":"c2d66e86bd5f13ad098ddb98ab863bcf0d15b323cc9bce6ff56e20eb50648926","impliedFormat":99},{"version":"1959affb5ce54dd86a2bca9ba087da5a29fcd1849eb1710f1d6807512ac513d6","impliedFormat":99},{"version":"8ae1ca3c5186af2c3a6e979998c00c82a363d024ed26a8bcb84a6ef21878d4b4","impliedFormat":99},{"version":"05ec4ee3055f601ad3f932832a0b7fb5842fafa6d3a4f29b200c49e0c8d36bc4","impliedFormat":99},{"version":"cf0430d48488f45abbb7184e36b580c1933cc8078581c038583e16cdfa80863d","impliedFormat":99},{"version":"aeb0806490c71f371a75629556f469419997367aafa673ae2e86705652f39227","impliedFormat":99},{"version":"b445ce66b11750fb2172525591647d30b75ec8d003a93ee3efc12954ffb8d5ec","impliedFormat":99},{"version":"a36860808f7994a6ce2c965e11e7a971ae9b438422ffefe9471ed4f3ba3ef3f6","impliedFormat":99},{"version":"6335dfc1f7c285b25ca643890becb12d22fd24079624d91b660f31a3ef130f8a","impliedFormat":99},{"version":"e0e3a4eb638ceb6583ebfa8a83fb27d5ca98ba93ce00d396dd09d41630834a68","impliedFormat":99},{"version":"54927a5dc7fa2c1d7b8232c756d658d051f2c0620533c4048343e671d18c7983","impliedFormat":99},{"version":"8ff6d24bddad8f2bb8ac0ae129760dd1df427765f4f6199390347c0009ff9b48","impliedFormat":99},{"version":"25a0403b5a28416593fc09c3e5150e981c742afedf0b6e423f8a94f1351352c8","impliedFormat":99},{"version":"0db51b9c351d7c2313296e5879fbad8f20af8b9061885c8590ae0216ff6154a2","impliedFormat":99},{"version":"1c6454d7f733067337f1685a06c4981a78d1925ae0381bcd09f2c43b73755aaf","impliedFormat":99},{"version":"fa7cfbc437c87d93860a4a1304a12e8fa9a28a24695e1f4c36d266b4cbdf4e7b","impliedFormat":99},{"version":"4afe4410e572d10448fb1f7f254bc2eca329e00180e75529be8b22465718b2c4","impliedFormat":99},{"version":"6d57f0ab1e858b12895e1eca5e6f407a835c13038fadd5f85134740e6e32b613","impliedFormat":99},{"version":"5d6ef65ccf14b0d51af503adffccdbaa846848cf0fe82310816cf82eb364d107","impliedFormat":99},{"version":"397a17567b445fbeed01f58163c2b9667638ff815881f349cffec5ad30844905","impliedFormat":99},{"version":"4bbac0cdef9e2f41b2d70826633298df274436caf011a093bfc1bd57dd2269c1","impliedFormat":99},{"version":"38bc1e63328558fecd8e2c3f9159ded06a2fd86059b0a91e93f11aeebeb1f177","impliedFormat":99},{"version":"e4756baf25dba2f6660043ca4fc6e36ab8d31a0c34d507624d8a12cbe6ab9b30","impliedFormat":99},{"version":"4be799bfee1766047c11b3b5d371ca9e3993526d50c3e276e7cdb3943dd680a6","impliedFormat":99},{"version":"513f887178e2df3ea70340c20bffc633827c2f0a4e1340a4176eecb6d3c5a4e7","impliedFormat":99},{"version":"7b6ae8994d485350989d50cae27221f2d9929d60677b8c5de4ceb81baf480d3e","impliedFormat":99},{"version":"7adc87c8c1d3fdf85652694a636c6e032b7ea76335de7a110ffb215970d9b1f0","impliedFormat":99},{"version":"27f60ec60daf015ed0510587fd37d65818c085d47f320f03e2178e80ae1b96d2","impliedFormat":99},{"version":"69f868104a0f83fc97451cb143d1fdee65d6133442e585048983a8e27c6dd4be","impliedFormat":99},{"version":"a4fd1c983504d251988ad2e8629dc110228a591e1bc9f85e57b35895e8141cf3","impliedFormat":99},{"version":"8e82daa0bb799f366cfc646fcd65e507d3db4921082426dc45b78cedcb60f71c","impliedFormat":99},{"version":"a2f99636b48361b7e10c232cdeeb3aede976279f950b7f84e8b970471a0dc606","impliedFormat":99},{"version":"e31bcde9cdc47ff503a45bb8d68c38fd39039b06567c8017021f9116e31ecde2","impliedFormat":99},{"version":"bddecda3271cc5aaf904e94c2b65c23cb7528e27567ef31d1302bc8845374e56","impliedFormat":99},{"version":"23306c0e57b32fdf724bb0aba128d0023fd57b856490b1cd69bdc0de2acc334a","impliedFormat":99},{"version":"4df175087aed418f42fd5cf507c1f57f0972484cadbe0f6c38cabd0c6b3576ce","impliedFormat":99},{"version":"df51e368f1e65529fd132dd67c8312f21b644063ce7950e8b820905d70b28eb7","impliedFormat":99},{"version":"74d10836d7259d3a664ed517a3c8547003e1de056d85b8e324a11dbca522503e","impliedFormat":99},{"version":"b020142c9cb2c061e119c6ebc1712f2e66a68968657f4867332789688c706189","impliedFormat":99},{"version":"df08a61b7eb2b11b4e9c771cc3b538f3fc4260c170f8fd89110843323fac2ba2","impliedFormat":99},{"version":"acc1e28219b83d788ef0e28b8d7ff1f3a8fc7df6a49ec141402e044badc84108","impliedFormat":99},{"version":"3552e9ab64219d9d980f9406c354e620f04ca17944459d4b23c62d472d9be2dc","impliedFormat":99},{"version":"e9f94a086b52c2f522f2bc9ecf7539d7bffc390578cc41db9547005b93df5d88","impliedFormat":99},{"version":"66d87665eb8cc693d6ea61f7735ceacf60c373d7901b8fab3a283b843c45cf33","impliedFormat":99},{"version":"5c25d35c4bbeabb961925d2b114602191800afb4d4f164e45979dd2c83f965c2","impliedFormat":99},{"version":"8b989bf267ff6ef7a00f318e95794bcefd06cda44f3cffde905ca579d17acad5","impliedFormat":99},{"version":"f3983ffdad35bf9234e36a691bf959934b723134c070fa5dffccffe046009e2f","impliedFormat":99},{"version":"2d8c69bb71790264bc61c5858afcfd00d5bd7bca6c9c38185f07896661053790","impliedFormat":99},{"version":"0396db572d4384fab79c5ad3b2cf330f167496da87da0e61a3f55e803f0fcc4b","impliedFormat":99},{"version":"9eb195a59362d107cf8f1d92d704fcd034bd92796f72cf031ad0525d88e36d4f","impliedFormat":99},{"version":"b60a1aeffa207842414020d16c86854f99bebff51832478b00451c1770fc9708","impliedFormat":99},{"version":"178ae1eaa5cd24618fec31c62ee6b66f5f57d76b075d9d8b34cc0db5543c0fec","impliedFormat":99},{"version":"4f31b5dbde1dcb81687ef4e06c2636809f6a0517615876bc937fa266f42e87b4","impliedFormat":99},{"version":"33d7dde5b3614d1f000ab11f9be2cb0f032615b726ca8537afc272db0b522a7e","impliedFormat":99},{"version":"97b8ea7292ec9f0828af2d58952ea17497a73943eaa0a2dd3046a4e07a530c61","impliedFormat":99},{"version":"ebba07507741f7d53d05cbb59a8dea0b3b75aba278810b4d2696776f95b779e1","impliedFormat":99},{"version":"5c840682cf2d211808e4f0dc5cd32da409352e8b3d11d7e9ba25c92796932cdf","impliedFormat":99},{"version":"f278958ac0fde187482abb825e61be120427e8aecb42a9155f0144767a29a358","impliedFormat":99},{"version":"cf35b9aa3b45b2098ec7033db87d004913ac7bf1ce52c9c8154fa86477e9046e","impliedFormat":99},{"version":"8002100726ad65ae695ef88b091b9c8cb73e024eaf23b31d228a5a8ce19af31f","impliedFormat":99},{"version":"f7a7233cef5a86a5c2c5e4dab11b46e0688707bd066a80aa5249e6cd6e0211f6","impliedFormat":99},{"version":"354126b46c623665e6aac86b6deb693dc43499dbd71bf655aa5f6bcd7753dae0","impliedFormat":99},{"version":"1f1d4396e7a118ba9e1f49f290b29d0aa946e91fc8180909b1d64b2998b08953","impliedFormat":99},{"version":"534f6fde91eb366097dbf65174356c88c2726d513c55f0f60b2098fc3f6e87ab","impliedFormat":99},{"version":"bc8d8ff31066bbfb937d223a528d545abfba45a0a646b141e2a15dd1948026e9","impliedFormat":99},{"version":"8a03c390eab5e99798e3d24c1d86a9b0ee851d315c0cb7480b42f6a49338d694","impliedFormat":99},{"version":"46b25c26bc3816d779c0353b3c1f6b83eeda1030b99401472a4341a9ab94138f","impliedFormat":99},{"version":"0ba4da683fe4d459827bca4e9c2befc46b9fe589353a08d874440dc6b1119df9","impliedFormat":99},{"version":"a5ed548aea7fdd435b68149641d20d0c823ae4341afc4c5c027d246a321e358b","impliedFormat":99},{"version":"c831a507ce1fa56d927c77b0296eaebbe63208dc2e10bea30ee19c19d3832ac9","impliedFormat":99},{"version":"0e0775f99d5750b8ea2409b6d5783ecb7465552176022512c4ab695e2cc07b25","impliedFormat":99},{"version":"998b22c2762b4c5dda982144f4273439478216601e1dbf607f8da50f90028302","impliedFormat":99},{"version":"de07059049dbb4d7b800fad4f5919c62c0c572d021f2cde9b4cb92d9d312464b","impliedFormat":99},{"version":"b006db5c3868f18e051c60c815dd8d18b42f0bd1f2a4732e8baab08e56443fa4","impliedFormat":99},{"version":"f6162b05c0a5b26d3446503c022652af632a803010319ff6c65ddb425c88c1da","impliedFormat":99},{"version":"ce99d9af9d4091b04b4c2266c06f38d7f39e5614616973e0d17f01a36212c516","impliedFormat":99},{"version":"f4349410e6586843ef78e2795d631a66a9b5a8496e07452948461643f6774753","impliedFormat":99},{"version":"afbf6dde412faa5825df13ab00b8eabe1358558603d6e4c34b4ff83c06128500","impliedFormat":99},{"version":"9468d74878264e4ed6214c0127326482d3d81d8b39c2ffb3ef0887348cfc116c","impliedFormat":99},{"version":"5d761b75b6780d20af311198f88e4a894243753acf28338ce7cc0cb1d5e3bfca","impliedFormat":99},{"version":"4c02021950d7f559417399582f74b4f23e7acf96bf4abfc8511ca9f349e7b090","impliedFormat":99},{"version":"f05da64b51a564bd57764011df409a699928b2b9e018a9692e06d5a3e761a8ae","impliedFormat":99},{"version":"448a1d960c3243442ffb6ddec7087a5dbd062a8b2fdbbc39f6ced3f5b7dd1cef","impliedFormat":99},{"version":"c01a88ada696e9f65a4dd8248bd9a568a3f1ce0c2eaa5e7f8696a2c3b3573654","impliedFormat":99},{"version":"6ca73337f9333cbe5e31c1e03fee42dfbdb119e7fdf991e8aa96767f4696d0b3","impliedFormat":99},{"version":"9235105279d1e63c87e3ea34fb6b20eb4968d7696c4783236a2d8ab5e924807f","impliedFormat":99},{"version":"fb3a41f5d7c41e4195119f98b0df0018e7e04a1b025d7b10ed82741f65c0493d","impliedFormat":99},{"version":"bf21257fb910b2a765ad8529cb457d0d9eb99d8d14ef01836bf04422c185f230","impliedFormat":99},{"version":"9dfbe916e48a8172cc0db07e20248214755205bbd16cd5bc0672dc2cbd80a429","impliedFormat":99},{"version":"cfb85bf0a694c3e0630400fdb2c1f135132b500c152aee6b9ae9d842637378f8","impliedFormat":99},{"version":"2067e20e971aec9f9c3b7a80aa3f2ce908fa690d29614956ab939d4137527d46","impliedFormat":99},{"version":"469bd9ff94e8ee2180eaa7be310e626022f4b97990e01fdee2cb681eadfca444","impliedFormat":99},{"version":"9199cfe666c63b59bfc7a0215ad7b834165e2c8678769aa29b6b15d4035dd874","impliedFormat":99},{"version":"75c20bb61d4944a90fd9fc4d79be814af84552497a30059d1f4a5979e338b576","impliedFormat":99},{"version":"e36d57187446a9b265d011815e80c5ac2d31cdd839e5dfed3cadbade9d63084d","impliedFormat":99},{"version":"ff94c04aacb366b85fa01b058ce27e3f2a26305e87a512b6472013f3951a7639","impliedFormat":99},{"version":"f28c4909885c804c93aabb9561ef520ff620576369eb310195a7a6bbb8d9e587","impliedFormat":99},{"version":"e971398a29ade533ddc2730c360a22672144389e077633fc950660f4c4d9d046","impliedFormat":99},{"version":"52677e8175f66b1d6b684e8249f7b12af8932267f0b2f363ab973fb94ee4d319","impliedFormat":99},{"version":"d1e84e4b4b53354c6333f50ae4337b96f1004f28875d3d7b3800cdf79b0ffd4c","impliedFormat":99},{"version":"a9f319a6a5287c95b72c37b461e0f70f490324cc4a55d71378e2a37f1ca67adc","impliedFormat":99},{"version":"df7c9a0919ac54bb69647b916261beffb40d84494f9cc3e68fc7927a79ccb64f","impliedFormat":99},{"version":"30a24fccfdf6a40249949b222a11c755421b9479bd68a96ee97413540443216b","impliedFormat":99},{"version":"da0ed328391d742978219a5ab07decbdcd353bbdbc87708a2176afa971056a3d","impliedFormat":99},{"version":"14a5746786128a83561f1d719290db89ed9b225e42959bbe0023112035a6e0a0","impliedFormat":99},{"version":"71db39385fc6c5eddb6cc70b1b68920b2aa06cd85ca4a95b1de585e127984881","impliedFormat":99},{"version":"c9f95e2f5326df254b2c867de54f7264763065fa4d29f5f9d10960d97352afcf","impliedFormat":99},{"version":"59e6446d76c9c7a1cf516435f942c5e122b3fa9c80d4962c4eeae63f3bb605af","impliedFormat":99},{"version":"ee28654c6c98fe6b359d34465dbe1f9798d1e7a6ed5ece29daf19de11cb8323e","impliedFormat":99},{"version":"68d524e37e75f230102cd0444befe3e17a8c85438060a552322e7e400519f2c3","impliedFormat":99},{"version":"282d6f2f2150a26e8c5cce93eaf68e829a8683171ba13e92ad7dc8b28a12c623","impliedFormat":99},{"version":"34b95fa727e92d0a2fbe45e37352127297aedd9af64e56dfb324ff1280517f3c","impliedFormat":99},{"version":"4d37c6842a01d7310940ed2d39cfd4a8d63e7676d1113070b3cd725131347844","impliedFormat":99},{"version":"38ccba9a0d7f301e4b590f7a52de8a8fb12e9edb1de6d7ede6a8843176abfd54","impliedFormat":99},{"version":"db4e72e734c0d11d2051dea52f678270eb423be4541e3c39ede40bd29e733484","impliedFormat":99},{"version":"b6fa5f1295afc4b3a9bbae107ea00d1fc37956f25b846338916cbb195515a4e2","impliedFormat":99},{"version":"4b3e07d081541bd9f0418c1963a44b02a65923b6de04d6ef7bfaab8e8b1087d7","impliedFormat":99},{"version":"438659c94886ae81435567673c83b61937048729da03385738a023174cbff051","impliedFormat":99},{"version":"63310e90fe40fb7a431b9ff640d54b70ef30d31b23a634890799569521cc2a02","impliedFormat":99},{"version":"911e8affa1bea9b54a8926ce39295e190ba3e5e36182c7808c3d657fbd77d705","impliedFormat":99},{"version":"02353129e38fd07cc487b5f822ac710ec117e43e479e9f9f8039418ed3291ff5","impliedFormat":99},{"version":"54bd44d1d220488406919d2ddbdb92cef690c8ebfe41d2cdc61a8aaf26d6396c","impliedFormat":99},{"version":"790d0cef4abbfedbde0ff29c9a1865d5ed8364e9e251e25bb13794d30c13ac4b","impliedFormat":99},{"version":"88f2b0ad065d1ff42736c1efeb0e14061b3091d9376c272672be3f27d167a152","impliedFormat":99},{"version":"81de941dc5851bd7ce1e8f81d4d31db1e035de774e571947f8d03b351fe9f764","impliedFormat":99},{"version":"fdc68f982f0c7b074e3787534a5137c3f9d746edc323efddde286931ceb9c954","impliedFormat":99},{"version":"be922b6a92064b78554dfbf46decbddf5a0b023f49a656a7865e17ab0bf710c8","impliedFormat":99},{"version":"609d27139ad9aa20641c466c993b2d8f8c413296ee814b1afd79f48bd809a0f6","impliedFormat":99},{"version":"176b071fba5783d15078411e7c0753d2a874dc0ba0bf334c402e358b59e78f54","affectsGlobalScope":true,"impliedFormat":99},{"version":"774d51ea5facd44ed191c2e420f2a0ab4da76a41905e8c1c3aa2a532ec340d97","impliedFormat":99},{"version":"2be23228f8822815f04418af4b3616f6c12d2e8310d3536537ca59c791fd71bd","impliedFormat":99},{"version":"3e9c9a37943e0f4c86e33e47c598a43f25117acf8fdf177e6ff5e0476e6d0cee","impliedFormat":99},{"version":"2c0b6ecefb1757ad6ce6d2414b3c268cb9092cff307f6794c75e27f7b1b3b358","impliedFormat":99},{"version":"10f2d3d9c642a1e734adad62f07866c3217b1f5f89f9f3f47d3fd6a295bef8d9","impliedFormat":99},{"version":"4894b371550ff623685722b8fc3064eec2a1353d0a4f7a4f46707b446d3cd607","impliedFormat":99},{"version":"1306e750b3d9089eddb926279035e88119bff73ba6d12bcd1ac3907eef2bc235","impliedFormat":99},{"version":"f97a6ead0f9c40bd2bf83cdae4aa47655aea300282afd44998180d9cf62b7d76","impliedFormat":99},{"version":"a5d1b10c57d14126c7a312e2bb28763c745a87c4f5c005ec6b9ad79aa16850ae","impliedFormat":99},{"version":"33b25938d78614b92778d270bde2c971ecd7f369ef6c990d13e247eb2c7882ad","impliedFormat":99},{"version":"ef325176a8c255a9a55bec7c23d6289c98b00ebfd67112bd4b915c679d721b1d","impliedFormat":99},{"version":"81c53ecba335a74d626d838f842eaa7cf84289776b413356bcd61560f07c9e51","impliedFormat":99},{"version":"47a102af679f68d61d7754dd8f133fab95c3cf7c2dc6674e70efd1b7b7c815ce","impliedFormat":99},{"version":"41931aa72d208139935cd9537c83679c6ca91fe69fd1bd8ec88bbe8e93fe2a2e","impliedFormat":99},{"version":"793014c8196d3044e2d425d7de6339e130a8f81136c5876e2e88e1b8279dbea5","impliedFormat":99},{"version":"7cfcb8c758cb502085d9128ba3ff999084cafd64b9b7c317f87fc85170d1282c","impliedFormat":99},{"version":"6d0b4092bc1fdd4843d9a4313b470b6b7773b5fb712545d6174fd4d703265ae3","impliedFormat":99},{"version":"b6e63e92b837071df07652d3f5632727214b713881c8416a133f7afa977d6e44","impliedFormat":99},{"version":"b09eefc95f09a9a9c61e4f2ed3c1e22069c703493f8e231bc76d3c6cf7ab1422","impliedFormat":99},{"version":"1b08cc33d8dedfa20adf4a779020ec36d494ab7ea503395c658c5e286a3b50e1","impliedFormat":99},{"version":"2c94d2217244dd31275ca5e404560c5c2105b5f06f8985d0f039f39caa1e9e30","impliedFormat":99},{"version":"e77d73e81f5824767db0df8bdb7b7c72cb1741d5fd74e099bfaa6369b8716491","impliedFormat":99},{"version":"077f88e83a13ea89300c26c39ca8ec3708bfd09a15464c71e2fd762708fbecea","impliedFormat":99},{"version":"4f023892bf3e27c71473a12d3b838cbab4350e1108a47194d570627664beb5d8","impliedFormat":99},{"version":"774a6eb661aad32b5f9b73bf9d08af7f9204a4bc67a583494caf43fa09fb2af9","impliedFormat":99},{"version":"0c3d92e5fac4a662f12b04c12ca741b4f34a1bf2824a470414322ddb61b350bb","impliedFormat":99},{"version":"f1085f9fe245cfdb8ebe8b8fe55bd81e9adcb3381f206aedb6e45793b6debb47","impliedFormat":99},{"version":"a4c05674bf833557741ebbcc3fa4a25ddd052e1c762a91037db94a2d7688ebbe","impliedFormat":99},{"version":"97006e8ef367bc2388ea292d7eb6cf471bd2b53d266642ef8284b66afe6d01bf","impliedFormat":99},{"version":"927c282fb88ca5c95a9aaea00175b56b0a6dc8728b246c9e0ec455de40d54fe9","impliedFormat":99},{"version":"7dac0babb2b88108fc5a5410aaf6fe6e59ef1e158e3b5283a990ea503ac3ea07","impliedFormat":99},{"version":"2f4620eeb98e884074a0ba924445a69b29654da70dcff2e3f84f58092741e6f7","impliedFormat":99},{"version":"669f1bc764b5fd840e483e123909aefdab8dc82c9aeadae194d75129fbba0b53","impliedFormat":99},{"version":"23769d3f0549de671a5ec795a8c2c6c4fd80c22af92348daa349073b65355fe8","impliedFormat":99},{"version":"774182677ec80bd5e58d287833ec21e02bcfccfdd20247780375691f201a0263","impliedFormat":99},{"version":"66bc333acb797d6c079d8830ef73bd4a34c4e1709e6a9d40bc20d5b92141d50d","impliedFormat":99},{"version":"92fe8e78ad5d9f9eca627b40cbc1fcfc095a230aba0911101d1c74f3ef77c32c","impliedFormat":99},{"version":"78dc76bd9afff09e5cea823d477657d25be9b0e1da7582df7df6e713abc6b7e0","impliedFormat":99},{"version":"651be876b03c705ac06a8cddd6ea90f635855d6312702a441e37b710d4291387","impliedFormat":99},{"version":"ae2d7f7735a249142233a5b9624baf7d1076c1b8e30bf6f9ed1f1f96641d368c","impliedFormat":99},{"version":"667514a0b45b9137a724df446646e49c6c5ff8e6c52b51faf7e7d97c07876339","impliedFormat":99},{"version":"d9b1e95de78d5ed6313c1f5514d71dae8e2dfd758df656912f2e40ffae72fdc3","impliedFormat":99},{"version":"24e34d276c6b1d5b38adc1a02ebca9d211154478cf875a3d175c12bd2473180d","impliedFormat":99},{"version":"2e7a903e7bad7e1053fd16172349f653b8e1f04b118fa6a0c94f03a05ce66ee8","impliedFormat":99},{"version":"a2b7e8befa2bec65d655a9205fe6ba2c6c313e8af050e0ec6878d667368b0370","impliedFormat":99},{"version":"1fdae95c93d7a258da7b02e50e7c4f4eb2041c4e8c86819c6bab35f1d3b33825","impliedFormat":99},{"version":"8c1eacab9cdc1a87e6142c96994b4679c81c9445557e14fdf3210352b7586209","impliedFormat":99},{"version":"05c811914dd75723518d9e11ab4e406bf49ea23b21ca4b0c014f529630cd6bfc","impliedFormat":99},{"version":"cfb373d580586808b221e2ec5555e381569bbcd65ed91abf6467235796e4011f","impliedFormat":99},{"version":"c01126bfe2cf99a27503a39cb9bd923760f43179322d9ee06640c2e329e00916","impliedFormat":99},{"version":"2b6cf5f7e4b87a9d212aa0b043a4e0203f75aa7a505457838c5c12ef3c5cccf8","impliedFormat":99},{"version":"e9214291673a507e06de72638d08cb77a5a83946ff371fe3118231fd14b66148","impliedFormat":99},{"version":"09949a01affc32445e16e0360269d2a7c3f925c2e67789934fbbaf5658669765","impliedFormat":99},{"version":"ddf55f92812e0c95b45ad70bb3b594c23a9741c3c805e916747b8b4d74682763","impliedFormat":99},{"version":"5ec6ba1674cf73d6a2d42e8ec00ded92f0211a92ae1bf5b1af1dbd1eb84e6ffe","impliedFormat":1},{"version":"f60e3e3060207ac982da13363181fd7ee4beecc19a7c569f0d6bb034331066c2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"21ac4cf3f8d8c6e1201cb31f600be708c9a37867fc5c73b7ccf80560fae591c8","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"798367363a3274220cbed839b883fe2f52ba7197b25e8cb2ac59c1e1fd8af6b7","impliedFormat":1},{"version":"2636a309ed87d6876728d9aca846a76b372cf2a21a4fdf9940a82a2dd86687d0","impliedFormat":1},{"version":"7d0021e828e9649bff9ddaccc3a8f1cc373810822d444f88b3939fccd6ee8cb8","impliedFormat":1},{"version":"b607f744de5cbb2137eb48b65b66bc89c60e08fa8ad213eabfea6084abf9423b","impliedFormat":99},{"version":"380b919bfa0516118edaf25b99e45f855e7bc3fd75ce4163a1cfe4a666388804","impliedFormat":1},{"version":"40de86ced5175a6ffe84a52abe6ac59ac0efbc604a5975a8c6476c3ddc682ff1","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"5a0b15210129310cee9fa6af9200714bb4b12af4a04d890e15f34dbea1cf1852","impliedFormat":1},{"version":"0244119dbcbcf34faf3ffdae72dab1e9bc2bc9efc3c477b2240ffa94af3bca56","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"8b0b6a4c032a56d5651f7dd02ba3f05fbfe4131c4095093633cda3cae0991972","impliedFormat":1},{"version":"192a0c215bffe5e4ac7b9ff1e90e94bf4dfdad4f0f69a5ae07fccc36435ebb87","impliedFormat":1},{"version":"3ef8565e3d254583cced37534f161c31e3a8f341ff005c98b582c6d8c9274538","impliedFormat":1},{"version":"d7e42a3800e287d2a1af8479c7dd58c8663e80a01686cb89e0068be6c777d687","impliedFormat":1},{"version":"1098034333d3eb3c1d974435cacba9bd5a625711453412b3a514774fec7ca748","impliedFormat":1},{"version":"f2388b97b898a93d5a864e85627e3af8638695ebfa6d732ecd39d382824f0e63","impliedFormat":1},{"version":"73a3180fe69bf6e8d61f8fbbf969a3e4c9d19e1b3570768a281d371f85aa2dec","impliedFormat":1},{"version":"f477375e6f0bf2a638a71d4e7a3da8885e3a03f3e5350688541d136b10b762a6","impliedFormat":1},{"version":"a44d6ea4dc70c3d789e9cef3cc42b79c78d17d3ce07f5fd278a7e1cbe824da56","impliedFormat":1},{"version":"55cd8cbc22fe648429a787e16a9cd2dc501a2aafd28c00254ad120ef68a581c0","impliedFormat":1},{"version":"ba4900e9d6f9795a72e8f5ca13c18861821a3fc3ae7858acb0a3366091a47afb","impliedFormat":1},{"version":"7778e2cc5f74ef263a880159aa7fa67254d6232e94dd03429a75597a622537a7","impliedFormat":1},{"version":"8e06a1ef49502a62039eeb927a1bd7561b0bce48bd423a929e2e478fd827c273","impliedFormat":1},{"version":"7ec3d0b061da85d6ff50c337e3248a02a72088462739d88f33b9337dba488c4f","impliedFormat":1},{"version":"2f554c6798b731fc39ff4e3d86aadc932fdeaa063e3cbab025623ff5653c0031","impliedFormat":1},{"version":"fe4613c6c0d23edc04cd8585bdd86bc7337dc6265fb52037d11ca19eeb5e5aaf","impliedFormat":1},{"version":"53b26fbee1a21a6403cf4625d0e501a966b9ccf735754b854366cee8984b711c","impliedFormat":1},{"version":"9ff247206ec5dffdfadddfded2c9d9ad5f714821bb56760be40ed89121f192f4","impliedFormat":1},{"version":"98c6ddd06251098b3302e7094cbc9ab54a2ea88069f5416b7d0b8daee2ff8aa2","impliedFormat":1},{"version":"8c59d8256086ed17676139ee43c1155673e357ab956fb9d00711a7cac73e059d","impliedFormat":1},{"version":"cfe88132f67aa055a3f49d59b01585fa8d890f5a66a0a13bb71973d57573eee7","impliedFormat":1},{"version":"53ce488a97f0b50686ade64252f60a1e491591dd7324f017b86d78239bd232ca","impliedFormat":1},{"version":"50fd11b764194f06977c162c37e5a70bcf0d3579bf82dd4de4eee3ac68d0f82f","impliedFormat":1},{"version":"e0ceb647dcdf6b27fd37e8b0406c7eafb8adfc99414837f3c9bfd28ffed6150a","impliedFormat":1},{"version":"99579aa074ed298e7a3d6a47e68f0cd099e92411212d5081ce88344a5b1b528d","impliedFormat":1},{"version":"096e4ddaa8f0aa8b0ceadd6ab13c3fab53e8a0280678c405160341332eca3cd7","impliedFormat":1},{"version":"415b55892d813a74be51742edd777bbced1f1417848627bf71725171b5325133","impliedFormat":1},{"version":"942ab34f62ac3f3d20014615b6442b6dc51815e30a878ebc390dd70e0dec63bf","impliedFormat":1},{"version":"7a671bf8b4ad81b8b8aea76213ca31b8a5de4ba39490fbdee249fc5ba974a622","impliedFormat":1},{"version":"8e07f13fb0f67e12863b096734f004e14c5ebfd34a524ed4c863c80354c25a44","impliedFormat":1},{"version":"9faa56e38ed5637228530065a9bab19a4dc5a326fbdd1c99e73a310cfed4fcde","impliedFormat":1},{"version":"7d4ad85174f559d8e6ed28a5459aebfc0a7b0872f7775ca147c551e7765e3285","impliedFormat":1},{"version":"d422f0c340060a53cb56d0db24dd170e31e236a808130ab106f7ab2c846f1cdb","impliedFormat":1},{"version":"424403ef35c4c97a7f00ea85f4a5e2f088659c731e75dbe0c546137cb64ef8d8","impliedFormat":1},{"version":"16900e9a60518461d7889be8efeca3fe2cbcd3f6ce6dee70fea81dfbf8990a76","impliedFormat":1},{"version":"6daf17b3bd9499bd0cc1733ab227267d48cd0145ed9967c983ccb8f52eb72d6e","impliedFormat":1},{"version":"e4177e6220d0fef2500432c723dbd2eb9a27dcb491344e6b342be58cc1379ec0","impliedFormat":1},{"version":"ddc62031f48165334486ad1943a1e4ed40c15c94335697cb1e1fd19a182e3102","impliedFormat":1},{"version":"b3f4224eb155d7d13eb377ef40baa1f158f4637aa6de6297dfeeacefd6247476","impliedFormat":1},{"version":"4a168e11fe0f46918721d2f6fcdb676333395736371db1c113ae30b6fde9ccd2","impliedFormat":1},{"version":"5b0a75a5cced0bed0d733bde2da0bbb5d8c8c83d3073444ae52df5f16aefb6ab","impliedFormat":1},{"version":"ef2c1585cad462bdf65f2640e7bcd75cd0dbc45bae297e75072e11fe3db017fa","impliedFormat":1},{"version":"ef809928a4085de826f5b0c84175a56d32dd353856f5b9866d78b8419f8ea9bc","impliedFormat":1},{"version":"6f6eadb32844b0ec7b322293b011316486894f110443197c4c9fbcba01b3b2fa","impliedFormat":1},{"version":"a51e08f41e3e948c287268a275bfe652856a10f68ddd2bf3e3aaf5b8cdb9ef85","impliedFormat":1},{"version":"862f7d760ef37f0ae2c17de82e5fbf336b37d5c1b0dcf39dcd5468f90a7fdd54","impliedFormat":1},{"version":"af48a76b75041e2b3e7bd8eed786c07f39ea896bb2ff165e27e18208d09b8bee","impliedFormat":1},{"version":"cb524ec077f3963e13e85747c6b53fbdf6bf407c84ca1873c6e43da1e96bee6d","impliedFormat":1},{"version":"deb092bc337b2cb0a1b14f3d43f56bc663e1447694e6d479d6df8296bdd452d6","impliedFormat":1},{"version":"041bc1c3620322cb6152183857601707ef6626e9d99f736e8780533689fb1bf9","impliedFormat":1},{"version":"22bd7c75de7d68e075975bf1123de5bccecfd06688afff2e2022b4c70bfc91c3","impliedFormat":1},{"version":"128e7c2ffd37aa29e05367400d718b0e4770cefb1e658d8783ec80a16bc0643a","impliedFormat":1},{"version":"076ac4f2d642c473fa7f01c8c1b7b4ef58f921130174d9cf78430651f44c43ec","impliedFormat":1},{"version":"396c1e5a39706999ec8cc582916e05fcb4f901631d2c192c1292e95089a494d9","impliedFormat":1},{"version":"89df75d28f34fc698fe261f9489125b4e5828fbd62d863bbe93373d3ed995056","impliedFormat":1},{"version":"8ccf5843249a042f4553a308816fe8a03aa423e55544637757d0cfa338bb5186","impliedFormat":1},{"version":"93b44aa4a7b27ba57d9e2bad6fb7943956de85c5cc330d2c3e30cd25b4583d44","impliedFormat":1},{"version":"a0c6216075f54cafdfa90412596b165ff85e2cadd319c49557cc8410f487b77c","impliedFormat":1},{"version":"3c359d811ec0097cba00fb2afd844b125a2ddf4cad88afaf864e88c8d3d358bd","impliedFormat":1},{"version":"3c0b38e8bf11bf3ab87b5116ae8e7b2cad0147b1c80f2b77989dea6f0b93e024","impliedFormat":1},{"version":"8df06e1cd5bb3bf31529cc0db74fa2e57f7de1f6042726679eb8bc1f57083a99","impliedFormat":1},{"version":"d62f09256941e92a95b78ae2267e4cf5ff2ca8915d62b9561b1bc85af1baf428","impliedFormat":1},{"version":"e6223b7263dd7a49f4691bf8df2b1e69f764fb46972937e6f9b28538d050b1ba","impliedFormat":1},{"version":"d9b59eb4e79a0f7a144ee837afb3f1afbc4dab031e49666067a2b5be94b36bd4","impliedFormat":1},{"version":"1db014db736a09668e0c0576585174dbcfd6471bb5e2d79f151a241e0d18d66b","impliedFormat":1},{"version":"8a153d30edde9cefd102e5523b5a9673c298fc7cf7af5173ae946cbb8dd48f11","impliedFormat":1},{"version":"abaaf8d606990f505ee5f76d0b45a44df60886a7d470820fcfb2c06eafa99659","impliedFormat":1},{"version":"51a66bfa412057e786a712733107547ceb6f539061f5bf1c6e5a96e4ccf4f83c","impliedFormat":1},{"version":"d92a80c2c05cf974704088f9da904fe5eadc0b3ad49ddd1ef70ca8028b5adda1","impliedFormat":1},{"version":"fbd7450f20b4486c54f8a90486c395b14f76da66ba30a7d83590e199848f0660","impliedFormat":1},{"version":"ece5b0e45c865645ab65880854899a5422a0b76ada7baa49300c76d38a530ee1","impliedFormat":1},{"version":"62d89ac385aeab821e2d55b4f9a23a277d44f33c67fefe4859c17b80fdb397ea","impliedFormat":1},{"version":"f4dee11887c5564886026263c6ee65c0babc971b2b8848d85c35927af25da827","impliedFormat":1},{"version":"fb8dd49a4cd6d802be4554fbab193bb06e2035905779777f32326cb57cf6a2c2","impliedFormat":1},{"version":"e403ecdfba83013b5eb0e648a92ce182bff2a45ccb81db3035a69081563c2830","impliedFormat":1},{"version":"82d3e00d56a71fc169f3cf9ec5f5ffcc92f6c0e67d4dfc130dafe9f1886d5515","impliedFormat":1},{"version":"b8d57effce2d49a5493debbd8c644e8d52fbe66e2c6d451371375ef5f7bccb8e","impliedFormat":1},{"version":"9963d9857df2df335d1232a12eccbe5c777537a244f4b39406b27bf4736202f6","impliedFormat":1},{"version":"1b33478647aa1b771314745807397002a410c746480e9447db959110999873ce","impliedFormat":1},{"version":"b8d58ef4128a6e8e4b80803e5b67b2aaf1436c133ce39e514b9c004e21b2867e","impliedFormat":1},{"version":"7e6a96b383da9f5acb848bb9dedb9ac8489df7cec46bbf26aeaed2610f709078","impliedFormat":1},{"version":"9fac6ebf3c60ced53dd21def30a679ec225fc3ff4b8d66b86326c285a4eebb5a","impliedFormat":1},{"version":"8cb83cb98c460cd716d2a98b64eb1a07a3a65c7362436550e02f5c2d212871d1","impliedFormat":1},{"version":"07bc8a3551e39e70c38e7293b1a09916867d728043e352b119f951742cb91624","impliedFormat":1},{"version":"e47adc2176f43c617c0ab47f2d9b2bb1706d9e0669bf349a30c3fe09ddd63261","impliedFormat":1},{"version":"7fec79dfd7319fec7456b1b53134edb54c411ba493a0aef350eee75a4f223eeb","impliedFormat":1},{"version":"189c489705bb96a308dcde9b3336011d08bfbca568bcaf5d5d55c05468e9de7a","impliedFormat":1},{"version":"98f4b1074567341764b580bf14c5aabe82a4390d11553780814f7e932970a6f7","impliedFormat":1},{"version":"1dd24cbf39199100fbe2f3dbd1c7203c240c41d95f66301ecc7650ae77875be1","impliedFormat":1},{"version":"2e252235037a2cd8feebfbf74aa460f783e5d423895d13f29a934d7655a1f8be","impliedFormat":1},{"version":"763f4ac187891a6d71ae8821f45eef7ff915b5d687233349e2c8a76c22b3bf2a","impliedFormat":1},{"version":"b6e995b5ef6661f5636ff738e67e4ec90150768ef119ad74b473c404304408a1","impliedFormat":1},{"version":"5d470930bf6142d7cbda81c157869024527dc7911ba55d90b8387ef6e1585aa1","impliedFormat":1},{"version":"074483fdbf20b30bd450e54e6892e96ea093430c313e61be5fdfe51588baa2d6","impliedFormat":1},{"version":"b7e6a6a3495301360edb9e1474702db73d18be7803b3f5c6c05571212acccd16","impliedFormat":1},{"version":"aa7527285c94043f21baf6e337bc60a92c20b6efaa90859473f6476954ac5f79","impliedFormat":1},{"version":"dd3be6d9dcd79e46d192175a756546630f2dc89dab28073823c936557b977f26","impliedFormat":1},{"version":"8d0566152618a1da6536c75a5659c139522d67c63a9ae27e8228d76ab0420584","impliedFormat":1},{"version":"ba06bf784edafe0db0e2bd1f6ecf3465b81f6b1819871bf190a0e0137b5b7f18","impliedFormat":1},{"version":"a0500233cb989bcb78f5f1a81f51eabc06b5c39e3042c560a7489f022f1f55a3","impliedFormat":1},{"version":"220508b3fb6b773f49d8fb0765b04f90ef15caacf0f3d260e3412ed38f71ef09","impliedFormat":1},{"version":"1ad113089ad5c188fec4c9a339cb53d1bcbb65682407d6937557bb23a6e1d4e5","impliedFormat":1},{"version":"e56427c055602078cbf0e58e815960541136388f4fc62554813575508def98b6","impliedFormat":1},{"version":"1f58b0676a80db38df1ce19d15360c20ce9e983b35298a5d0b4aa4eb4fb67e0f","impliedFormat":1},{"version":"3d67e7eb73c6955ee27f1d845cae88923f75c8b0830d4b5440eea2339958e8ec","impliedFormat":1},{"version":"11fec302d58b56033ab07290a3abc29e9908e29d504db9468544b15c4cd7670d","impliedFormat":1},{"version":"c66d6817c931633650edf19a8644eea61aeeb84190c7219911cefa8ddea8bd9a","impliedFormat":1},{"version":"ab1359707e4fc610c5f37f1488063af65cda3badca6b692d44b95e8380e0f6c2","impliedFormat":1},{"version":"37deda160549729287645b3769cf126b0a17e7e2218737352676705a01d5957e","impliedFormat":1},{"version":"d80ffdd55e7f4bc69cde66933582b8592d3736d3b0d1d8cc63995a7b2bcca579","impliedFormat":1},{"version":"c9b71952b2178e8737b63079dba30e1b29872240b122905cbaba756cb60b32f5","impliedFormat":1},{"version":"b596585338b0d870f0e19e6b6bcbf024f76328f2c4f4e59745714e38ee9b0582","impliedFormat":1},{"version":"e6717fc103dfa1635947bf2b41161b5e4f2fabbcaf555754cc1b4340ec4ca587","impliedFormat":1},{"version":"c36186d7bdf1f525b7685ee5bf639e4b157b1e803a70c25f234d4762496f771f","impliedFormat":1},{"version":"026726932a4964341ab8544f12b912c8dfaa388d2936b71cc3eca0cffb49cc1d","impliedFormat":1},{"version":"83188d037c81bd27076218934ba9e1742ddb69cd8cc64cdb8a554078de38eb12","impliedFormat":1},{"version":"7d82f2d6a89f07c46c7e3e9071ab890124f95931d9c999ba8f865fa6ef6cbf72","impliedFormat":1},{"version":"4fc523037d14d9bb6ddb586621a93dd05b6c6d8d59919a40c436ca3ac29d9716","impliedFormat":1},{"version":"569e762cf47aafdad508360a443c6c757e56c61db3b652b65458a7d168d139c4","impliedFormat":1},{"version":"02ed2766d79a00719ac3cc77851d54bd7197c1b12085ea12126bc2a65068223e","impliedFormat":1},{"version":"4b84373e192b7e0f8569b65eb16857098a6ee279b75d49223db2a751fdd7efde","impliedFormat":1},{"version":"5aeea312cd1d3cc5d72fc8a9c964439d771bdf41d9cce46667471b896b997473","impliedFormat":1},{"version":"cfa7bf135cafc5aad7cf544bc1cebf65a1fdb4373223cc85ea7d7196e18be151","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"f2c4a36eb216aadb0d9c79862a31b922ccfa1eaaa38d2124cc9192d40eda4779","impliedFormat":1},{"version":"cb5bb1db16ff4b534f56f7741e7ffd0a007ce36d387a377d4c196036e0932423","impliedFormat":1},{"version":"25be1eb939c9c63242c7a45446edb20c40541da967f43f1aa6a00ed53c0552db","impliedFormat":1},{"version":"08c2bb524b8ed271f194e1c7cc6ad0bcc773f596c41f68a207d0ec02c9727060","impliedFormat":1},{"version":"012b69bc8a16a21aa0863502339c49258c579723f9e7a54faa5f0d5c2b1ae1b7","impliedFormat":1},{"version":"29ad73d9e365d7b046f3168c6a510477bfe30d84a71cd7eb2f0e555b1d63f5f6","impliedFormat":1},{"version":"d99e9f5aa43397599fe824e38c33d13d3a9e19198806a4363114bd7ac58b29cc","impliedFormat":1},{"version":"440099416057789b14f85af057d4924915f27043399c10d4ca67409d94b963cf","impliedFormat":1},{"version":"ac44995fc7d0781d77927bae7dd41a31f0309e695fd2694b175c0ce3bc4b3b50","impliedFormat":1},{"version":"0c1f802f7a60ca8084e5188ac7952accdfc00f39ded3ebbbd3cdcc9da51b9a7b","impliedFormat":1},{"version":"a32e3fc530d8d1a18bf54678d8d55714827a50c9fabdd4ede7155a56be7d1dcb","impliedFormat":1},{"version":"14ecfc29e0c44ad4c5e50f9b597492cd8f45a2a635db8b5fe911a5da83e26cf8","impliedFormat":1},{"version":"06e9dc3f7549e194e0ed6e46e4ac52dee84bb5973f1e96edc2adff83ff6e6e5f","impliedFormat":1},{"version":"c2f041fe0e7ae2d5a19c477d19e8ec13de3d65ef45e442fa081cf6098cdcbe2d","impliedFormat":1},{"version":"0cef678147928ef223ff7f2aae3442cc9f4e9996956e9ac92434e626d0e147f8","impliedFormat":1},{"version":"198ae766bb698feb66d3188cfce59fb33696c951b10f901aa3fc3db4847ce76a","impliedFormat":1},{"version":"6dc488fd3d01e4269f0492b3e0ee7961eec79f4fc3ae997c7d28cde0572dbd91","impliedFormat":1},{"version":"a09b706f16bda9372761bd70cf59814b6f0a0c2970d62a5b2976e2fd157b920f","impliedFormat":1},{"version":"70da4bfde55d1ec74e3aa7635eae741f81ced44d3c344e2d299e677404570ca9","impliedFormat":1},{"version":"bf4f6b0d2ae8d11dc940c20891f9a4a558be906a530b9d9a8ff1032afa1962cd","impliedFormat":1},{"version":"9975431639f84750a914333bd3bfa9af47f86f54edbaa975617f196482cfee31","impliedFormat":1},{"version":"70a5cb56f988602271e772c65cb6735039148d5e90a4c270e5806f59fc51d3a0","impliedFormat":1},{"version":"e083384623f90cfa7e8d2aa7efe78c51095a04ad51d1f82c3e4052689666895d","impliedFormat":1},{"version":"953cbf62815703fa9970c9cfec3c8d033da04a90c2409af6070dcc6858cf6b98","impliedFormat":1},{"version":"68065ce3af3ef8599af8338068cf336be35249eff281ee393186a0ef40db3abf","impliedFormat":1},{"version":"29723e0bc48036a127c3b8874f3abe9b695c56103f685f2b817fc532b8995e33","impliedFormat":1},{"version":"991cf4ed946cdf4c140ccaad45c61fc36a25b238a8fa95af51e93cb20c4b0503","impliedFormat":1},{"version":"81ef252ff5df76bccf7863bb355ccbb8af69f7d1064b3ef87b2b01c30fb2c1f4","impliedFormat":1},{"version":"0f17f5f14a5f53e5709404b5b59fe816eaad15a469412b73330e6f69834234e0","impliedFormat":1},{"version":"01edea77be9c2bef3a5f3fc46324c5e420e5bd72b499c5dec217c91866be5a99","impliedFormat":1},{"version":"39209d2b85d238810ef19ab3905c9498918343bc8f72a1dcae7fc0b08270d9a0","impliedFormat":1},{"version":"92a130d875262e78c581f98faa07c62f4510885df6d98213c72f3b83a1be93c1","impliedFormat":1},{"version":"367b818a25afccdbddf932a62a02012869f59fe66d359ff4aca78a7c2bb680aa","impliedFormat":1},{"version":"0aa14ffe353b8bab88046e64a92efa5cd039f095759fe884d188702956e2cba2","impliedFormat":1},{"version":"68d3eee1d509f45625e39ba325a72c6ce1d2116e3d5c3a40f513472e66622e02","impliedFormat":1},{"version":"4e5f1234308de112f09920e0a0b99f35a9780b3abbc13a84445f32a490d0bb87","impliedFormat":1},{"version":"9ac0e5aea87c4a1d37b4677145e9a75bc8e13bf887bd1148a4acb21ab7398d00","impliedFormat":1},{"version":"625b802ecd18feb6a9d69ef8ef58d6c08c9c9022b8105cdeaa3fc77acaab5667","impliedFormat":1},{"version":"2ac33d7f6999e0fb363d1e483d80f087d3e7d712ff6fcc2b4f7b18b5dab92f37","impliedFormat":1},{"version":"195749d135be639001a554e4b4025b66b3c5c627d90b68266c14399bde120cec","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},{"version":"cb5eaaa2a079305b1c5344af739b29c479746f7a7aefffc7175d23d8b7c8dbb0","impliedFormat":1},{"version":"bd324dccada40f2c94aaa1ebc82b11ce3927b7a2fe74a5ab92b431d495a86e6f","impliedFormat":1},{"version":"56749bf8b557c4c76181b2fd87e41bde2b67843303ae2eabb299623897d704d6","impliedFormat":1},{"version":"5a6fbec8c8e62c37e9685a91a6ef0f6ecaddb1ee90f7b2c2b71b454b40a0d9a6","impliedFormat":1},{"version":"e7435f2f56c50688250f3b6ef99d8f3a1443f4e3d65b4526dfb31dfd4ba532f8","impliedFormat":1},{"version":"51a674644ed5a181ec1497c1b4aa6f8cfcbe3af5481bdb641c1b5a498bcb6f3c","impliedFormat":1},{"version":"33b7f4106cf45ae7ccbb95acd551e9a5cd3c27f598d48216bda84213b8ae0c7e","impliedFormat":1},{"version":"176d6f604b228f727afb8e96fd6ff78c7ca38102e07acfb86a0034d8f8a2064a","impliedFormat":1},{"version":"1b1a02c54361b8c222392054648a2137fc5983ad5680134a653b1d9f655fe43d","impliedFormat":1},{"version":"8bcb884d06860a129dbffa3500d51116d9d1040bb3bf1c9762eb2f1e7fd5c85c","impliedFormat":1},{"version":"e55c0f31407e1e4eee10994001a4f570e1817897a707655f0bbe4d4a66920e9e","impliedFormat":1},{"version":"a37c2194c586faa8979f50a5c5ca165b0903d31ee62a9fe65e4494aa099712c0","impliedFormat":1},{"version":"6602339ddc9cd7e54261bda0e70fb356d9cdc10e3ec7feb5fa28982f8a4d9e34","impliedFormat":1},{"version":"7ffaa736b8a04b0b8af66092da536f71ef13a5ef0428c7711f32b94b68f7c8c8","impliedFormat":1},{"version":"7b4930d666bbe5d10a19fcc8f60cfa392d3ad3383b7f61e979881d2c251bc895","impliedFormat":1},{"version":"46342f04405a2be3fbfb5e38fe3411325769f14482b8cd48077f2d14b64abcfb","impliedFormat":1},{"version":"8fa675c4f44e6020328cf85fdf25419300f35d591b4f56f56e00f9d52b6fbb3b","impliedFormat":1},{"version":"ba98f23160cfa6b47ee8072b8f54201f21a1ee9addc2ef461ebadf559fe5c43a","impliedFormat":1},{"version":"45a4591b53459e21217dc9803367a651e5a1c30358a015f27de0b3e719db816b","impliedFormat":1},{"version":"9ef22bee37885193b9fae7f4cad9502542c12c7fe16afe61e826cdd822643d84","impliedFormat":1},{"version":"b0451895b894c102eed19d50bd5fcb3afd116097f77a7d83625624fafcca8939","impliedFormat":1},{"version":"bce17120b679ff4f1be70f5fe5c56044e07ed45f1e555db6486c6ded8e1da1c8","impliedFormat":1},{"version":"7590477bfa2e309e677ff7f31cb466f377fcd0e10a72950439c3203175309958","impliedFormat":1},{"version":"3f9ebd554335d2c4c4e7dc67af342d37dc8f2938afa64605d8a93236022cc8a5","impliedFormat":1},{"version":"1c077c9f6c0bc02a36207994a6e92a8fbf72d017c4567f640b52bf32984d2392","impliedFormat":1},{"version":"600b42323925b32902b17563654405968aa12ee39e665f83987b7759224cc317","impliedFormat":1},{"version":"32c8f85f6b4e145537dfe61b94ddd98b47dbdd1d37dc4b7042a8d969cd63a1aa","impliedFormat":1},{"version":"2426ed0e9982c3d734a6896b697adf5ae93d634b73eb15b48da8106634f6d911","impliedFormat":1},{"version":"057431f69d565fb44c246f9f64eac09cf309a9af7afb97e588ebef19cc33c779","impliedFormat":1},{"version":"960d026ca8bf27a8f7a3920ee50438b50ec913d635aa92542ca07558f9c59eca","impliedFormat":1},{"version":"71f5d895cc1a8a935c40c070d3d0fade53ae7e303fd76f443b8b541dee19a90c","impliedFormat":1},{"version":"252eb4750d0439d1674ad0dc30d2a2a3e4655e08ad9e58a7e236b21e78d1d540","impliedFormat":1},{"version":"e344b4a389bb2dfa98f144f3f195387a02b6bdb69deed4a96d16cc283c567778","impliedFormat":1},{"version":"c6cdcd12d577032b84eed1de4d2de2ae343463701a25961b202cff93989439fb","impliedFormat":1},{"version":"3dc633586d48fcd04a4f8acdbf7631b8e4a334632f252d5707e04b299069721e","impliedFormat":1},{"version":"3322858f01c0349ee7968a5ce93a1ca0c154c4692aa8f1721dc5192a9191a168","impliedFormat":1},{"version":"6dde0a77adad4173a49e6de4edd6ef70f5598cbebb5c80d76c111943854636ca","impliedFormat":1},{"version":"09acacae732e3cc67a6415026cfae979ebe900905500147a629837b790a366b3","impliedFormat":1},{"version":"f7b622759e094a3c2e19640e0cb233b21810d2762b3e894ef7f415334125eb22","impliedFormat":1},{"version":"99236ea5c4c583082975823fd19bcce6a44963c5c894e20384bc72e7eccf9b03","impliedFormat":1},{"version":"f6688a02946a3f7490aa9e26d76d1c97a388e42e77388cbab010b69982c86e9e","impliedFormat":1},{"version":"9f642953aba68babd23de41de85d4e97f0c39ef074cb8ab8aa7d55237f62aff6","impliedFormat":1},{"version":"159d95163a0ed369175ae7838fa21a9e9e703de5fdb0f978721293dd403d9f4a","impliedFormat":1},{"version":"2d2ec3235e01474f45a68f28cf826c2f5228b79f7d474d12ca3604cdcfdac80c","impliedFormat":1},{"version":"6dd249868034c0434e170ba6e0451d67a0c98e5a74fd57a7999174ee22a0fa7b","impliedFormat":1},{"version":"9716553c72caf4ff992be810e650707924ec6962f6812bd3fbdb9ac3544fd38f","impliedFormat":1},{"version":"506bc8f4d2d639bebb120e18d3752ddeee11321fd1070ad2ce05612753c628d6","impliedFormat":1},{"version":"053c51bbc32db54be396654ab5ecd03a66118d64102ac9e22e950059bc862a5e","impliedFormat":1},{"version":"1977f62a560f3b0fc824281fd027a97ce06c4b2d47b408f3a439c29f1e9f7e10","impliedFormat":1},{"version":"627570f2487bd8d899dd4f36ecb20fe0eb2f8c379eff297e24caba0c985a6c43","impliedFormat":1},{"version":"0f6e0b1a1deb1ab297103955c8cd3797d18f0f7f7d30048ae73ba7c9fb5a1d89","impliedFormat":1},{"version":"0a051f254f9a16cdde942571baab358018386830fed9bdfff42478e38ba641ce","impliedFormat":1},{"version":"17269f8dfc30c4846ab7d8b5d3c97ac76f50f33de96f996b9bf974d817ed025b","impliedFormat":1},{"version":"9e82194af3a7d314ccbc64bb94bfb62f4bfea047db3422a7f6c5caf2d06540a9","impliedFormat":1},{"version":"083d6f3547ccbf25dfa37b950c50bee6691ed5c42107f038cc324dbca1e173ae","impliedFormat":1},{"version":"952a9eab21103b79b7a6cca8ad970c3872883aa71273f540285cad360c35da40","impliedFormat":1},{"version":"8ba48776335db39e0329018c04486907069f3d7ee06ce8b1a6134b7d745271cc","impliedFormat":1},{"version":"e6d5809e52ed7ef1860d1c483e005d1f71bab36772ef0fd80d5df6db1da0e815","impliedFormat":1},{"version":"893e5cfbae9ed690b75b8b2118b140665e08d182ed8531e1363ec050905e6cb2","impliedFormat":1},{"version":"6ae7c7ada66314a0c3acfbf6f6edf379a12106d8d6a1a15bd35bd803908f2c31","impliedFormat":1},{"version":"e4b1e912737472765e6d2264b8721995f86a463a1225f5e2a27f783ecc013a7b","impliedFormat":1},{"version":"97146bbe9e6b1aab070510a45976faaf37724c747a42d08563aeae7ba0334b4f","impliedFormat":1},{"version":"c40d552bd2a4644b0617ec2f0f1c58618a25d098d2d4aa7c65fb446f3c305b54","impliedFormat":1},{"version":"09e64dea2925f3a0ef972d7c11e7fa75fec4c0824e9383db23eacf17b368532f","impliedFormat":1},{"version":"424ddba00938bb9ae68138f1d03c669f43556fc3e9448ed676866c864ca3f1d6","impliedFormat":1},{"version":"a0fe12181346c8404aab9d9a938360133b770a0c08b75a2fce967d77ca4b543f","impliedFormat":1},{"version":"3cc6eb7935ff45d7628b93bb6aaf1a32e8cb3b24287f9e75694b607484b377b3","impliedFormat":1},{"version":"ced02e78a2e10f89f4d70440d0a8de952a5946623519c54747bc84214d644bac","impliedFormat":1},{"version":"efd463021ccc91579ed8ae62584176baab2cd407c555c69214152480531a2072","impliedFormat":1},{"version":"29647c3b79320cfeecb5862e1f79220e059b26db2be52ea256df9cf9203fb401","impliedFormat":1},{"version":"c87c29ad2df837f7bc528688d96793758e0c4b1965f5ca520a8c287999565f66","impliedFormat":1},{"version":"e8cdefd2dc293cb4866ee8f04368e7001884650bb0f43357c4fe044cc2e1674f","impliedFormat":1},{"version":"582a3578ebba9238eb0c5d30b4d231356d3e8116fea497119920208fb48ccf85","impliedFormat":1},{"version":"185eae4a1e8a54e38f36cd6681cfa54c975a2fc3bc2ba6a39bf8163fac85188d","impliedFormat":1},{"version":"0c0a02625cf59a0c7be595ccc270904042bea523518299b754c705f76d2a6919","impliedFormat":1},{"version":"f2c999522aa544d93920205e05e11a5d43332f95ec35bd8a17025a823035bc56","impliedFormat":1},{"version":"cee72255e129896f0240ceb58c22e207b83d2cc81d8446190d1b4ef9b507ccd6","impliedFormat":1},{"version":"3b54670e11a8d3512f87e46645aa9c83ae93afead4a302299a192ac5458aa586","impliedFormat":1},{"version":"c2fc4d3a130e9dc0e40f7e7d192ef2494a39c37da88b5454c8adf143623e5979","impliedFormat":1},{"version":"2e693158fc1eedba3a5766e032d3620c0e9c8ad0418e4769be8a0f103fdb52cd","impliedFormat":1},{"version":"516275ccf3e66dc391533afd4d326c44dd750345b68bb573fc592e4e4b74545f","impliedFormat":1},{"version":"07c342622568693847f6cb898679402dd19740f815fd43bec996daf24a1e2b85","impliedFormat":1},{"version":"fa40d705f9813843d47f19321591499f14d1a18fa5e8ca9beaee5aac633c3d0d","impliedFormat":1},{"version":"a7a6330fb015f72d821e23004e63a3827e0c632b614ef3a310b3c81b66de61fd","impliedFormat":1},{"version":"89968316b7069339433bd42d53fe56df98b6990783dfe00c9513fb4bd01c2a1c","impliedFormat":1},{"version":"a4096686f982f6977433ee9759ecbef49da29d7e6a5d8278f0fbc7b9f70fce12","impliedFormat":1},{"version":"62e62a477c56cda719013606616dd856cfdc37c60448d0feb53654860d3113bb","impliedFormat":1},{"version":"207c107dd2bd23fa9febac2fe05c7c72cdac02c3f57003ab2e1c6794a6db0c05","impliedFormat":1},{"version":"55133e906c4ddabecdfcbc6a2efd4536a3ac47a8fa0a3fe6d0b918cac882e0d4","impliedFormat":1},{"version":"2147f8d114cf58c05106c3dccea9924d069c69508b5980ed4011d2b648af2ffe","impliedFormat":1},{"version":"2eb4012a758b9a7ba9121951d7c4b9f103fe2fc626f13bec3e29037bb9420dc6","impliedFormat":1},{"version":"fe61f001bd4bd0a374daa75a2ba6d1bb12c849060a607593a3d9a44e6b1df590","impliedFormat":1},{"version":"cfe8221c909ad721b3da6080570553dea2f0e729afbdbcf2c141252cf22f39b5","impliedFormat":1},{"version":"34e89249b6d840032b9acdec61d136877f84f2cd3e3980355b8a18f119809956","impliedFormat":1},{"version":"6f36ff8f8a898184277e7c6e3bf6126f91c7a8b6a841f5b5e6cb415cfc34820e","impliedFormat":1},{"version":"4b6378c9b1b3a2521316c96f5c777e32a1b14d05b034ccd223499e26de8a379c","impliedFormat":1},{"version":"07be5ae9bf5a51f3d98ffcfacf7de2fe4842a7e5016f741e9fad165bb929be93","impliedFormat":1},{"version":"cb1b37eda1afc730d2909a0f62cac4a256276d5e62fea36db1473981a5a65ab1","impliedFormat":1},{"version":"c873a6d6019f0b93889e54bf3dfb133120d5adba79c0a31d2400d1b5d0f2a2a2","impliedFormat":1},{"version":"471386a0a7e4eb88c260bdde4c627e634a772bf22f830c4ec1dad823154fd6f5","impliedFormat":1},{"version":"108314a60f3cb2454f2d889c1fb8b3826795399e5d92e87b2918f14d70c01e69","impliedFormat":1},{"version":"d75cc838286d6b1260f0968557cd5f28495d7341c02ac93989fb5096deddfb47","impliedFormat":1},{"version":"d531dc11bb3a8a577bd9ff83e12638098bfc9e0856b25852b91aac70b0887f2a","impliedFormat":1},{"version":"19968b998a2ab7dfd39de0c942fc738b2b610895843fec25477bc393687babd8","impliedFormat":1},{"version":"c0e6319f0839d76beed6e37b45ec4bb80b394d836db308ae9db4dea0fe8a9297","impliedFormat":1},{"version":"1a7b11be5c442dab3f4af9faf20402798fddf1d3c904f7b310f05d91423ba870","impliedFormat":1},{"version":"079d3f1ddcaf6c0ff28cfc7851b0ce79fcd694b3590afa6b8efa6d1656216924","impliedFormat":1},{"version":"2c817fa37b3d2aa72f01ce4d3f93413a7fbdecafe1b9fb7bd7baaa1bbd46eb08","impliedFormat":1},{"version":"682203aed293a0986cc2fccc6321d862742b48d7359118ac8f36b290d28920d2","impliedFormat":1},{"version":"7406d75a4761b34ce126f099eafe6643b929522e9696e5db5043f4e5c74a9e40","impliedFormat":1},{"version":"7e9c4e62351e3af1e5e49e88ebb1384467c9cd7a03c132a3b96842ccdc8045c4","impliedFormat":1},{"version":"ea1f9c60a912065c08e0876bd9500e8fa194738855effb4c7962f1bfb9b1da86","impliedFormat":1},{"version":"903f34c920e699dacbc483780b45d1f1edcb1ebf4b585a999ece78e403bb2db3","impliedFormat":1},{"version":"100ebfd0470433805c43be5ae377b7a15f56b5d7181c314c21789c4fe9789595","impliedFormat":1},{"version":"12533f60d36d03d3cf48d91dc0b1d585f530e4c9818a4d695f672f2901a74a86","impliedFormat":1},{"version":"57b555a83466fb289968a1713f965f1a2bb3a91cc34d1fa21af8ebdef7fc872a","impliedFormat":1},{"version":"21d9968dad7a7f021080167d874b718197a60535418e240389d0b651dd8110e7","impliedFormat":1},{"version":"2ef7349b243bce723d67901991d5ad0dfc534da994af61c7c172a99ff599e135","impliedFormat":1},{"version":"fa103f65225a4b42576ae02d17604b02330aea35b8aaf889a8423d38c18fa253","impliedFormat":1},{"version":"1b9173f64a1eaee88fa0c66ab4af8474e3c9741e0b0bd1d83bfca6f0574b6025","impliedFormat":1},{"version":"1b212f0159d984162b3e567678e377f522d7bee4d02ada1cc770549c51087170","impliedFormat":1},{"version":"46bd71615bdf9bfa8499b9cfce52da03507f7140c93866805d04155fa19caa1b","impliedFormat":1},{"version":"86cb49eb242fe19c5572f58624354ffb8743ff0f4522428ebcabc9d54a837c73","impliedFormat":1},{"version":"fc2fb9f11e930479d03430ee5b6588c3788695372b0ab42599f3ec7e78c0f6d5","impliedFormat":1},{"version":"bb1e5cf70d99c277c9f1fe7a216b527dd6bd2f26b307a8ab65d24248fb3319f5","impliedFormat":1},{"version":"817547eacf93922e22570ba411f23e9164544dead83e379c7ae9c1cfc700c2cf","impliedFormat":1},{"version":"a728478cb11ab09a46e664c0782610d7dd5c9db3f9a249f002c92918ca0308f7","impliedFormat":1},{"version":"9e91ef9c3e057d6d9df8bcbfbba0207e83ef9ab98aa302cf9223e81e32fdfe8d","impliedFormat":1},{"version":"66d30ef7f307f95b3f9c4f97e6c1a5e4c462703de03f2f81aca8a1a2f8739dbd","impliedFormat":1},{"version":"293ca178fd6c23ed33050052c6544c9d630f9d3b11d42c36aa86218472129243","impliedFormat":1},{"version":"90a4be0e17ba5824558c38c93894e7f480b3adf5edd1fe04877ab56c56111595","impliedFormat":1},{"version":"fadd55cddab059940934df39ce2689d37110cfe37cc6775f06b0e8decf3092d7","impliedFormat":1},{"version":"adb906b7794a71185220332532dcbdd09527e0dd3ce9f0b9be0a88c56bbb7e9e","impliedFormat":1},{"version":"b4f3b4e20e2193179481ab325b8bd0871b986e1e8a8ed2961ce020c2dba7c02d","impliedFormat":1},{"version":"41744c67366a0482db029a21f0df4b52cd6f1c85cbc426b981b83b378ccb6e65","impliedFormat":1},{"version":"c3f3cf7561dd31867635c22f3c47c8491af4cfa3758c53e822a136828fc24e5d","impliedFormat":1},{"version":"a88ddea30fae38aa071a43b43205312dc5ff86f9e21d85ba26b14690dc19d95e","impliedFormat":1},{"version":"34fc71db924616ba097a0cb6cddc2ece273a27673dd3b206abf3f3b5d63bcace","impliedFormat":1},{"version":"5515f17f45c6aafe6459afa3318bba040cb466a8d91617041566808a5fd77a44","impliedFormat":1},{"version":"4df1f0c17953b0450aa988c9930061f8861b114e1649e1a16cfd70c5cbdf8d83","impliedFormat":1},{"version":"441104b363d80fe57eb79a50d495e0b7e3ebeb45a5f0d1a4067d71ef75e8fbfa","impliedFormat":1},{"version":"ae02db44606a04880c676f200482d79436e3e8ac48f09307fc06c498e9c9221f","impliedFormat":1},{"version":"1731ec536f4a2fecd976c33877dce2bcf2c9cb8e62b60c35589e6db4d0e4503b","impliedFormat":1},{"version":"151748b7c4b0e834dcdbc24158956e849a1b9c9044903a7332569db96815c8f0","impliedFormat":1},{"version":"4332bc66fb3065e2e923115564262b00747f5a11f09418e4e36bb0bf7e6ac76b","impliedFormat":1},{"version":"1f08f7607d180577faeccfd60a718e279365ff6a60ee77a79b4f7494666ff233","impliedFormat":1},{"version":"05138a527eb7b9d4b8130f0096b65c1ff0a060c6cd7ee3b673dbb882bb38ace1","impliedFormat":1},{"version":"7b9add5ac31aabeaf5cd7233a965b3fe6c6519e7c364c929b239ab18d9e09522","impliedFormat":1},{"version":"5377a39d49dcd0d4e455a869848b6c29d45c8807729bc68661b24ee98ccf63ef","impliedFormat":1},{"version":"4e31aa31cd6e1fd4881a4842e6d1fe334da2990154b98923a2527717e9b05026","impliedFormat":1},{"version":"ad4e8d01fdd1379d5969aa97dbb98cb39c30d7c6a0a96bc65658e5164bed5907","impliedFormat":1},{"version":"500f6218efd544562b90fa590a00a09e51e6456df80cf4bfd0d4dff6d1670bca","impliedFormat":1},{"version":"a8d1dcbffade27c021f4cdd6a6bce1ed74520f3835d02b10c9960222c8e50d05","impliedFormat":1},{"version":"f45323ae400055f2de35142bfd3868201cc51b0f919aadc79de44263671dd6c6","impliedFormat":1},{"version":"26726d3245a27f94c45d0820dd63098c251a2208e1c0d4938738963ac5aa6404","impliedFormat":1},{"version":"6c1b497aeb9135ac66891d783a34dec6d4df347126ebe9c3841110f0a614e0c6","impliedFormat":1},{"version":"cef73ddf0336cb343be88b61a0448483029d438dd66ca21722aeabc66223bded","impliedFormat":1},{"version":"8cb6c8db9e27d0c6dba28bf0fcd7ef7603d0b5b2b3dce6fffc86f3827a8a00e9","impliedFormat":1},{"version":"d07ef5953b1499ae335c75147c658d9c037fc649544a4c85883f10eb9e5878e8","impliedFormat":1},{"version":"34714fae00aa0544916ade4018d18a04432db2b4b49c6cd066825ac31734eb40","impliedFormat":1},{"version":"5cb3b7b2b0997e451f91ab009ff2d66e7cd5f77838dc729a2e335554fa098a12","impliedFormat":1},{"version":"bdbe3e5d1f1f3dd035c551b6f94883212ccdbe9b3610f65f49138980e0efc0d7","impliedFormat":1},{"version":"eadae8542e5f360490f84d8da987529e415e265da584dd12e3e7c07a74db2fc9","impliedFormat":1},{"version":"9a82178f67affe7ca9c8b20035956d1ad5b25d25b42b6265820232ba16ba0768","impliedFormat":1},{"version":"68ed01a7169e1c26ea25a0cb687fce787b2f0da7349d402fa1ede52bf1ba1cd4","impliedFormat":1},{"version":"5aa42b32993e161aaf93d992300494377d38c8883e15fde44d5c7949313058af","impliedFormat":1},{"version":"b824db197375c795f8fd5c0ae760c7505da494892574f371a3b2bb17fca24a0c","impliedFormat":1},{"version":"eae784573a5c4c55c65b86accb356b21b5f597c3484c1bd344e647bc92ebe572","impliedFormat":1},{"version":"827eb54656695635a6e25543f711f0fe86d1083e5e1c0e84f394ffc122bd3ad7","impliedFormat":1},{"version":"2309cee540edc190aa607149b673b437cb8807f4e8d921bf7f5a50e6aa8d609c","impliedFormat":1},{"version":"899417348aed557d990c12c5c574004616ce897d538fed2ff06afed108cbe73a","impliedFormat":1},{"version":"52d51eb0d1456378d57ed066dea0bd946d9e996064a07c79deba7c3ec822a5b4","impliedFormat":1},{"version":"d370ed9bdc80204bb3ee538f4174de05ee1e18c2e694a630bcaf7546dbfb2807","impliedFormat":1},{"version":"1460f16c4b7fc66d2dde3ce1a4ab97d480c27fb84a4e429355a21e76cd471e19","impliedFormat":1},{"version":"c5d73bf762b7b0e75fcdf691e21e31c9db9913931b200b9990f07f49ab2edff3","impliedFormat":1},{"version":"86a87634e61456909397fe41c0ddb35a0eecf3117150c45f32c371f140db56c3","impliedFormat":1},{"version":"76a5f88a99d386a1ea9209a9f8f33a3f2c2f17bc445a4078950a49c0624bae3d","impliedFormat":1},{"version":"65357b3849688962f59c625718650ad31ff59e6c23f244b4086f0d96558405d6","impliedFormat":1},{"version":"8f932e59ba3dc1bda638f23ab1d173f1ab3885f14c98db90a84ca7f7f977c95b","impliedFormat":1},{"version":"471486ab7c5c95c3df63c0fbebe6871b9535eedff8b582557dfd66fcbf946d5b","impliedFormat":1},{"version":"45e82f28a80d855bab2355d5e46cc8edd7f2679fc5bfb0905dcf01ce59a5c347","impliedFormat":1},{"version":"48f7cd72c6f8ec5b2f70f50a8d4e6f47494e0d228015efb50c36fc6eab33c7ff","impliedFormat":1},{"version":"a8aa7a344599265ef9c2aba0433a805227b2c9b0e743106fab4d6f0c6966f536","impliedFormat":1},{"version":"567f0f5ebc17791330426f62750395ac084b2233b6794275626b9a5368c5eb35","impliedFormat":1},{"version":"9b92a4d989efc3eeefdca5f95f10267504abc7748ecff400b533cdf54dcdbd68","impliedFormat":1},{"version":"332680a9475bd631519399f9796c59502aa499aa6f6771734eec82fa40c6d654","impliedFormat":1},{"version":"191bee6605de2b5210f29f22df04f5b5e6bdcc1f6e21fb07091d40eeeb75fd72","impliedFormat":1},{"version":"d83f3c0362467589b3a65d3a83088c068099c665a39061bf9b477f16708fa0f9","impliedFormat":1},{"version":"0dee1e1c0f7e5302d05eadd14098758ba146274c4a3b646475fc8bce4d4dbcac","impliedFormat":1},{"version":"29994a97447d10d003957bcc0c9355c272d8cf0f97143eb1ade331676e860945","impliedFormat":1},{"version":"f4260022f7af38e533d364ea62eb7ae01b0a32050033d7f6772073e1dc908025","impliedFormat":1},{"version":"9cddf06f2bc6753a8628670a737754b5c7e93e2cfe982a300a0b43cf98a7d032","impliedFormat":1},{"version":"3f8e68bd94e82fe4362553aa03030fcf94c381716ce3599d242535b0d9953e49","impliedFormat":1},{"version":"63e628515ec7017458620e1624c594c9bd76382f606890c8eebf2532bcab3b7c","impliedFormat":1},{"version":"355d5e2ba58012bc059e347a70aa8b72d18d82f0c3491e9660adaf852648f032","impliedFormat":1},{"version":"311cc121259b3e0c3c08304fc25b525aa02ba0f9bf55b3e7c60b0dbb7422014e","impliedFormat":1},{"version":"74c269b43d39e5ece20b2cca49c14e64c05b01e46407200d7558301d0fcaabf4","impliedFormat":1},{"version":"ec09bd95866efe38cd00ebb79dfa7a26563d600fa4a30db0f7c6d68f8f6d2b06","impliedFormat":1},{"version":"482d0ac70d56aa79941be30da6df28e926a007f835eed70cf7b5f3135368d1f6","impliedFormat":1},{"version":"7dd19397d5a090c9f8cd762bae67bd0ad6f782abe422594fb71168fb578673b0","impliedFormat":1},{"version":"84cbf6204ada0ee2f80493e55e45befa079954788718efd6dcc103183104e3c0","impliedFormat":1},{"version":"ed849d616865076f44a41c87f27698f7cdf230290c44bafc71d7c2bc6919b202","impliedFormat":1},{"version":"9a0a0af04065ddfecc29d2b090659fce57f46f64c7a04a9ba63835ef2b2d0efa","impliedFormat":1},{"version":"10297d22a9209a718b9883a384db19249b206a0897e95f2b9afeed3144601cb0","impliedFormat":1},{"version":"034b8b5912823744c986986f24432bf3fa7bfa671e69316b672f3f2db5166ce4","impliedFormat":1},{"version":"34d206f6ba993e601dade2791944bdf742ab0f7a8caccc661106c87438f4f904","impliedFormat":1},{"version":"05ca49cc7ba9111f6c816ecfadb9305fffeb579840961ee8286cc89749f06ebd","impliedFormat":1},{"version":"427cbe10b1d96722e0001378b2cadcb794b0ce342870c9590381c3dd9f1724f8","impliedFormat":1},{"version":"ea4eadfe3d8b0447ecea1cbbf7aad70423cca9350bc9103a1d80cebc37e6bdb3","impliedFormat":1},{"version":"b88645280562793af76ab59052d87e4846ac5ef19af054c729fbb87c73481a59","impliedFormat":1},{"version":"a1f43b06dd37b1f6c5c7821881960dfe55038b468eafb324ad90ce5e9b448d2a","impliedFormat":1},{"version":"15b142d522e96e1962bd54c75560f6994cc8fe9a1640a36de2268fdb95e58fb5","impliedFormat":1},{"version":"de79263f32ea34b3f9282b19251626eeb3a3aef8d96491b731a3c0fb5cca2e77","impliedFormat":1},{"version":"355739d282928494e5564cb919b6db7d920a08956ef536d870c2f9e7596c8ac4","impliedFormat":1},{"version":"6ad48cc710a0b66a00e56f962a39e9b3e8e8dae29e9763c336e94d1a97c54c5a","impliedFormat":1},{"version":"0850c98ca2cccae6ce2aad363f6eb370c401fbc279a64607fff90c0f87973a91","impliedFormat":1},{"version":"d0f62192ec787f1592a5b86760a44350d1c925883a573eadc12d60862890dffe","impliedFormat":1},{"version":"4ef34562ac49a16a1681d51d6e8ece677657782cf1a464e010224cbbe0bb071f","impliedFormat":1},{"version":"a66ad696f2785dd00374b8dee6fab5c58c049c0efe24b3c214fbe6aec3f53d6e","impliedFormat":1},{"version":"f226f29f5594bd479f27648f42423ffa1a1460cafc7b1ba04bd013b28cba710f","impliedFormat":1},{"version":"63f859a315e9711f383d06b7a2b940804e51078d85e896980816f46f1b6021a8","impliedFormat":1},{"version":"f8da2a3bec435c09f9a10d9f150949bf0ebb0c3508f074887dbb2d3e33ce302b","impliedFormat":1},{"version":"397b46c6a95826d26714b5481addc606de72d8229b092e236f0d78a9e7226d29","impliedFormat":1},{"version":"5f47fb5b000c03fdcae71e6e017261898a37f0892532cb713ce95c8950462d80","impliedFormat":1},{"version":"81510d25a9810948b21bc3ded631d261c7c4ef9a67bc3b02f09ddbc7f67645c9","impliedFormat":1},{"version":"617891438559a97ae02a795d529a25acf128744cf1e150ab6b70a2db38600abb","impliedFormat":1},{"version":"225deff02f4d1c91e2d6c71dec9f18feae510aa729a9774024f30278f4c6b8fe","impliedFormat":1},{"version":"6c24f6dcbb3bf8235bf8da995a7290ffbd9d557a760cf2deb380ce91a989b765","impliedFormat":1},{"version":"e48415a5a97a5e6c22cc4fdcb3172805ce68a1d41d0a056d71bff9ced2186d43","impliedFormat":1},{"version":"e78efe1acc86b01bbb10bae9eecc2fc389d0e51a06eacb42d23a928946d2c9e6","impliedFormat":1},{"version":"9b74326515d17f03809cfbea6de789772ff7d0c759a08a59bfa5242bda98d35b","impliedFormat":1},{"version":"75b6e7998a607fd056736697961e9968df7bf9e6bd7ad13ef16e1e068251021f","impliedFormat":1},{"version":"0ea47413eaffe144782a44058205c31130b382dee0e2f66b62b5188eac57039e","impliedFormat":1},{"version":"c0591738dbfe11a36959f16ab40bc98b2a430c4565770ef6257574546079d791","impliedFormat":1},{"version":"3cf3dc0f53d71795cd7c461346e9aa3c713f8a5138015776aa6d4b8ff9e0cb26","impliedFormat":1},{"version":"ca73451ec7771379b6b1271dcda0d0b2146da80b329136a09ad692529a073965","impliedFormat":1},{"version":"fad74233657c4e0346822942ac3716a20b16fb053ca00c1260a08a81cc76df89","impliedFormat":1},{"version":"241989edda9c92a4e4b2d815cea9abc64af1a60702c7756543f834180f002c8b","impliedFormat":1},{"version":"fced7c59acecb0ac631505fcbc5a1ce0c6420e2494a256321e9359093efb7a1f","impliedFormat":1},{"version":"8c42fbcae55a41f9c48f644ff9743fab827a9d38f5a6bd486f17c6460f8a099b","impliedFormat":1},{"version":"b6a6aa142edcc0a66bb099d143fc272f72715d282ad1a0a222daa2932edb75a6","impliedFormat":1},{"version":"cf841c4bfb05b4b1d3826773ff77a47bb0dc17c665a4dbff7d6c4a6d9042d50c","impliedFormat":1},{"version":"1b44c62dc27eddfec7780fb2a082c28a628e7f54842708c1cb8b1aaf61978d4d","impliedFormat":1},{"version":"bd15222c3f016a97d7062a0018f7fe0d130be508ca276b43dcafa8c9032a3ea4","impliedFormat":1},{"version":"4f5f11b73282262904f4c1bc5ffb76631b40ac8b54ae01bde274cb9242d6cb2f","impliedFormat":1},{"version":"9e6dcb736749cc84304b38c5a1101b299659dbc3871bab5d1544ee8f8dc73e5b","impliedFormat":1},{"version":"4e4559e8e4ea7d87f914014074559e515de78308bacc733a7ea76f795de178a3","impliedFormat":1},{"version":"13ecb31795209aa56b1837b9d46cc5494da392f594132bc5b3a56c067e12ea1c","impliedFormat":1},{"version":"e34a28e978cf430e062c91d03987f2b42360b33e6207738b40494acd4a97004b","impliedFormat":1},{"version":"5cc10d0295e594c961bd020cc76845097928f550fa3d58468114e5225054f76c","impliedFormat":1},{"version":"99c4cd704c85c3b9a215977d1d10ad34f1c6bbc5784e0ddaaf6fe8090030eaf3","impliedFormat":1},{"version":"4e874f611f31bfab5803e7a7f32fafbed44b93eb260726420355a2b6331c312e","impliedFormat":1},{"version":"f137d3c4e6a3481f89483d24735b5f236fd61df12b15fe72d453d37216e04b37","impliedFormat":1},{"version":"6939be893a2402f8af9bdf01a56f9f8fde68fcd5527f9d49bf72475e00eab81a","impliedFormat":1},{"version":"b9305f911c38afd04e4d0740370408bdd3faf5d2ab8ba19de5dd61f0bed50dd6","impliedFormat":1},{"version":"fcfff3c8b82ab18ac26fe3d9e7728805255f5e571804e8722b2748d07b729e93","impliedFormat":1},{"version":"8d31d96656a5febb345b5cd5fcb25305c3d545c70f32e716e571d91e1a16b15b","impliedFormat":1},{"version":"1f80e0ef9c6f2d223a3bbe3438d7355241164ff5f1d05b6e7da9cc26621351ff","impliedFormat":1},{"version":"121695e29f8a46c562eec36f3e5324b21047c9f08293b7f74532c27861e2dbd1","impliedFormat":1},{"version":"0e6387b87925a10ba52cd0de685a4f7e2d9dd402dbac560dce8934e8e34007d0","impliedFormat":1},{"version":"42a82d8b7520d5e6d00f079703e50a956da5d0b94dd7a96fbae0372db027bc88","impliedFormat":1},{"version":"ef5aa9871f3b8dac96d4ef93e22eec539527d739c6a7e0c7fa7101fa343bfd77","impliedFormat":1},{"version":"25300ac27483f549601592a28472e99ea5a662f93d692cb35f99a1b771ed7b72","impliedFormat":1},{"version":"4a1a0f21b3c4fc0d217392d82445a34fcc8c9ed6f79fdc4d14b8353e3c74eaf3","impliedFormat":1},{"version":"7b2ea03ae5593cbd62f0a5455f761b476e16e6fc812ecd22dc98c8a129c66b27","impliedFormat":1},{"version":"5a59c1315ed5ca8f899fc6527f23a15dc9a38107175a5fffd473db25bcd1fd4a","impliedFormat":1},{"version":"20a5515b81a828fc10b066aa5f88a5eb68323d23b8a10d8e9dc7edb6ebdd2bd7","impliedFormat":1},{"version":"c197293eabaac9dd40c0a298493b78c728bbc79b1f37d1f95ce23ef93bc31872","impliedFormat":1},{"version":"1b2283af9536429b918477c58c1ab8f176ec435d7b5514eeb7be17d9b1f37f5b","impliedFormat":1},{"version":"954f0b817bc3a7814ca7b40d6099a4b690846b4327a74645bbeac7da146deb20","impliedFormat":1},{"version":"15aba6a4199ce9e4f3c1ec397a468f6aaaeba973649ca4f1c016225b46a5feaf","impliedFormat":1},{"version":"a1ca7f7788853a2ff3670bf1112a92fa503686b10d58339318fec5862bd209a6","impliedFormat":1},{"version":"9183f175f885e98000fb3e8e3478c4c7f5b6374d7f580a3071b37ed2f8422c5c","impliedFormat":1},{"version":"45a149d995a3a76a4adb1aff9267f57dba9a81c6ec75aa07351352fe426849d2","impliedFormat":1},{"version":"3583432d31bc3a8314da422000c1c6e027b903085d749858440918f3499321f0","impliedFormat":1},{"version":"982abe1a1c36e6a4ce3c6e8ca12bac8f36b04319ca378ad889fcfbb62c633e29","impliedFormat":1},{"version":"91b681431258c2b6edef7a40b64f455edb2c33d5486e3543eb246cc1beb173b6","impliedFormat":1},{"version":"060c0dcf0c791fadb137766d0dad41414e85fe0eb4d80f8ed436296755540e55","impliedFormat":1},{"version":"edb7055a348bc1ee811ea9040998797ae3097951b4af69ee96f6edc4c47fb817","impliedFormat":1},{"version":"29b408824df9dfca5ce4e4de1702ca382036f422653d71a36a9ba00a9818c6f1","impliedFormat":1},{"version":"e92ee6e3d7594a90ca038a2ac77693cd090b3989d13be7cbea4fc5af6a3a5ab5","impliedFormat":1},{"version":"528f3448c98e09174ca4186540000bf77f81fddcb587e0db9626ea825dead0ab","impliedFormat":1},{"version":"2203c47042792d350a9ac67328e541fe9c8627c0a2aef12f2d30d6072c210004","impliedFormat":1},{"version":"de18addada26bb0c6a7b795356bcbdcde7ade8a928d761b90ad2673cd9b97a56","impliedFormat":1},{"version":"e5a093183415e4c25343e717144d1bb051eebd65bdc05569f314023c8c16c315","impliedFormat":1},{"version":"6b141b2932d1592b315fc91b2ccf9ebf860c84e13aee14637559449b4573d54a","impliedFormat":1},{"version":"9c3cc6249267ec556f7cb3d3935e16bf5ac7459b74150e059f94fc803d6d83d6","impliedFormat":1},{"version":"c1317ee4831c2c325ea7f348533e8c1118282ef092332978e699f775d08d5e44","impliedFormat":1},{"version":"cea7c28a328bfd8efb8d4db3c8333479d95c43737e13164513811d7a0eda1540","impliedFormat":1},{"version":"fdb137a5008e4093fed0d39bd969c9db55d7c3c2a6a88156ef2bbea3625ebcb4","impliedFormat":1},{"version":"2e84db8bdd705b0041fa382197527062d2853468f8c4f6534ba869b700699b1b","impliedFormat":1},{"version":"e375f01fcc9cf9949d85d884c0e77181ade7ddb35cf75ec7510a238e0cb8e3d0","impliedFormat":1},{"version":"376fba160c82508f4c003cbb0c1731ce06fb044a6741123f2685a15187784c39","impliedFormat":1},{"version":"24a639753c651fbdd930131ecb0e6ac87ad27fc831390fbfcb98d994674236b9","impliedFormat":1},{"version":"e20bc9827aa221755718de4bea01cba89715fbdf0f125c5ae57e591767e9f29c","impliedFormat":1},{"version":"39ecf86c05473aee4e6f2befb7c1767e664cdd2b7be27ab038c412273dcf03cb","impliedFormat":1},{"version":"fa80fe842fd2b1465fdf713f125c6aea9c5803f89665a5daf46e429e1e2d9874","impliedFormat":1},{"version":"28d7d661eb177715c728ebe6ad165c8a3c187cf32ceea52f99d8803cdb1663bc","impliedFormat":1},{"version":"4a1744726d4293daaac3a1bb0bb4c4d400d51d4525933093a059b1795552938e","impliedFormat":1},{"version":"2e558eb0508798ab479e63c074027828f95ba2e5ac620e3b72b61739d23b8365","impliedFormat":1},{"version":"f3eca6b9a668c7872bb132fafe6750c582771c40a66606745c2c01dbec8d4c5d","impliedFormat":1},{"version":"ca2136477815999750c637596c1f10d9bd22bf4d740c9f3bdb7587e88ae66360","impliedFormat":1},{"version":"32e8a9c74f4dcc2c0564791939e001bc26c0e689a33736f9e1cba168b06b628a","impliedFormat":1},{"version":"9de93044640e453de8a572bbafb4169d9463592c2d4abd19c27fdb7b2e3f24d0","impliedFormat":1},{"version":"332680a9475bd631519399f9796c59502aa499aa6f6771734eec82fa40c6d654","impliedFormat":1},{"version":"191bee6605de2b5210f29f22df04f5b5e6bdcc1f6e21fb07091d40eeeb75fd72","impliedFormat":1},{"version":"d83f3c0362467589b3a65d3a83088c068099c665a39061bf9b477f16708fa0f9","impliedFormat":1},{"version":"180e527dbc1f5ae2bbb79d0a3db1ada49258783d7e6299559e0f2ed663b4afec","impliedFormat":1},{"version":"29994a97447d10d003957bcc0c9355c272d8cf0f97143eb1ade331676e860945","impliedFormat":1},{"version":"f4260022f7af38e533d364ea62eb7ae01b0a32050033d7f6772073e1dc908025","impliedFormat":1},{"version":"9cddf06f2bc6753a8628670a737754b5c7e93e2cfe982a300a0b43cf98a7d032","impliedFormat":1},{"version":"3f8e68bd94e82fe4362553aa03030fcf94c381716ce3599d242535b0d9953e49","impliedFormat":1},{"version":"63e628515ec7017458620e1624c594c9bd76382f606890c8eebf2532bcab3b7c","impliedFormat":1},{"version":"355d5e2ba58012bc059e347a70aa8b72d18d82f0c3491e9660adaf852648f032","impliedFormat":1},{"version":"311cc121259b3e0c3c08304fc25b525aa02ba0f9bf55b3e7c60b0dbb7422014e","impliedFormat":1},{"version":"74c269b43d39e5ece20b2cca49c14e64c05b01e46407200d7558301d0fcaabf4","impliedFormat":1},{"version":"ec09bd95866efe38cd00ebb79dfa7a26563d600fa4a30db0f7c6d68f8f6d2b06","impliedFormat":1},{"version":"482d0ac70d56aa79941be30da6df28e926a007f835eed70cf7b5f3135368d1f6","impliedFormat":1},{"version":"7dd19397d5a090c9f8cd762bae67bd0ad6f782abe422594fb71168fb578673b0","impliedFormat":1},{"version":"84cbf6204ada0ee2f80493e55e45befa079954788718efd6dcc103183104e3c0","impliedFormat":1},{"version":"9a0a0af04065ddfecc29d2b090659fce57f46f64c7a04a9ba63835ef2b2d0efa","impliedFormat":1},{"version":"10297d22a9209a718b9883a384db19249b206a0897e95f2b9afeed3144601cb0","impliedFormat":1},{"version":"034b8b5912823744c986986f24432bf3fa7bfa671e69316b672f3f2db5166ce4","impliedFormat":1},{"version":"34d206f6ba993e601dade2791944bdf742ab0f7a8caccc661106c87438f4f904","impliedFormat":1},{"version":"05ca49cc7ba9111f6c816ecfadb9305fffeb579840961ee8286cc89749f06ebd","impliedFormat":1},{"version":"bdf6977392a12184a1b3df5cfbfc04c14ff2017b393cef515474ec969d9edacc","impliedFormat":1},{"version":"bad36bee6dabf12fa12a691bb6a33924a12a82f045ecf4f7480a9675a3e165d2","impliedFormat":1},{"version":"d0df7c281fb7abbc259787cc1f9d90d302709a48c01cf63de917aadaf3964a9b","impliedFormat":1},{"version":"08feed8b713001f65bb348a8ed5d147af8f857140fed5c33adaea84754b015e0","impliedFormat":1},{"version":"38f657b03aee076686600e8a60b9ea02adb2fe9f1f1303543d9434cf89348ae8","impliedFormat":1},{"version":"426be40525994401b3257a091505994baf6f28cd3815fe30b31c8356cb8787b5","impliedFormat":1},{"version":"3083eb82f05d0571275df4d750d6ec4b252af8f2b9ff7e9c90d04d5089375caa","impliedFormat":1},{"version":"db40a032da4125991017f5a56fb5e5066fd3f2d7a35416622cffba8fbc8c1d70","impliedFormat":1},{"version":"8e4b8643c48bd53ec10c1d31eb3c055a4e79742979e31a1e32001b839d21e466","impliedFormat":1},{"version":"2156dec90be4df770fec875e651f5e4a37ca05bd24775713836cd2e1a21ccdeb","impliedFormat":1},{"version":"f9d34c95eda3aba08eb49a4c4d1c178ebf4b90564b07b6d9bdc2bbc6530717f0","impliedFormat":1},{"version":"77c773c8eb16662caf86832c70143a9c6600a2fdeaae04a598c4ff5e5681fb1b","impliedFormat":1},{"version":"ca9c7eafc5d9869968d5dcaa52ba8f647059f39555e4653d75585c2e9e0f6740","impliedFormat":1},{"version":"dbd19dec18939088cf3766590b33bb27d19c505211238db09bbb83c9985e5561","impliedFormat":1},{"version":"49fdb09d000b0aaed1b703156083d91ac4942b4beb9816809aec2e00c077152b","impliedFormat":1},{"version":"333cd6f3dd20a7619513bd841d398f7be65d8124ba84c5e8f20084f8b4a619f8","impliedFormat":1},{"version":"b4e9b07e73f79509f30a7591c93ec15cb62666dd8521f2941b82bebfa940bff4","impliedFormat":1},{"version":"0cfba391d7c2d33e0f5fc70390ea5e5d80b203d0bfb01ad53972dfd68dd391c6","impliedFormat":1},{"version":"a096d8d2cb2d1add0a89658ac843387fc21f9232a06b6a9be0b487a7a7de2e62","impliedFormat":1},{"version":"76d635d0ce420a60ed078de16db4af06296c4c514c9b99cb2af6e83dd2d31817","impliedFormat":1},{"version":"e5524de223e1aacf2ac0e75e54adf8fe7caf99c7e280a2ab8a75649939f9581b","impliedFormat":1},{"version":"0f600b0c0ec501db22eb3eccb7f04199b8e29c593092b9b99a181d8bf01d56b3","impliedFormat":1},{"version":"a4e9e0d92dcad2cb387a5f1bdffe621569052f2d80186e11973aa7080260d296","impliedFormat":1},{"version":"f6380cc36fc3efc70084d288d0a05d0a2e09da012ee3853f9d62431e7216f129","impliedFormat":1},{"version":"497c3e541b4acf6c5d5ba75b03569cfe5fe25c8a87e6c87f1af98da6a3e7b918","impliedFormat":1},{"version":"d9429b81edf2fb2abf1e81e9c2e92615f596ed3166673d9b69b84c369b15fdc0","impliedFormat":1},{"version":"7e22943ae4e474854ca0695ab750a8026f55bb94278331fda02a4fb42efce063","impliedFormat":1},{"version":"7da9ff3d9a7e62ddca6393a23e67296ab88f2fcb94ee5f7fb977fa8e478852ac","impliedFormat":1},{"version":"e1b45cc21ea200308cbc8abae2fb0cfd014cb5b0e1d1643bcc50afa5959b6d83","impliedFormat":1},{"version":"c9740b0ce7533ce6ba21a7d424e38d2736acdddeab2b1a814c00396e62cc2f10","impliedFormat":1},{"version":"b3c1f6a3fdbb04c6b244de6d5772ffdd9e962a2faea1440e410049c13e874b87","impliedFormat":1},{"version":"dcaa872d9b52b9409979170734bdfd38f846c32114d05b70640fd05140b171bb","impliedFormat":1},{"version":"6c434d20da381fcd2e8b924a3ec9b8653cf8bed8e0da648e91f4c984bd2a5a91","impliedFormat":1},{"version":"992419d044caf6b14946fa7b9463819ab2eeb7af7c04919cc2087ce354c92266","impliedFormat":1},{"version":"fa9815e9ce1330289a5c0192e2e91eb6178c0caa83c19fe0c6a9f67013fe795c","impliedFormat":1},{"version":"06384a1a73fcf4524952ecd0d6b63171c5d41dd23573907a91ef0a687ddb4a8c","impliedFormat":1},{"version":"34b1594ecf1c84bcc7a04d9f583afa6345a6fea27a52cf2685f802629219de45","impliedFormat":1},{"version":"d82c9ca830d7b94b7530a2c5819064d8255b93dfeddc5b2ebb8a09316f002c89","impliedFormat":1},{"version":"7e046b9634add57e512412a7881efbc14d44d1c65eadd35432412aa564537975","impliedFormat":1},{"version":"aac9079b9e2b5180036f27ab37cb3cf4fd19955be48ccc82eab3f092ee3d4026","impliedFormat":1},{"version":"3d9c38933bc69e0a885da20f019de441a3b5433ce041ba5b9d3a541db4b568cb","impliedFormat":1},{"version":"606aa2b74372221b0f79ca8ae3568629f444cc454aa59b032e4cb602308dec94","impliedFormat":1},{"version":"50474eaea72bfda85cc37ae6cd29f0556965c0849495d96c8c04c940ef3d2f44","impliedFormat":1},{"version":"b4874382f863cf7dc82b3d15aed1e1372ac3fede462065d5bfc8510c0d8f7b19","impliedFormat":1},{"version":"df10b4f781871afb72b2d648d497671190b16b679bf7533b744cc10b3c6bf7ea","impliedFormat":1},{"version":"1fdc28754c77e852c92087c789a1461aa6eed19c335dc92ce6b16a188e7ba305","impliedFormat":1},{"version":"a656dab1d502d4ddc845b66d8735c484bfebbf0b1eda5fb29729222675759884","impliedFormat":1},{"version":"465a79505258d251068dc0047a67a3605dd26e6b15e9ad2cec297442cbb58820","impliedFormat":1},{"version":"ddae22d9329db28ce3d80a2a53f99eaed66959c1c9cd719c9b744e5470579d2f","impliedFormat":1},{"version":"d0e25feadef054c6fc6a7f55ccc3b27b7216142106b9ff50f5e7b19d85c62ca7","impliedFormat":1},{"version":"111214009193320cacbae104e8281f6cb37788b52a6a84d259f9822c8c71f6ca","impliedFormat":1},{"version":"01c8e2c8984c96b9b48be20ee396bd3689a3a3e6add8d50fe8229a7d4e62ff45","impliedFormat":1},{"version":"a4a0800b592e533897b4967b00fb00f7cd48af9714d300767cc231271aa100af","impliedFormat":1},{"version":"20aa818c3e16e40586f2fa26327ea17242c8873fe3412a69ec68846017219314","impliedFormat":1},{"version":"f498532f53d54f831851990cb4bcd96063d73e302906fa07e2df24aa5935c7d1","impliedFormat":1},{"version":"5fd19dfde8de7a0b91df6a9bbdc44b648fd1f245cae9e8b8cf210d83ee06f106","impliedFormat":1},{"version":"3b8d6638c32e63ea0679eb26d1eb78534f4cc02c27b80f1c0a19f348774f5571","impliedFormat":1},{"version":"ce0da52e69bc3d82a7b5bc40da6baad08d3790de13ad35e89148a88055b46809","impliedFormat":1},{"version":"9e01233da81bfed887f8d9a70d1a26bf11b8ddff165806cc586c84980bf8fc24","impliedFormat":1},{"version":"214a6afbab8b285fc97eb3cece36cae65ea2fca3cbd0c017a96159b14050d202","impliedFormat":1},{"version":"14beeca2944b75b229c0549e0996dc4b7863e07257e0d359d63a7be49a6b86a4","impliedFormat":1},{"version":"f7bb9adb1daa749208b47d1313a46837e4d27687f85a3af7777fc1c9b3dc06b1","impliedFormat":1},{"version":"c549fe2f52101ffe47f58107c702af7cdcd42da8c80afd79f707d1c5d77d4b6e","impliedFormat":1},{"version":"3966ea9e1c1a5f6e636606785999734988e135541b79adc6b5d00abdc0f4bf05","impliedFormat":1},{"version":"0b60b69c957adb27f990fbc27ea4ac1064249400262d7c4c1b0a1687506b3406","impliedFormat":1},{"version":"12c26e5d1befc0ded725cee4c2316f276013e6f2eb545966562ae9a0c1931357","impliedFormat":1},{"version":"27b247363f1376c12310f73ebac6debcde009c0b95b65a8207e4fa90e132b30a","impliedFormat":1},{"version":"05bd302e2249da923048c09dc684d1d74cb205551a87f22fb8badc09ec532a08","impliedFormat":1},{"version":"fe930ec064571ab3b698b13bddf60a29abf9d2f36d51ab1ca0083b087b061f3a","impliedFormat":1},{"version":"6b85c4198e4b62b0056d55135ad95909adf1b95c9a86cdbed2c0f4cc1a902d53","impliedFormat":1},{"version":"31534118da6c78d17058360efb6c6138a2d708e80a239c9b996ce450cd510c87","impliedFormat":1},{"version":"067ffeb7ead113d9ae4758aa919cad4d29ec5c1c2c510e121ef732309afec17a","impliedFormat":1},{"version":"30e705a40525fa10f3fd6b923cf3b5a396854799f556f6de1427040bf327ab5d","impliedFormat":1},{"version":"fea6ae80a31e54412b2c3bc6436f61156e7953692f7b3e964e6a518309bcb0bb","impliedFormat":1},{"version":"1b05e13b1af84cf2a9a0d2a3b5abc007df6a279f5042f3a3f9f5cfb70fc2b23c","impliedFormat":1},{"version":"0c543281c6308734f05d553605e33cc3ad49c018ec8d4c8a643beca372616eb9","impliedFormat":1},{"version":"876e8088396cfca84edbedc02c597048b869a8c8760ba564d6d4a584739ba699","impliedFormat":1},{"version":"9032dfbaa1d55b66d9a0a8f997ae3567346c163a2af74065a6c21acdb9990b42","impliedFormat":1},{"version":"83b2d9b53116b605465d91d5aee0ddd813ea82d3ad99d0826512c8ddb70a2d7a","impliedFormat":1},{"version":"623a64ab0626b6b178dd12f09e18f4c2a49ca3830cf39c273ecc660658e6f8cb","impliedFormat":1},{"version":"63891bb3401192bf9100167d2adfed7e5a1f07d012c5e59afb445bf599e87181","impliedFormat":1},{"version":"7ea286ba4f6362aebc5115cce9dea0bbc139f3347db03c6088f2643e2b6e56b0","impliedFormat":1},{"version":"5d9a6fb39fb75fc9eb3faf571354dbe59a99a68a59359b373fe95a229548bac7","impliedFormat":1},{"version":"73f38c9cb743e19f5935415ca4d9f0a8cd73e2933675f7f73587f90d4199412d","impliedFormat":1},{"version":"cbb38e8af40794f3c78590ed75da9cbfc3b042e066c89dc55a62067d63065bbf","impliedFormat":1},{"version":"0d9fd3729915049884e64c7ac5f9ae71ab94c662169c54f34cbbc58e5987e770","impliedFormat":1},{"version":"b770116fa75575be33df4d0959ebc66cbe4c0c7dc62ed5d2cb8e7958e544e709","impliedFormat":1},{"version":"dd254b0f5d430c6b1cc4c75ed86b35ddc11d084b733dc0db6a6e08cbf9a167b0","impliedFormat":1},{"version":"b6debb4b1a76fc400984ef42964c77ba7b70f13203a435b5fedf4a3f627a9bfb","impliedFormat":1},{"version":"a4328b51b353f4e14a08473909bae58894518274f82ef92be2e8a33ecce3dedf","impliedFormat":1},{"version":"2b0369749a3012f4b5f71f0b1d64d171ff38e83de3ed811977b542e16d671dca","impliedFormat":1},{"version":"12e4047f780f6239647833021aad41155a8827251dc7b0c14aefceff9ece6b8d","impliedFormat":1},{"version":"a06abed188ab078cbd02602e12011433fd5b205c1e3cb3624e89bbd2048255d5","impliedFormat":1},{"version":"384c6ec95f38740cf87dd9ab45f5bd854cb793d3b8ea6544a4b755432e942eb2","impliedFormat":1},{"version":"97cbb283381a08070408548fe8e3fc45300d8680917f00a42669b6e404bebe69","impliedFormat":1},{"version":"de7adbfaae7f54244be6bd1662089ee10a4673af1ad1c85ab318905e6184bb73","impliedFormat":1},{"version":"361626e4ad8686e046866eeddbec3e5b8c757e79051bf62d9fa92b6f16d09d67","impliedFormat":1},{"version":"2718fff83ca1241c5f03cf11d13ab8537e649065b91e820ecac14c509e2a91aa","impliedFormat":1},{"version":"78ccd8f880fb0a87fa5b5ebefd7aa4f43a408cbd3230516c825f92cb54d0591b","impliedFormat":1},{"version":"c0244fa649a07cf786b4a212b9f20542b701f077bff22ece91cd65255f71f25e","impliedFormat":1},{"version":"c3b9e4c1dbe58fb28ad45e0c924a468f5873eed478bf8ec23608fd13e11005eb","impliedFormat":1},{"version":"57c940e0f8fd4486a162a189fe9fbc4e6cd10fbf41748d1a1e3fcafbe7ee5de8","impliedFormat":1},{"version":"16a4bfdcd8310a46e6257ec459c394772106ecacdabbaae6aa7e62f372615a34","impliedFormat":1},{"version":"1603f6fac7d20b4d83065f6ed0b54fcf190cf998fe86b1317f36846f44aaa396","impliedFormat":1},{"version":"0526d4751ba5958c8c417b8db7667fc6ba8a44d2d51bfe047840e3435e3b41b5","impliedFormat":1},{"version":"f0b12aa281d92670d60c12b0b5c68fde25dd2e5a201158008d20c720309de598","impliedFormat":1},{"version":"8c28d39e108ba627d334d27425a10151e22d6e8e457061d549bc9f919a9feb74","impliedFormat":1},{"version":"2ad5a0706abe3f8700f6c89041899ecc40872b815dce21e63336d8f5c1b08eb2","impliedFormat":1},{"version":"c2d3e6f3d3138b0fb8e29ee4e40fdfb0c13d1e22b70d4fb81b97acf815f609aa","impliedFormat":1},{"version":"0d60cda772d8686cf802623f432d10a7c1ea7087eb49412dbfbf1faa10aba749","impliedFormat":1},{"version":"fd64744c5e57d0b7ccd53f103a82ebb9b56ad9ab6719ab96765c7b57d64f6e4d","impliedFormat":1},{"version":"6d91c9c3b416788ee9c1365de6c5138de30bec970f28c9ece9911261ffadda74","impliedFormat":1},{"version":"539c6bbe98550e7d23d622afe4e3855be0ea765db6daa479e1e3dc490c079b71","impliedFormat":1},{"version":"3f0373b68f5d14a844465b0152ce49ae5e9ce03f9dc2d95e355bc71828621bea","impliedFormat":1},{"version":"84a5ebfc059415903402e98bca6222dc05d3c774618b0c57f2937bfb06d80d81","impliedFormat":1},{"version":"8328711226ff803630e3668e23e78b29897fe6cdf51915cd5dfe85a3bfd96b39","impliedFormat":1},{"version":"a75441dcd99d081fa042d426a1bf58d9d49dfc37be73a68104d4687da4080a92","impliedFormat":1},{"version":"91797d609a461d3eda42a599c2e8d950bc3f9285e135d16691495f7f33e547de","impliedFormat":1},{"version":"b118f63152f3c9d8251c19d3d2d7df09180dbebf164d8b12bb148ff79ff1f9fb","impliedFormat":1},{"version":"6dadc4d64131b98ddbc6f9e74f67f37a77395bcd43b62b61e28a92d176777ab3","impliedFormat":1},{"version":"145d638b97593d60a93bceb8020b8df31ce3cee54e5656b20c6fdd4163fab620","impliedFormat":1},{"version":"eff60603c2efbb3495e2ae03db8e070acdeb7e22da259669ed60241753c9bc0d","impliedFormat":1},{"version":"bcbdd4c59385c0bec8c99923640e5b6423cca277d0233c503023fc356430237c","impliedFormat":1},{"version":"9dc833dcf6e2375d319b62516c2b681ce4354062beb0f2c79f9586e5c881becb","impliedFormat":1},{"version":"96e855d2b08cd12f152c557b63c6b73ad812fec1ee0d7cf07c094df06e1a6c7d","impliedFormat":1},{"version":"d0c20f46de0d62b5f905772ccb22ca6217a4c361c6e118e507d613559e9184a0","impliedFormat":1},{"version":"d1d526413f02ef1af71b2bc9f462e3220e37b591a09356da8f8268dc77f9ca69","impliedFormat":1},{"version":"e1052f29de79d5ec62ae1a31ee172d8d87c55299b869eea2a990feff5314070b","impliedFormat":1},{"version":"92929dcabd637c672157358003777785a3ca2b86d926272c5bdc4bb89eb97d82","impliedFormat":1},{"version":"cbacc519609fd5bc367ec19e0a3a560817b5682734126f9b0ad79e58ad7d84d8","impliedFormat":1},{"version":"3d4ccc84fd1463668da40364e20d4c61be9e040bd06ae95fee0ee8cf01674802","impliedFormat":1},{"version":"8071cbb70de1884e715cab304e447344283020b360db83f193e512deb5bd56b8","impliedFormat":1},{"version":"f47efb3f39dceb3018b0a023ee467221990a280b60dff29ead750d5e83757d8c","impliedFormat":1},{"version":"2a536090a9aa77f2d687e61eb7b2ea9b6feb569839b7a4043efe50d253edf29a","impliedFormat":1},{"version":"2d118a64c471fe277ec79aa4848007cad60b55c68bd29cf6102bd31e82c63198","impliedFormat":1},{"version":"ff9590ea90db4a3c6d194f50582160b52ef78f83a93145a3d9d25541b03bccad","impliedFormat":1},{"version":"b90c23a457c16f77a282531a5caba5c911d2252eb097f3193a8ee2df6a3f21a2","impliedFormat":1},{"version":"18a78c980596d0c645668abcdeb14ea32b119f5535f0cb6ee28e7e16b61844e5","impliedFormat":1},{"version":"b734d9f8d146421fd3be1b092c12732f726399f0a2fb8f7365d0bd2de7414111","impliedFormat":1},{"version":"d5be608b445099a10fdacb72200005012ac87982a1802eea12df7ac3c632f705","impliedFormat":1},{"version":"d044a98e1fde755852170ab358e11488df920f1f7ffc503352056481b2428310","impliedFormat":1},{"version":"315dc985e663d0ae2e093a554082b071b0d45b20ebc59bd6d41cbaaf3cd56865","impliedFormat":1},{"version":"428eb3b2604193a07abe50752317690e20828aa6e6d77c5b4ca5c28f0586729b","impliedFormat":1},{"version":"5b0e8e252304754eadcdb7ba0980429459eb54e2ef6466a9717249ccb56d37c1","impliedFormat":1},{"version":"f5746d75e8d224d3b896c79fb02b0ff9f25bffd28ebcbaf847b94ad4aeab1059","impliedFormat":1},{"version":"a493313486144ef7287c1d2aeaddd73375d70e922cfb1c327393763c58daa1f9","impliedFormat":1},{"version":"32d4b667d2e35297bc7a4609a9e24e6802422f5889155d6dcfc2623b8c5ccf55","impliedFormat":1},{"version":"2ffa727b142dc60fa2d1df99993c169ef9fb83fbcea94c80eac5256560f83d88","impliedFormat":1},{"version":"c8b73ee9369e3f9364dc58157b3dbd2929ae6a43beb9cc8eef6282b01bf095c9","impliedFormat":1},{"version":"b406a7687cbe03e1e5e1e491045d49c7637cf32386668a873eaa794bb026357b","impliedFormat":1},{"version":"75013c07d278b566f66a33f8e48ac9b4bd6e59961181d6010a351a84f70f286b","impliedFormat":1},{"version":"98c5134ac2aff33f992b08c44dda386a4ddb08a597445954657761ab3827737a","impliedFormat":1},{"version":"155d5820e24ed3528f291182ac9072c1c36ac484b6bc92442e72e0df918fe625","impliedFormat":1},{"version":"c50301a1a6e8a1f47604bdfdf8fa8bb2c138875bb62f15c9e24736de423bc40d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d2db193706b23385bd4ecbc3eda013e0a9f574f091b4c4706d1efd31b83c979","impliedFormat":1},{"version":"3bce3d30d4c8a3d21e94ad17ed0d8761ae8cec5a6ebcda9a895d1cccab0dd1cf","impliedFormat":1},{"version":"57f6a2cccb9545d79ac4b966705779a258b614c85b6020a9330bfce093e1a5cb","impliedFormat":1},{"version":"0abc82c7a0880d608ff23f00006bd7d9b73f57c289d94054b7d5aab13861dec2","impliedFormat":1},{"version":"6d23ffe7f1b73f16b08f5baeca430e6655b46fdc5862fd7bff1483b71fc6b28d","impliedFormat":99},{"version":"e9ad8b3e21ff0df33e1fbf658461d85fbd977321e5972b6d4522a50157c47eeb","impliedFormat":99},{"version":"abb337d9cc9a8f04c1fe061d8413c70d51c2119cef9f11eac7bfeed1e5e700b9","impliedFormat":1},{"version":"70fa22e06362d7fcf6c40540daa95c48298845cb098b629a2ce53c61be2faf27","impliedFormat":1},{"version":"397eea316fb96e682f12d43c9bb7b5cc86b9f65cea24c8a8bf8a8acf4d7f1ebb","impliedFormat":1},{"version":"174b2c19e451651f3a99a9d211f7400b029e508325f54abdd653864cff7180a0","impliedFormat":1},{"version":"177b724effe4a6e75b2f2c2bcd7f083d62a30081492603ae7d29e6f1a7875868","impliedFormat":1},{"version":"84d09cb0cf9bfa572ee2e8561382412c547c09d5f11182efeef0f1609f8e22b0","impliedFormat":1},{"version":"b3e1d6b2ccb70c008269ebe9cf906208aa0ad346d511c711e1517e5a459629e0","impliedFormat":1},{"version":"46d08ac2a75efefecd96e46ffb5d9a4254025f5768e0a04d9c4eeb6d0ed0ce4f","impliedFormat":1},{"version":"09473c7df1b52fa689fbbbb6dce0df08141bf3a073581079079196818947b051","impliedFormat":1},{"version":"0f7f7601c7fb37facb072185fed122b97971f66a4d7529a1e6229803c93b66cc","impliedFormat":1},{"version":"890b32c020e414e506e19d266b7eb338b77e3629eafb26708eefd137460add33","impliedFormat":1},{"version":"53849389d4276c43b75f7aa6a6e973bff06a79efd166ddfb2318636c725c3d6a","impliedFormat":1},{"version":"0fc4590cd63007339832fda1f9ef343aa6b0c7f8c2d247b9c72176be49a21296","impliedFormat":1},{"version":"d53beb2090e40e7e65914f21cb4659a479f2d7fcd498e2bd61a3ab178e01b2a6","impliedFormat":1},{"version":"89308a528290f199dbec22c8b23e2618df0f762bc8626aa302590b5a42c6fe0b","impliedFormat":1},{"version":"160b24efb5a868df9c54f337656b4ef55fcbe0548fe15408e1c0630ec559c559","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"95da3c365e3d45709ad6e0b4daa5cdaf05e9076ba3c201e8f8081dd282c02f57","impliedFormat":1},{"version":"d121383c508b2f18d58c5de445c0f85ac389847132e1fdafdaa417381ec83419","impliedFormat":1},{"version":"12d1767ab0c67aa497fa293b27173e429ee6adacb27cd18d2237680055fd2997","impliedFormat":1},{"version":"df34f4fd82d3a31de5d68f6d3e6c742820d496b85181ac4b95076aa3005d8315","impliedFormat":1},{"version":"f63cb353cd53da6be4a34f6fdece6316dac14fd62cccf9a4d2ce6bab2c37bc8c","impliedFormat":1},{"version":"705f2f47316c603344bb9e1aeb80be9f761feb0cd92bfee0bbc0cfd7abe9aae3","impliedFormat":1},{"version":"79727863008185c7584fb4995421bced06e6fb909eef63ec664715f4132e7a0c","impliedFormat":1},{"version":"6825eb4d1c8beb77e9ed6681c830326a15ebf52b171f83ffbca1b1574c90a3b0","impliedFormat":1},{"version":"1741975791f9be7f803a826457273094096e8bba7a50f8fa960d5ed2328cdbcc","impliedFormat":1},{"version":"6ec0d1c15d14d63d08ccb10d09d839bf8a724f6b4b9ed134a3ab5042c54a7721","impliedFormat":1},{"version":"ac393d11e2c585763ce7a8b9118ba4a809cc19f9bf6d647657d38268ed5d3b56","impliedFormat":1},{"version":"b61028c5e29a0691e91a03fa2c4501ea7ed27f8fa536286dc2887a39a38b6c44","impliedFormat":1},{"version":"a4bf154e0f9d56112713c3a7d2d60c85d667cae17e69f7869a32578881b652a8","impliedFormat":1},{"version":"d5f65e3a5277cbd0b2c89da26703c5879cc428da7ca816d1d1fcdfd7c0a2500e","impliedFormat":1},{"version":"c784a9f75a6f27cf8c43cc9a12c66d68d3beb2e7376e1babfae5ae4998ffbc4a","impliedFormat":1},{"version":"feb4c51948d875fdbbaa402dad77ee40cf1752b179574094b613d8ad98921ce1","impliedFormat":1},{"version":"51d4fca2239d818a6254ba46be06e4def3be685ec034e9255cba403d3b27a07c","impliedFormat":1},{"version":"b457d606cabde6ea3b0bc32c23dc0de1c84bb5cb06d9e101f7076440fc244727","impliedFormat":1},{"version":"859cf43771b68e589bb12c6e5cde3edcde4b530c7d324f455af2b9e61d4f4768","impliedFormat":1},{"version":"9faa2661daa32d2369ec31e583df91fd556f74bcbd036dab54184303dee4f311","impliedFormat":1},{"version":"ba2e5b6da441b8cf9baddc30520c59dc3ab47ad3674f6cb51f64e7e1f662df12","impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"b4da2f297179bf7f9f73d401f8c62c5dc2628adf714c312940f92cb658d17184","impliedFormat":1},{"version":"2cff21e4b8f1c87ed09ef0c1bf9669406d05162444ff1ad480df8fa757ff7891","impliedFormat":1},{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"523d9919e5280347059e04f2f05ea4787d6c52587d070750093c643957edd2ae","impliedFormat":1},{"version":"f373786653e1def474eaa857ecbb7a37ce0ec44d59cdca0f3223877ccbe57c12","impliedFormat":1},{"version":"87ca4ec957fd7b2044e72f0b2412eb19a11383d1f3d7d8932b4a7f6ad0297d97","impliedFormat":1},{"version":"8ba5d70fcdf6e037a5617618efa8d91feda214520d754d4de042c45f9e3d75c7","impliedFormat":1},{"version":"333f09bee08d08b6a18fda53299b63e6ccacc71a383c17700b97a0d24914f6f0","impliedFormat":1},{"version":"536b90ecabf44306f85c326243640d2837b04f168f491000850630a98ffa5fc8","impliedFormat":1},{"version":"eb766503252cd8f86e8c86c9f35e5c2c015573633aa451639f8d1a2c86956ec5","impliedFormat":1},{"version":"8d353a4fb6da4ab5be13b34accd4a78ca002f271bc144a1763e061ea94f64dbf","impliedFormat":1},{"version":"7ae6a4d1f020c558b442c90878c9c43bdb250181ccbcbc7d31e23117496780aa","impliedFormat":1},{"version":"826e817616b792f26f8b8770a123d17541dccc75a95489ef8353fd5abd8e5d52","impliedFormat":1},{"version":"24d47b7d7229917e5ea250eb92246aa86c7ba8afe4038467f515c1dafac130be","impliedFormat":1},{"version":"53ab00bde3764be64ce6917ef1d4c4bd9252adcb953a543a403b5da6a0cf97e6","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"d77695645f5fc2bd85ed997c1fbff15bb7644f123584aa187381050158a7f735","impliedFormat":1},{"version":"4e1fb7c41577ecb941994efb966bc9465dd05123a1fed07abff747b298702cc0","impliedFormat":1},{"version":"307a5ef1850442cf9a46044370f915e80a910ad9fd66097e07ad541ef0ff3d3d","impliedFormat":1},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"7965dc3c7648e2a7a586d11781cabb43d4859920716bc2fdc523da912b06570d","impliedFormat":1},{"version":"90c2bd9a3e72fe08b8fa5982e78cb8dc855a1157b26e11e37a793283c52bf64b","impliedFormat":1},{"version":"a8122fe390a2a987079e06c573b1471296114677923c1c094c24a53ddd7344a2","impliedFormat":1},{"version":"70c2cb19c0c42061a39351156653aa0cf5ba1ecdc8a07424dd38e3a1f1e3c7f4","impliedFormat":1},{"version":"a8fb10fd8c7bc7d9b8f546d4d186d1027f8a9002a639bec689b5000dab68e35c","impliedFormat":1},{"version":"c9b467ea59b86bd27714a879b9ad43c16f186012a26d0f7110b1322025ceaa83","impliedFormat":1},{"version":"57ea19c2e6ba094d8087c721bac30ff1c681081dbd8b167ac068590ef633e7a5","impliedFormat":1},{"version":"cba81ec9ae7bc31a4dc56f33c054131e037649d6b9a2cfa245124c67e23e4721","impliedFormat":1},{"version":"ad193f61ba708e01218496f093c23626aa3808c296844a99189be7108a9c8343","impliedFormat":1},{"version":"a0544b3c8b70b2f319a99ea380b55ab5394ede9188cdee452a5d0ce264f258b2","impliedFormat":1},{"version":"8c654c17c334c7c168c1c36e5336896dc2c892de940886c1639bebd9fc7b9be4","impliedFormat":1},{"version":"6a4da742485d5c2eb6bcb322ae96993999ffecbd5660b0219a5f5678d8225bb0","impliedFormat":1},{"version":"c65ca21d7002bdb431f9ab3c7a6e765a489aa5196e7e0ef00aed55b1294df599","impliedFormat":1},{"version":"c8fc655c2c4bafc155ceee01c84ab3d6c03192ced5d3f2de82e20f3d1bd7f9fa","impliedFormat":1},{"version":"be5a7ff3b47f7e553565e9483bdcadb0ca2040ac9e5ec7b81c7e115a81059882","impliedFormat":1},{"version":"1a93f36ecdb60a95e3a3621b561763e2952da81962fae217ab5441ac1d77ffc5","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"b558c9a18ea4e6e4157124465c3ef1063e64640da139e67be5edb22f534f2f08","impliedFormat":1},{"version":"01374379f82be05d25c08d2f30779fa4a4c41895a18b93b33f14aeef51768692","impliedFormat":1},{"version":"8e59152220eb6d209371f0c6c4347a2350d8a6be6f4821bb2de8263519c89a8f","impliedFormat":1},{"version":"c0bbbf84d3fbd85dd60d040c81e8964cc00e38124a52e9c5dcdedf45fea3f213","impliedFormat":1},{"version":"b7e5408914f257cad0f5a34e99d603c832c41a0468077241c16b95ecb5b1d1ce","impliedFormat":1},{"version":"bd290e7ac275592ef0e1c1e7d328c13590557ba1b5b5f44aebed475c2e11fcb4","impliedFormat":1},{"version":"4cc2476d4261cbbe72a854601a33433e7cf0465198102b5beae62ff680f553aa","impliedFormat":1},{"version":"1a2e305c79375ab419ce2b519fbbba70ba3022bb9547aac5a94a2924da268cb4","impliedFormat":1},{"version":"ad1e3ae2abb2ffead9e829c0a85b4263ad9a12c8e08683cda955e5c94e65fe78","impliedFormat":1},{"version":"86c0d826a796edc79887882b63ccf31940e53d938bb5f9c0c840b86cfbfc1ea8","impliedFormat":1},{"version":"91bfc77bc17fde47c6aabc24c87fd199bb49edf4555ff4008d47029d3d3d30c6","impliedFormat":1},{"version":"331ce4c0de07de8b8c15dc5a0c46438113a24b7db9d389dd7b6c4e8e9bba950c","impliedFormat":1},{"version":"bf92efea04e6c78dc0fb8b5087e0230a091795698742d7dc9225bbe193d73919","impliedFormat":1},{"version":"54a8ab90135de090f7bcc28c4181abf05b50ceec10fcae55908e90b3653d1629","impliedFormat":1},{"version":"669ce6c38142e9a6e9ca3a95a6e0165473e9fec4aa605a483707f2489ec51346","impliedFormat":1},{"version":"eed2bd097ef50c7f50d6de0a60dc6bc0cfd8a2695f414a825ec7e02ca5c7d4e2","impliedFormat":1},{"version":"b4a969f59b4e1c360cd32cbf05cd0a19f6dbb2dacb590a463878fc8833d70a78","impliedFormat":1},{"version":"2e4bc178dc1d1c84f824193b467106ccf818df88dd31d61af0ad07f0b986f4bf","impliedFormat":1},{"version":"0046b35b5d60b013a0b3be5d93cc20b3bf1c81fb6524074ddccc3ce46f24dc49","impliedFormat":1},{"version":"cf12b099d833429c377770aa3ebbcc4ed3e013e866cb0293d882bfc2f51dc319","impliedFormat":1},{"version":"e5db8858d0b3734899661305fe8f0977006fa7a1d65da78d6335da9a9e084ca9","impliedFormat":1},{"version":"195615e77c02689e1731d38bdf63da6bbe185e420e0abc1f22fb308a5792ff4e","impliedFormat":1},{"version":"8f82ea3a953aadf71d6de753793c1dbe91d7989f092a9b4f471764af11470b76","impliedFormat":1},{"version":"652019b49fd05575814b87ffcafdc2c845d76d1597519948001cdac9f90549bf","impliedFormat":1},{"version":"913e67977743084c57560365b44537784208b9bee68a1eea50aec617634d8c2a","impliedFormat":1},{"version":"3d3bb997e015b612386ab7d41fb7b5c1a365e73d6fafa3d38d53ce146bb063ba","impliedFormat":1},{"version":"3cc5606583930afb78edf9e5a4ee0279f2b36b084140a4a72011da69e6214bc7","impliedFormat":1},{"version":"d1e4fb36a61f22fe3955c3964957da3516aa858625e24cbf89caeec3b6bbfcb2","impliedFormat":1},{"version":"76756437f90e499eb3fcd36dbc4f71551690e74dbd4a1a75307763b3008e867f","impliedFormat":1},{"version":"dbcbca3da8471ad599a74a4e6127d31af5eaa13eb80ff348fc9a36b6d8ccac87","impliedFormat":1},{"version":"b20aeb575bc99b062e47360264d626c8e42af20963a3f394855445d280a01b4a","impliedFormat":1},{"version":"74ebb7bf48cad04b6e4a27c96e11079ff818830eaa5bc20d93f09789dd6f330f","impliedFormat":1},{"version":"a724b69397b2b9bd14baca667eab735bd7e7dbbb050b88ef82ab3484524b984f","impliedFormat":1},{"version":"5259423e4145035cf6b132e458cbbd38748b0be00569498101b8fcb7b708a99a","impliedFormat":1},{"version":"8fa93d4039e1b25f274620f0de6394335cb018b5766ed0fb3b55fa14fbd5edff","impliedFormat":1},{"version":"9c4bac47ba8afcd1ce693573e3783e1b36b284ec9c3c7438d4b6fea7492a7831","impliedFormat":1},{"version":"1906bd54c89b2a61461b70bb4d184a4a643a5122b60eb232153cf2c8753dc90a","impliedFormat":1},{"version":"80d49388ab065a8ce1ca79def1ac7c12bbf83ae2b41d91534c9db89da3b45bec","impliedFormat":1},{"version":"3458d16d5116b4544a6bd4aac2861337f585fecff9bb85043ae7214709830ec0","impliedFormat":1},{"version":"1379a47e31c8a465c237a79bd4ea45d386ecc42e3b09bc98bef1934990b6f4f1","impliedFormat":1},{"version":"9e2753cd52b5609662e9f28e70a8198f3f58db56d05e57d80c2f36c14c647c56","impliedFormat":1},{"version":"d6c2ab5418ac5cf0449ec2aa2b44c8d31a3690a7c6ecad1a0c15fb94296ea9f8","impliedFormat":1},{"version":"e8172d9cd473d2573bd5d4adb9537850c13059906043e56624455457e3d9cf2c","impliedFormat":1},{"version":"6585f14e5366c3779affc17b724102b7bbab7eb18e80e6d4abda2a7525647240","impliedFormat":1},{"version":"427f57f0ceb3bfb80b5c8576103106663e0c426b4df4a729dd4e8dc2bd8416d8","impliedFormat":1},{"version":"c7fb4441f870f66998fce9088c6b3fe92d426a0a9fc06013ff643f8b91ef5a54","impliedFormat":1},{"version":"e410dee77b1c9cbda80371a88003b9af22cc923d387eca1131db6e0b5a0f2f29","impliedFormat":1},{"version":"2d642e216d761f88cb0f366b2ac56c092912c50b65e62b57f27ce0a664253c5d","impliedFormat":1},{"version":"c0d32a523a1e6cd61bf3ef021e948f81802ec779646f47bcde4cf7264032f063","impliedFormat":1},{"version":"d93d51ea08ab5abd3ec8a92a946c1932f37696d9bf064618523b5a321b01ec20","impliedFormat":1},{"version":"154bbbac378fe41c3af7d10d254a5b325cb268eb430501f671313af8b9484fc5","impliedFormat":1},{"version":"e9618b25e89be648659e1fb9dc98fab80f3915bc382d6f9bd08cc4c622dda928","impliedFormat":1},{"version":"282be40c170b779f7dbf47d3629fb696375403e0015044062f793ac2145572d4","impliedFormat":1},{"version":"90214c6a86f8ecd7194ec504c85676a12a6007c752d37af78e38b6d7f7f88940","impliedFormat":1},{"version":"c08ecd78a58b8164255ccef4c4e98834d31f6f6edaa5347e372d9144b6538d40","impliedFormat":1},{"version":"a4e25751eb465f2eafe8e2e03fad0ee09f5e301356e8897083b466de9bd7d64c","impliedFormat":1},{"version":"7162aa6ec39d01971ac66796cbe5c655f9667d00c153e2c02954b54c3bc2ba55","impliedFormat":1},{"version":"8811cf0822434700b5d7a562537beb39f6ba39edd98c8ce36b32c5ef278c04af","impliedFormat":1},{"version":"c3699c5ca4df585b3b13d28186af587ff548488a464b390f93641654ec4ef1ad","impliedFormat":1},{"version":"ff823768e1212f68f49ce2735b8ba1bca55471bc76e2326ca26a14d5a11424fe","impliedFormat":1},{"version":"299e6202d8f1363efbe505129a66b57a24ff08d7766b1614d1a2cc01b4bf6ac2","impliedFormat":1},{"version":"7acffffaeeeb0774a9495467c9f6bf9481d4a9b4e24af5b88c7fc897d6aa6d01","impliedFormat":1},{"version":"26ce486758a7494ee69e26b69a063018e5c19811497a424e3a69909505722e75","impliedFormat":1},{"version":"7b633405cc5e7806c2798b9cce92dffe20748de5760b8f35c71b2c7e09664e5d","impliedFormat":1},{"version":"104a0c66c890cc55ee790e6e959b7c79d951d1fe4f98f3e1c5cdbffc295785ae","impliedFormat":1},{"version":"4a82633192e6c5214d388f19f6383f28923b53d3db52575d194be414e19e00ad","impliedFormat":1},{"version":"5e075bd6a9a10600d30846cc3f668f9adf3317ec91e4ce30a1620821e6619332","impliedFormat":1},{"version":"6e014aa95905c4042adca3f513dce058b38d82d6f9af247683974f5446388d6d","impliedFormat":1},{"version":"824f1c077e6fdd4fb51dcc02e25a8c562651efd9aca23c6cfc040d5312640b41","impliedFormat":1},{"version":"f740c12f7099377de24ccb35dfa19ee16ce8d320e1925de353e73bdbf472bd5c","impliedFormat":1},{"version":"0c3e81f324213691600bedd638cab9b3dc51b576bb027037e89f1ad7e899e9f5","impliedFormat":1},{"version":"04c4509d1f92912fff1757a2ac354cd1bda09cad48d0215968a9298f9456a353","impliedFormat":1},{"version":"100f9a496bd8d04bf34a14ab23bddee155dd4fa7ecd1d8f65a68d871c09580f8","impliedFormat":1},{"version":"86ed42596c031fa899d40adbb6f3095a98e13c7dbbce3872c032e428c6f3bebd","impliedFormat":1},{"version":"e076bef607f0fd9e5636fc3a55ff4b2e88ecab78ee3a0f5115c8d9df1c3245d7","impliedFormat":1},{"version":"9c5815bf4c99b2889950a11a060628dc8304eaba245cffb7fa03a8014462e0c2","impliedFormat":1},{"version":"77db76e698e83910ab1c40e6bb2cf83ca7b25c68a88a7526fcdb3db0ca245f6c","impliedFormat":1},{"version":"4eadbc80a36ca4a18b3e348bca008717cbc2ea0e446b45701c4f3abcb57f0686","impliedFormat":1},{"version":"ce8f260cf460c59bb0fe517d9c358c8396b9b3be59a1b897447fd3677de05e4d","impliedFormat":1},{"version":"6f7e11fc492153d8654a0224b7da65fdb720b202a44abe664e54dcdff29629b4","impliedFormat":1},{"version":"e3d32b0f628acf1147344fb67f1afa7d1e3144bb47287727018b4a3fdf0bc21d","impliedFormat":1},{"version":"21e80adae8f3db84532c9771d2cd4c5af66265edb811627ba5c6316175a85567","impliedFormat":1},{"version":"fb6b98bf7d4a141247fc0648b6e0aa906611742f7e356dd4d6880b4c9adbbd8c","impliedFormat":1},{"version":"3b661aee0265d0e2a0bab4237326a877debccc5ed7176bd36ff487dd106b3a84","impliedFormat":1},{"version":"f02d452ec0fa63b28a5638660b6eab0a7431ebe486c6b9e08c144e42a925cd74","impliedFormat":1},{"version":"4ba09f2149f0a459dfc51d0defca44606e7f100db76272517a5222b15a1d519e","impliedFormat":1},{"version":"8d4fd187f44fdce41faf0b547b5b60cf62265ea1229b80b9b46f711effa04661","impliedFormat":1},{"version":"64089edc83778914d8a71dc3033792254d0c6b290d724070cef8aa90f1abf4d2","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"5791c18e28a34de2eb955d8a4936d7e77fe8cb876618ee388eced7f405a001b8","impliedFormat":99},{"version":"ec25291a1070d43f79f28f45b9ba8235036acfb61249315b952146865841d2a3","impliedFormat":1},{"version":"049b67fb3aabb131ae180753ea21d2f8e51535f49bb38caa4274c59bfd5cce96","impliedFormat":1},{"version":"004360740ab4dc33049a70c82f50e261f72c1eca485d79839b2917fd49f12352","impliedFormat":1},{"version":"43d697a93e1ae17206118fdad195d6e9e6ecf47da399a01479d27a47938a14b8","impliedFormat":1},{"version":"20b53c455a7b3c034d158cba0588eb517f72c18a0df3ef93558033cbe32e2977","impliedFormat":1},{"version":"30aa90d3e13be1c601b9221edacd016d81469f952a8ab3a615a503196bac86bb","impliedFormat":1},{"version":"446c355d9b5de49c702b65878503bd414af85d48ce2416b908c1480c8431daad","impliedFormat":1},{"version":"df9191a2d3fd620062b4b6f144e71d044793478bb1e72c9bb691bb5531507e68","impliedFormat":1},{"version":"60a75cc2f56bb84283b831cfa2ba13b5c0aa8453b536d0182e4af3e6cc0406ba","impliedFormat":1},{"version":"7a1d82e520454e20ada66d4ab012942154d57fc221a0d47d5cc282fe57733747","impliedFormat":1},{"version":"a17b8efc4405a8aed316837e49fee23b7642f18300ca18fce3e5279d710f279e","impliedFormat":1},{"version":"569a53a90e24c546b67016839e66e888074111a6437f9f392ee63fed339a140d","impliedFormat":1},{"version":"641706ed3b31f01389b93036b3c39e84a17829241a5b81a5635c202cef8cecb4","impliedFormat":1},{"version":"3934ff40d5af41d638ba7b1f0850b833901dbd936390fa251beddf0f9495f309","impliedFormat":1},{"version":"23f121b6fa546ef05c21f06acf01b9c50b924473e5c9528ec5e8398ee848944d","impliedFormat":1},{"version":"281f29f0da609e131a06edc87b2fa053ccb1cc59039adff70010fdd605cbe36b","impliedFormat":1},{"version":"bb3e8164a1a1a4a8f1b91f7034241171e4a5ff5c57ff5ab630c04fb638770f95","impliedFormat":1},{"version":"dd81855d536aa94fbe8d8f0daf606ea2cddc1278fe0b366eae848434b10ef3c4","impliedFormat":1},{"version":"41ac5c6aff0589ac230848962b7880d4c7cdbe6ee582880dca618bea730372aa","impliedFormat":1},{"version":"062fabc9132d3e5489e19afa7ea835568251910fba7c294b85fff2ce7b599d20","impliedFormat":1},{"version":"7bc71d52df9d8e5cc55218d347a91b1758b38341f9cbbac0b80057aa9d93daa6","impliedFormat":1},{"version":"84606cedd02b8e7d23044f2df15b6c7cbba553d58aaf48344e4b299fce3acb05","impliedFormat":1},{"version":"d3a6e1ff56a0a760b1b36eb34925042a8148d8e0ab4c2d28fcbdbf40fb5a8acc","impliedFormat":1},{"version":"839114ddc4236b8304df6a6c7cc6784913b7c69a63afd4ecb36fc5c9c57276fc","impliedFormat":1},{"version":"cc4ecb6238b32248c6b58577a2ac2a6223c002c1a9e3f1f9424a89f44aa84f0a","impliedFormat":1},{"version":"46324183533e34fad2461b51174132e8e0e4b3ac1ceb5032e4952992739d1eab","impliedFormat":1},{"version":"d3fa0530dfb1df408f0abd76486de39def69ca47683d4a3529b2d22fce27c693","impliedFormat":1},{"version":"d9be977c415df16e4defe4995caeca96e637eeef9d216d0d90cdba6fc617e97e","impliedFormat":1},{"version":"98e0c2b48d855a844099123e8ec20fe383ecd1c5877f3895b048656befe268d0","impliedFormat":1},{"version":"ff53802a97b7d11ab3c4395aa052baa14cd12d2b1ed236b520a833fdd2a15003","impliedFormat":1},{"version":"fce9262f840a74118112caf685b725e1cc86cd2b0927311511113d90d87cc61e","impliedFormat":1},{"version":"d7a7cac49af2a3bfc208fe68831fbfa569864f74a7f31cc3a607f641e6c583fd","impliedFormat":1},{"version":"9a80e3322d08274f0e41b77923c91fe67b2c8a5134a5278c2cb60a330441554e","impliedFormat":1},{"version":"2460af41191009298d931c592fb6d4151beea320f1f25b73605e2211e53e4e88","impliedFormat":1},{"version":"2f87ea988d84d1c617afdeba9d151435473ab24cd5fc456510c8db26d8bd1581","impliedFormat":1},{"version":"b7336c1c536e3deaedbda956739c6250ac2d0dd171730c42cb57b10368f38a14","impliedFormat":1},{"version":"6fb67d664aaab2f1d1ad4613b58548aecb4b4703b9e4c5dba6b865b31bd14722","impliedFormat":1},{"version":"4414644199b1a047b4234965e07d189781a92b578707c79c3933918d67cd9d85","impliedFormat":1},{"version":"04a4b38c6a1682059eac00e7d0948d99c46642b57003d61d0fe9ccc9df442887","impliedFormat":1},{"version":"f12ea658b060da1752c65ae4f1e4c248587f6cd4cb4acabbf79a110b6b02ff75","impliedFormat":1},{"version":"011b2857871a878d5eae463bedc4b3dd14755dc3a67d5d10f8fbb7823d119294","impliedFormat":1},{"version":"d406b797d7b2aff9f8bd6c023acfaa5a5fc415bfbf01975e23d415d3f54857af","impliedFormat":1},{"version":"7d71b2d1a537fe41760a16441cd95d98fcb59ddf9c714aba2fecba961ab253b6","impliedFormat":1},{"version":"a9bd8a2bbd03a72054cbdf0cd2a77fabea4e3ae591dd02b8f58bda0c34e50c1c","impliedFormat":1},{"version":"386cc88a3bdee8bc651ead59f8afc9dc5729fc933549bbd217409eabad05ba3e","impliedFormat":1},{"version":"9005ff613f060db9698390c74576fb1a3be54867011fccff9976c486e63e6592","impliedFormat":1},{"version":"0093199377d2d328c7ceaf77d76bf518d0520f569ea04a8e10d76e3f691022f9","impliedFormat":1},{"version":"c9d40f387dad53ab3510ef147872fe3e28f1fad96ccd36006a5410733e2b7a6b","impliedFormat":1},{"version":"51e86f953657a8226f59c82bd22e2d1b2ece468fb1beac6f16591ba778fec2c2","impliedFormat":1},{"version":"f9d6586afc335a86d826509948d820369f837d8ea06fe5be065be02dbb3fd00c","impliedFormat":1},{"version":"6b7b8218850f21248a311812c4d6c196ffc293e0e41c71eacceafdfa6c74eaf0","impliedFormat":1},{"version":"f1b960f33f68bcb6685806b9471dc415676108541ca0db3c0c6cae512bed87dc","impliedFormat":1},{"version":"6a7572e29ba3dbec7a066a82fa0f7b57268295a8120467ba81ce3165e0e63aa1","impliedFormat":1},{"version":"4ac0045aa4bc48b5f709da38c944d4fec2368eda6b67e4dd224147f3471b7eaf","impliedFormat":1},{"version":"dbfa8af0021ddb4ddebe1b279b46e5bccf05f473c178041b3b859b1d535dd1e5","impliedFormat":1},{"version":"7ab2721483b53d5551175e29a383283242704c217695378e2462c16de44aff1a","impliedFormat":1},{"version":"bcd53fb10140012c84d7440fcf5e124643bb1b7898909d6220f1308bd8a94e7d","impliedFormat":1},{"version":"15c662fe6ce3e8d1bf0d44191296e37420e0823a81958f2c79618890282c0a59","impliedFormat":1},{"version":"1538a8a715f841d0a130b6542c72aea01d55d6aa515910dfef356185acf3b252","impliedFormat":1},{"version":"68eeb3d2d97a86a2c037e1268f059220899861172e426b656740effd93f63a45","impliedFormat":1},{"version":"f521ab6dd9c7d1bffed41fc69f1c7f763743ed4bbc07a4ccae664e65c84711ee","impliedFormat":1},{"version":"0d65250cfc0a084baa749f9d00d0d772fb4ddcac6e0542ca33b61da515b65ddc","impliedFormat":1},{"version":"675e5ac3410a9a186dd746e7b2b5612fa77c49f534283876ffc0c58257da2be7","impliedFormat":1},{"version":"49eef7670ddfc0397cfd1e86d6bcff7deecf476efb30e48d1312856f0dc4943d","impliedFormat":1},{"version":"cc8d1de1eae048fb318267cc9ddd5a86643c46be09baa20881ab33163ca9653b","impliedFormat":1},{"version":"d6025465105bae03153679b3241805998316f492a6a449f14cd8b92489c2a6a9","impliedFormat":1},{"version":"63de4f4c8ff404aa52beaa2f71c9e508d9e9b3250b2824d0393c9dcfee8ab8d6","impliedFormat":1},{"version":"27b33e3a7a19563752b13d0973039240b549ede107009dc02866e12c5dd2273e","impliedFormat":1},{"version":"48609767cd72c5b4714dc76f3ab7bfe1c54c245d4fea5bb5122b631d9a8ae963","impliedFormat":1},{"version":"a7f590406204026bf49d737edb9d605bb181d0675e5894a6b80714bbc525f3df","impliedFormat":1},{"version":"533039607e507410c858c1fa607d473deacb25c8bf0c3f1bd74873af5210e9a0","impliedFormat":1},{"version":"c10953c3930a73787744a9ab9d6dca999bbf67e47523467f5c15cf070bf7d9fa","impliedFormat":1},{"version":"4207e6f2556e3e9f7daa5d1dd1fdaa294f7d766ebea653846518af48a41dd8e0","impliedFormat":1},{"version":"c94b3332d328b45216078155ba5228b4b4f500d6282ac1def812f70f0306ed1c","impliedFormat":1},{"version":"43497bdd2d9b53afad7eed81fb5656a36c3a6c735971c1eed576d18d3e1b8345","impliedFormat":1},{"version":"b13319e9b7e8a9172330a364416d483c98f3672606695b40af167754c91fa4ec","impliedFormat":1},{"version":"7f8a5e8fc773c089c8ca1b27a6fea3b4b1abc8e80ca0dd5c17086bbed1df6eaa","impliedFormat":1},{"version":"d2c19aa3fe2b5fab220c5f1e911ac5a936ad771a9c5cd3d00d1e868112ab97ad","impliedFormat":1},{"version":"3f7081ce9e63775009f67c7fc9c4eb4dcf16db37e0b715b38a373bad0c07df69","impliedFormat":1},{"version":"724775a12f87fc7005c3805c77265374a28fb3bc93c394a96e2b4ffee9dde65d","impliedFormat":1},{"version":"5c37b7e2b41f0a8af443cb1d589c171e0dcf0dbfbde2569632af87f24e5ea893","impliedFormat":1},{"version":"5b0a37625653b878a2dea8a2bd3606b08afd4c5435c602123f93d0abcee7278b","impliedFormat":1},{"version":"3960170989120c4776de46353f760dc83e625356120c9f4ec551a100bfad304b","impliedFormat":1},{"version":"5d2c3510e9435b1425701545b7256f54ea50f04d90ccefbb1c59630437574f27","impliedFormat":1},{"version":"6de61e2bd3f74ca8431d013bdee0667ad140f6c33e86ef0bffc3eecd0a177c0e","impliedFormat":1},{"version":"2da6a88db7c63476444b4f86836a181afc665a27a76216e2573228e31945aa20","impliedFormat":1},{"version":"4e1a7d04c48095bf58b4d412d2032026e31f0924eb4c1094366fbb74e4d9ad3d","impliedFormat":1},{"version":"0f67da0334f5cfe857d3a691d77b1b77969b19680ca17a4d5257fb2ee7d1cdc2","impliedFormat":1},{"version":"be1df6dd59c2cb384f8c6d67637ec39c4bba868eb132d890999704c2b891a53f","impliedFormat":1},{"version":"2b809c20f0f23d1b7e136cbb1f20dbb04ac781e2bb53059938b183e42a1a37d6","impliedFormat":1},{"version":"aa9a80428c275bcce3ef886f726084ad858678cdd8fbad418c044f449c8eb42c","impliedFormat":1},{"version":"09a7b3e963e5fc1cd24cce8eb15f52bfd45890f398afeff8aea4e67031458719","impliedFormat":1},{"version":"4990ff30f9b1f09013cc502acacf9986f161df8ec94220c997a674da29a12d34","impliedFormat":1},{"version":"29eb3afed89c7362edc4c490a7ce5437079a5d7cab7f56b2728fb503e266c6ca","impliedFormat":1},{"version":"cb01a788fc87e8359538284b34f2dd160798ac47417b356acd9c42c83e9a6e9e","impliedFormat":1},{"version":"901716549627e07fb0e37968cfba8bab25df470d409376e19ea69ef06409dd3e","impliedFormat":1},{"version":"a1e8ec7e9901514002cebcf3b0eba3c9e5b6a043d4507d3c0e0f11917d570d95","impliedFormat":1},{"version":"f7841d94fe925565ecbdd070fa5fe07052b1e3bc46167beb247bb1dcf4442fa8","impliedFormat":1},{"version":"31e320e0e0c1402d0ee9106856fe61bebc9ea5a6a36db3917382341b6569bbfb","impliedFormat":1},{"version":"3bf9606754f29616647616a0d650355a63fe6ca59a84007a2ddad25d83338909","impliedFormat":1},{"version":"406cc85801b49efd5f75c84cc557e2bba9155c7f88c758c3fadd4e844ad6b19e","impliedFormat":1},{"version":"212e1c5d8fdc6a8dc56fca0d49eb259f4acdfcfeac47703cff9dea655cc0e7f8","impliedFormat":1},{"version":"f7663954884610aeb38c78ffd22525749fab19ab5e86e4a53df664180efd1ff5","impliedFormat":1},{"version":"3e717eef40648a7d8895219063b1e5cb5bcc404bc1d41a22b91f3140b83bce1d","impliedFormat":1},{"version":"600acd6b479b1da5c0ae64fafaae5c64240c91d0de813874551654cf4009a160","impliedFormat":1},{"version":"4b73e6d036a63808de72e3ec923c9c7882190c1c11125c38bd79d576c7222ca7","impliedFormat":1},{"version":"ee745db646de4c5cf019e495ff5d800ed6f4ee9d9b3aaa7b2c5ca836928bc80e","impliedFormat":1},{"version":"e4e1fc1477160e68acc00771da34e7fdbe8f79df9ab44180ab5399e93e5f19d0","impliedFormat":1},{"version":"bac9f213ee4dd92d46fa5b0cd2e37700ded37b67da9baffa9e018be13af3a325","impliedFormat":1},{"version":"579e6decfc186b7b51fdb0827a04d5f82447c5e4df7eda5e1b30112f933e8616","impliedFormat":1},{"version":"02829418a7f51f2c055ebe66b5517c78e96a8d2046f127da1f76315c5f85f123","impliedFormat":1},{"version":"57e9b5eac33eea651be65388850dae662e3ecdb46a2fb881e3d03a674f5b58f8","impliedFormat":1},{"version":"e9192d5289af0e83197efce93e27a1a0d7285fe326b0dfcd52671f257f2cbd74","impliedFormat":1},{"version":"a7b605aa6a6f6911f84fabb0a41b0c2db0f06686a29f543578062d31f41571a9","impliedFormat":1},{"version":"002339117cf8443ad8660bc315c8a9208a061ea585f0fddc8d0d71600fcfbd24","impliedFormat":1},{"version":"754e8646783a88ec36b1b3fbad5948ade71d9d4baeadb2b631fe1238d4edd7e5","impliedFormat":1},{"version":"b442a0fc07bc071670c0f464bee4dd4ca28c50e1abeaebc674b021f8ee2cf9ff","impliedFormat":1},{"version":"a8d04c73d75a651d8614cb2f2c7c23aa8e4bc24a74248374a4535f5691a1639a","impliedFormat":1},{"version":"9d29d392c65cb1dae171422796ea0aa150fe945ce1fa684168a8a7b74fe91551","impliedFormat":1},{"version":"dd295a5bcbf58d6f94e6680a903bc726788f6f7ca072fbbb1779fbf44dfe7d3e","impliedFormat":1},{"version":"f1fb5afcf72b7dea209dfc1f4426a8c503012fccedf5072290acdcae95327a6d","impliedFormat":1},{"version":"f2a9893b419b6293ee3f0a7bc4c4ccff023271e561e9214520d7e93d7093ce57","impliedFormat":1},{"version":"b0b8db3a03d7bcb79ff645ae94b0adbc7c3965912ae0e496f3559a00f4d45dc1","impliedFormat":1},{"version":"01fe30f362863ad39a18347976be4e527e16fd250c211ae122ed128a50bb5383","impliedFormat":1},{"version":"d8d8c937d0167d2121f0b0bd32bc7a5583fa4d62beb5d110d0ab8e5b8424cd66","impliedFormat":1},{"version":"5de039490a4bae1646ab1c0ffb561b24b334ece7e02f14fc8a81dbab0d795c44","impliedFormat":1},{"version":"b5d546af0284c6c15aa5e2cba304bbce15ac0b319c5683c77f9f9424588df97a","impliedFormat":1},{"version":"52e2f1efa9e36f3edb9abd6148a0b110b1d4253cbf4641389913e6e5fba7c8fc","impliedFormat":1},{"version":"5ea39732426f0fbc03af1915382153c0693f074067e83ec06cd0969e00b308ff","impliedFormat":1},{"version":"ac30e1db4591b60bf96b57e68d1caba0f0e34ddf67040584216d1cf007b3aa8a","impliedFormat":1},{"version":"cd0e652d83a41ac79f9c343e4a8dd629c44ff009857b7ae3e26e1f33b613fd6e","impliedFormat":1},{"version":"56dba2f61eaeac928ef53a9c4b6df96df33834f0b8d39f59ac820bc4f0b65f5c","impliedFormat":1},{"version":"cd34fe236632c8c8cebdaa374d5b6ca4edfdfef0bc29d365f6613498970b4a44","impliedFormat":1},{"version":"e009f9f511db1a215577f241b2dc6d3f9418f9bc1686b6950a1d3f1b433a37ff","impliedFormat":1},{"version":"a82f1cae07471a353623bedad67e7fb26eb626d7791142cfe6037cd9c4e7bde3","impliedFormat":1},{"version":"64d15723ce818bb7074679f5e8d4d19a6e753223f5965fd9f1a9a1f029f802f7","impliedFormat":1},{"version":"2900496cc3034767cd31dd8e628e046bc3e1e5f199afe7323ece090e8872cfa7","impliedFormat":1},{"version":"6d2089f3928a72795c3648b3a296047cb566cd2dae161db50434faf12e0b2843","impliedFormat":1},{"version":"97e8c3a9ffa71c62eb745f3eeb41d493e42127baca20b7cd03e4a53702e99254","impliedFormat":1},{"version":"6ea62a927ac2607a6411804617e52761741fae66e533f617d5fbf3f3eff1073b","impliedFormat":1},{"version":"ac8582e453158a1e4cccfb683af8850b9d2a0420e7f6f9a260ab268fc715ab0d","impliedFormat":1},{"version":"c80aa3ff0661e065d700a72d8924dcec32bf30eb8f184c962da43f01a5edeb6f","impliedFormat":1},{"version":"42ac0a2d5b1092413b8866603841ce62aeaaf4ee51d07dd872e6a2813dd83fd5","impliedFormat":1},{"version":"800336060bed9892ffe5b618002e55a6341589d49f33f0b4f0aeffd950e90180","impliedFormat":1},{"version":"ece1e5ebb02df1f9a6dcc24dd972c88b065b2c74494b3c475817b70e9a62c289","impliedFormat":1},{"version":"cdec09a633b816046d9496a59345ad81f5f97c642baf4fe1611554aa3fbf4a41","impliedFormat":1},{"version":"5b933c1b71bff2aa417038dabb527b8318d9ef6136f7bd612046e66a062f5dbf","impliedFormat":1},{"version":"b94a350c0e4d7d40b81c5873b42ae0e3629b0c45abf2a1eeb1a3c88f60a26e9a","impliedFormat":1},{"version":"a4fafc9e188dbcd3f030170698b98d0610290b923baa6dbc5ef73652fa73239e","impliedFormat":1},{"version":"ceea84e44e119a15325c107bb6a9da6f567fc0dfe0c7c0f0e14e01a6c414965a","impliedFormat":1},{"version":"bfc0481f643bb66acbe6ff99773257c7d7b46b3a675faa4facc7bf50a8ba2208","impliedFormat":1},{"version":"f218c747145eec6830f8e0efc8d788987f67fce6dabfcb70bde3560bf47d0511","impliedFormat":1},{"version":"f13c9631dc6452116f3a986087dd9a7821b22deeb0c786b941d1483b35189287","impliedFormat":1},{"version":"4bac0f7f581329423f654f76d113f9073b4d18fd6e83b84beca4af9b5ed4fee9","impliedFormat":1},{"version":"1ba3a5fb02029c4bb2e542ca700e3308c972a7b34b153b344b078e45ea0db005","impliedFormat":1},{"version":"94d8bc3c878752ee289d7c3f3549f32881e29fcc561c8bf9d9f2cd67b558ed93","impliedFormat":1},{"version":"832818ee76c21953841e09e96746111036d81c4c43347514f3efe95d1a36b435","impliedFormat":1},{"version":"506f020d57f0533306ceea918d20b9750693bd41276100f39a13a88bfe51a356","impliedFormat":1},{"version":"6a54f042169c236a081d5b1a5fb4264a9f96a9da36d38ea1c1c70861516cee1b","impliedFormat":1},{"version":"27e2205915bf8367b3f405ccbb398e568a11d20875195e7cf1c830a021d6ff2f","impliedFormat":1},{"version":"33bb615855e9cb95ab454048b66152fc189cfcc815a71968f3fba0568a493dac","impliedFormat":1},{"version":"b779faa2a3191da938e452c648c35b9aa6fc86f8c8917d32d510d99b5b9ea44f","impliedFormat":1},{"version":"798367363a3274220cbed839b883fe2f52ba7197b25e8cb2ac59c1e1fd8af6b7","impliedFormat":1},{"version":"6ded4be4f8a693d0c1646dfa2f1b6582e34b73c66ce334cb5e86c7bf8c2e52b7","impliedFormat":1},{"version":"6d23119f30c32c38641427d412d1cf04d0119d22b4b12016043e261e89291b5f","impliedFormat":1},{"version":"ccc141e8cef1778f472f5c926bf164deced9a1260ef8121338aa862c1e81d5ea","impliedFormat":1},{"version":"9b1323fb6eb0cb74ad79f23e68e66560b9a7207a8b241ac8e23e8679d6171c00","impliedFormat":1},{"version":"c91045fdc3c29b254f43cfeafa16352bd096fadc4fce049fabb27dcf10da3095","impliedFormat":1},{"version":"f24a4036618daef36e431afd8417117c929d5604c60965ae7964583ea0f09c31","impliedFormat":1},{"version":"7a9957cf7c1985b926411d7d793478f0bc799153ae132d2e50b332f191656ced","impliedFormat":1},{"version":"e15eccb94daaa4d448274028eb3b1e58d349a1297266587b2f0fd13673fed463","impliedFormat":1},{"version":"4d87d725598b4b8bdd2a3118c1f127d7dbb4fa95e6afaa445ebacad54c8e0e12","impliedFormat":1},{"version":"7ccb0ae2d3e1bd2caa8f58c8d1b02748beff62864a03799b77e43d9be81b357e","impliedFormat":1},{"version":"86eb11b1e540fe07b2ebfc9cca24c35b005f0d81edf7701eaf426db1f5702a07","impliedFormat":1},{"version":"ee3457d827475b9e64ea793f49a83fffbb4b8fefe534b8f0a340b0e47d786e76","impliedFormat":1},{"version":"fffa170e6cdc3ea77232266f5c6d755f224bcb2ec28aa2a9275e7538f2d5902c","impliedFormat":1},{"version":"2cb440791f9d52fa2222c92654d42f510bf3f7d2f47727bf268f229feced15ba","impliedFormat":1},{"version":"6cff5de4b41e77461810f8e18591208b9a2955287de3cb4fbe50707863f5c1da","impliedFormat":1},{"version":"64e07eac6076ccb2880461d483bae870604062746415393bfbfae3db162e460a","impliedFormat":1},{"version":"5b6707397f71e3e1c445a75a06abf882872d347c4530eef26c178215de1e6043","impliedFormat":1},{"version":"c74d9594bda9fe32ab2a99010db232d712f09686bbee66f2026bc17401fe7b7e","impliedFormat":1},{"version":"5cebae0ade5c1cfb00534f5159a85b71061f59d45e48a3714e42e47f5431d1de","impliedFormat":1},{"version":"7c2a1f2b048cad0c92b6efee620299a26d09fb1890b631077e6c2fd43a00b488","impliedFormat":1},{"version":"07ea97f8e11cedfb35f22c5cab2f7aacd8721df7a9052fb577f9ba400932933b","impliedFormat":1},{"version":"89d38c7653de0c74c3752f77ef50472e158fd37304c58dca3ec3ab0e03ec40e7","impliedFormat":1},{"version":"b646e3d74123131d98458615cd618b978d38670f5d15e87767eb7466b04017bb","impliedFormat":1},{"version":"5461f831e6afb7c73eb8216500d5670f5ee89644dc7835cb161825895776cf8b","impliedFormat":1},{"version":"ed6d3024f7812bf10119bfb0e14ae6ed13b4080caa08a6f8704ff1c3fe78f919","impliedFormat":1},{"version":"cc0e834c8cb2733d07941d61b178ff4600bb98f3a85082a5e2f20728f1029a96","impliedFormat":1},{"version":"bcd3257c5486e9c4572ede5089524f899824dd86fd910f5b826d6838019b745e","impliedFormat":1},{"version":"4330d600b00d422bde3bc445365b3724a13ebe8c1fd63b79ef9889c01932c445","impliedFormat":1},{"version":"bf22ee38d4d989e1c72307ab701557022e074e66940cf3d03efa9beb72224723","impliedFormat":1},{"version":"39aa4e7fb238e24c127b6b641dd7f20eb0dd99a0a1d994d6ff1d82a6ac251db2","impliedFormat":1},{"version":"1f93b377bb06ed9de4dc4eb664878edb8dcac61822f6e7633ca99a3d4a1d85da","impliedFormat":1},{"version":"53e77c7bf8f076340edde20bf00088543230ba19c198346112af35140a0cfac5","impliedFormat":1},{"version":"cec6a5e638d005c00dd6b1eaafe6179e835022f8438ff210ddb3fe0ae76f4bf9","impliedFormat":1},{"version":"c264c5bb2f6ec6cea1f9b159b841fc8f6f6a87eb279fef6c471b127c41001034","impliedFormat":1},{"version":"ff42cc408214648895c1de8ada2143edc3379b5cbb7667d5add8b0b3630c9634","impliedFormat":1},{"version":"c9018ca6314539bf92981ab4f6bc045d7caaff9f798ce7e89d60bb1bb70f579c","impliedFormat":1},{"version":"48a2488687e14191e50930fbd59058638af6c35c7432ce99d87b575e566816cc","impliedFormat":1},{"version":"b83a3738f76980505205e6c88ca03823d01b1aa48b3700e8ba69f47d72ab8d0f","impliedFormat":1},{"version":"01b9f216ada543f5c9a37fbc24d80a0113bda8c7c2c057d0d1414cde801e5f9d","impliedFormat":1},{"version":"f1e9397225a760524141dc52b1ca670084bde5272e56db1bd0ad8c8bea8c1c30","impliedFormat":1},{"version":"84672c9c04b7196492d5ae49eeaff8a7986415898a276c73c0e373e05f99a045","impliedFormat":1},{"version":"717242c9a1be7039ea5872293a9acadcab0e578221f9523d1534267fec31d60d","impliedFormat":1},{"version":"25ce1a008a22dde9d87f246fb6333326ffa25e97638b0fb089bbde98db162038","impliedFormat":1},{"version":"205782c84bd8fefaec53ea1fd8f39f0c24edec5646efc3e0ae3f845e3c25a64d","impliedFormat":1},{"version":"0a59618dbe7d0f908d0f3048ea531aa800efaf90333e9c35c93739c58e5ca690","impliedFormat":1},{"version":"d49ebb15bb1c271dc76288224b63cc44b3f02c79a1d948e337c18adeef90cfba","impliedFormat":1},{"version":"8f74411dee5fae6beed6853c3801c341a4450f8f96584fdb3ad5a9c0ae53fbaf","impliedFormat":1},{"version":"aeb0397dd2a327e08ca26c4c994cc1b717760fe84875a26a68942afa962335d7","impliedFormat":1},{"version":"3d3ae6e52db463bfdb75c6b2eb072347f92e69729121df5a3f483357bb1f5e87","impliedFormat":1},{"version":"b8f82d41cea56ff946edaae17a48632ab0a751746acedd576e4e2f1c549d5897","impliedFormat":1},{"version":"67438cca5c7a20da8da6a6b036d1e955a17a649c9e7d4b6d501d99eac545a632","impliedFormat":1},{"version":"17ad231ed3910a740c20ea768f883b1abfe34b5fe5c2df1ac667a8cc97a0f616","impliedFormat":1},{"version":"cd64480a054428377936c0f548b20efbb4ef6fd1ae8e7ad2d3056cebca826e04","impliedFormat":1},{"version":"e5857f849c8b5f4ba9e68bc5db841033aec581307b89fd4488ab9618d17899a0","impliedFormat":1},{"version":"f6cc95eee2945cc5a2442efbbc65c701c64ae728d3214db9706ab93b73e0ab40","impliedFormat":1},{"version":"9a0ed58ea04720cb86e0612ce945c47d60fc08d99d2692d6599aa6dfa795f761","impliedFormat":1},{"version":"94843041f5c123ffa4b2a65c9d48a702dc0979f432e87b3dd20d10b8c2e18f7d","impliedFormat":1},{"version":"d8e58a2f260417ee50ba8617e9cfbff33a60dc7daaeebb0b45ee8bbb481ab69d","impliedFormat":1},{"version":"0b8aeefbfb9457c77539bab00cea9b9a5cec324a25e78dbfc3b7a4b9df916a63","impliedFormat":1},{"version":"70f7634df4057b4589a7237f8f5bd4e9b4a87090e3a229daca6a77b0aeeedf74","impliedFormat":1},{"version":"41ca214cf922678daa4dbfbe0f72cc9ac9c9858baced90041a64d4b29430fb25","impliedFormat":1},{"version":"e6872602b3df829d8f917a3041aa2d6d65cfde2bf02c881f0a623139aa30771c","impliedFormat":1},{"version":"793b9f1b275af203f9751081adfe2dc11d17690fd5863d97bd90b539fa38c948","impliedFormat":1},{"version":"beed155a5e1afea3e1ef98c6683c50c1847289aae642311d4311b6e593a5244f","impliedFormat":1},{"version":"4d6739cdb0281c821c4b32c34fd27bd645f44ecb1d94faeef3778ba56f48e849","impliedFormat":1},{"version":"a089122411d0b1ff69f29c69bb6508f7b2a05217ec4dc59cfbf4ca94438eb335","impliedFormat":1},{"version":"fc2a37ee713244cb7637c234c7a5f9e28a528f9c57900b0d2115582c5b1ca1fc","impliedFormat":1},{"version":"9defec48792eb36d98b1f70a0f40f774e3780ad4e425b0d8e58d50c1f8369305","impliedFormat":1},{"version":"641c352ad84e531b132e64b265a465268fc3f1696614167b09a06de38f1ac970","impliedFormat":1},{"version":"c2255e6161b53f68119153eb8934826f88598eb16497a8d8317118a6b063d91d","impliedFormat":1},{"version":"e2cd39ab95a65eaee2da3cf1f7e28384292700b654f51577c6a5ce8cddbf13e6","impliedFormat":1},{"version":"f55960e83495d1fab2114dfa2d736757c420ee09eee7c2046c9ff437b467e4a8","impliedFormat":1},{"version":"f747de81c3649375ee6501e9d94d8fd67a71917e125d9a317c90f11011459659","impliedFormat":1},{"version":"7faa2aa6965c47bb2d6f5b33dba91cb4f70a5719e40273cb757c9adfcd72da41","impliedFormat":1},{"version":"815ea6ee026297c44af5d9b963c012b0da38cbe3d3dc830d5ebe05079317cad1","impliedFormat":1},{"version":"eccb3963a8d27716d653a4caff025f7c89c1245832fe6870ce24089405b1a63e","impliedFormat":1},{"version":"c44eb4739aa8f1e4214aa319e9cca0cf425925f89e37152ceea0875ef04dd46d","impliedFormat":1},{"version":"cd880a1c05e7c24d40aded27556b90453088638c9b6e7220f290774c86d71bd1","impliedFormat":1},{"version":"420002e73ee299efc12baa093df460f6a66dce91dd7d0a2b0e3fd01245939353","impliedFormat":1},{"version":"0db041c0ea399e13a1fe96dd271f45c696d3d27a56265e90d9218071b2500d2a","impliedFormat":1},{"version":"b061bdeff41c41b184f19dfec83d14833b0b2c06bd9a150e9e4e9cca17fa7544","impliedFormat":1},{"version":"a954ea4697209119cf5ebf33f510954edee0425f693b59b6b9889b9657137b5c","impliedFormat":1},{"version":"d1a0cc6bba7bbe5000160a783f1bb0dc75b0e1f542e2c5e7d6f50a9f689693d5","impliedFormat":1},{"version":"f01094b6fe8a646ff692619f5f94bfce776ca4883cf263f4e09163cb6ef3998d","impliedFormat":1},{"version":"6aac2c5ca00378e4d1421a03f614643dc1e9fd02279257cbf2e8e2a713b00907","impliedFormat":1},{"version":"254510b0a3c2e04f55e98ae89a6aa42f67852c192c3502b3b8488e578b21c9d6","impliedFormat":1},{"version":"b75be7355591118207e7f24143b27a860da4043a1950c746e034313d9ded4137","impliedFormat":1},{"version":"da15f699f56ab6a37b4eca73eb14a356f5d175d979f0c8197d325d5f23c91bd6","impliedFormat":1},{"version":"066658c82798043c6858e95275532be5db2a7250171552ae8434ab2f7bc1fbdf","impliedFormat":1},{"version":"d8c3b3c16a4a8656dcdd394df0df07d3149816cb96a89935d62cafe4dd84009a","impliedFormat":1},{"version":"e982879e6ea8ddf8899f637e639bc225996a729e07f068afb120d32fb4feebf2","impliedFormat":1},{"version":"94616e40e31224cb261a78c5cb96fd3f65f9ead7052eac20fc6c975714f3840c","impliedFormat":1},{"version":"931574e125523649902eee2db57c221a1b36417db4f2c4665bf38ce2170ea06e","impliedFormat":1},{"version":"cd0c8c8b5002ec4cac9e8a5e26d853549c5c446a670fb375b9c052b345fb5da1","impliedFormat":1},{"version":"7d27796c034612b6016db97555b84f1005dc3d55e2286379d48ec8db475b6430","impliedFormat":1},{"version":"0d59de214eefc455e13a7f747c011729ee76f1554fdef55554ecf4bfeb20568b","impliedFormat":1},{"version":"e16ecf37f6f2ca79ff19ba2e4c3697ecd9d38b8d01bf6682bc4003d0d5719651","impliedFormat":1},{"version":"845154327584247966f7dea7a3e4960906b7038cbe23ab43fb198539ca12204f","impliedFormat":1},{"version":"cce34c68dd760a55d002eaa02390985f4aeaa39786679f54ade28be6229792e9","impliedFormat":1},{"version":"1245b8e5e176fc21ced594f675f3c8504eb0d026378fdbf69720df8d26a36d51","impliedFormat":1},{"version":"16a83ea1aa3ec1565c0a5ab8f19e561705b9cf4906ac3cc8ad0241005ae9220b","impliedFormat":1},{"version":"162ffbed80dad8ce0cf81c330c88dccaae85425fb457a6afcae0110419bdedfb","impliedFormat":1},{"version":"a85d6e7924c263fdb7a9e28a578401f2f96950ff9fd0e250c76f25de5ce3b9f2","impliedFormat":1},{"version":"8d5531ae448e6ed9e35170d5abfea411fadd991cbebee85f95f0462ae69f1a8f","impliedFormat":1},{"version":"57947d16b34a3811f854965fe668e81ccea9dd6321e412ea1a2c75d4fd2619c1","impliedFormat":1},{"version":"e9d4bfe42849ba995ab572beba5f30bd484e88f9441a4eb223a54ddec0c4d490","impliedFormat":1},{"version":"0c61d4bd98466fd7fbabeb25f4c0005bca7afcc116a01fdeb5e4fccd88d5d26b","impliedFormat":1},{"version":"4bc4c7612f5cc6298b01f76f7a21674181ae6e199a0b07c518107c15bde32344","impliedFormat":1},{"version":"64ac258ac5b6438953854569b48c5f5fa297aa9ea9f98b9ed00744281ae6e6b2","impliedFormat":1},{"version":"1e2ef7ca205a4cfc4b4831b826a233841a87219eea0008de0211c43d8a265e14","impliedFormat":1},{"version":"548f56153b3ffbb32200800b8eddfdcef493e8f8c822a5c9ba261f8d25cb556e","impliedFormat":1},{"version":"b3b60b049eaf9d26c4b25ec2b18ce5256b85b7b4da159321e1c1636cc07107b5","impliedFormat":1},{"version":"d7a9f58ab3377091225b27e89f1beb1a988fdfeb2d230402392140ed21c4acb4","impliedFormat":1},{"version":"7a1dd1e9c8bf5e23129495b10718b280340c7500570e0cfe5cffcdee51e13e48","impliedFormat":1},{"version":"089a6395595f1cc7935914a2cdd1c549df5fba54a1f84fc676a64055158e455f","impliedFormat":1},{"version":"e2863ddf5702451fb356d28648eb12e132713eb6497c9ca1e50cce108e5914cd","impliedFormat":1},{"version":"b4d3f86369d7ac2286243f4dfc9dd7664491bd973e5442c1ec893bf7e1a26d1e","impliedFormat":1},{"version":"9982c2cc3c68f4b1aa3a9c7fbd5498ce19a70e1fe4b836926bd66424247001de","impliedFormat":1},{"version":"198f4773abdcfae0a973a27288ca741a706c18047967a23acf06caeb9f437a66","impliedFormat":1},{"version":"de37265369c848f4700af0f9619f8c166a5fa609eab6cb29dd2b6abe9891d676","impliedFormat":1},{"version":"a17c86713faa7fe77753013fdff24b0252863554da3dc55105558a725e2e770a","impliedFormat":1},{"version":"670f447c640b5d8736a1de907fc5ae441f4466a0d90814faf2600b30298d71ca","impliedFormat":1},{"version":"1cf4c4a0243a7309384eb53e0e5da641746db53a1307c13396549682f3ed0967","impliedFormat":1},{"version":"6028f04ef024af08b98625cf258805283104ad75c8a2c3d42e1dd10bd6ced591","impliedFormat":1},{"version":"7f7f345bde08e3b9cee1ce46ad8102f4b6ce96910b544a1a443f56e14a0f76e4","impliedFormat":1},{"version":"48f670079e435a3b12648e2030b26a5ac8f9a3fb54f5085ed3a432caffcec30e","impliedFormat":1},{"version":"435d25a5b10af2beeff94f5e4affd3aeb5c47c734e562cdf4b0de85628282201","impliedFormat":1},{"version":"7e2c579409d82f952177a0e574c1cd0de789e0a89a41f1a45562386f25ce6a76","impliedFormat":1},{"version":"884aab8c07224434c034b49e88de0511f21536aa83ee88f1285160ba6d3fb77a","impliedFormat":1},{"version":"130b39b18c99e5678635f383ef57efaa507196838ddabb47cb104064e2ce4cd3","impliedFormat":1},{"version":"2556e7e8bb7e6f0bb3fe25f3da990d1812cb91f8c9b389354b6a0c8a6d687590","impliedFormat":1},{"version":"ad1c91ca536e0962dcbfcdff40073e3dd18da839e0baad3fe990cf0d10c93065","impliedFormat":1},{"version":"19cf605ba2a4e8fba017edebdddbbc45aea897ddc58b4aae4c55f382b570ff53","impliedFormat":1},{"version":"7618d2cb769e2093acd4623d645b683ab9fea78c262b3aa354aba9f5afdcaaee","impliedFormat":1},{"version":"029f1ce606891c3f57f4c0c60b8a46c8ced53e719d27a7c9693817f2fe37690b","impliedFormat":1},{"version":"83596c963e276a9c5911412fba37ae7c1fe280f2d77329928828eed5a3bfa9a6","impliedFormat":1},{"version":"81acfd3a01767770e559bc57d32684756989475be6ea32e2fe6255472c3ea116","impliedFormat":1},{"version":"88d0c3eae81868b4749ba5b88f9b6d564ee748321ce19a2f4269a4e9dd46020a","impliedFormat":1},{"version":"8266b39a828bfb2695cabfa403e7c1226d7d94599f21bea9f760e35f4ca7a576","impliedFormat":1},{"version":"c1c1e740195c882a776cf084acbaf963907785ee39e723c6375fec9a59bf2387","impliedFormat":1},{"version":"137f96b78e477e08876f6372072c3b6f1767672bf182013f84f8ae53d987ff86","impliedFormat":1},{"version":"29896c61d09880ff39f8a86873bf72ce4deb910158d3a496122781e29904c615","impliedFormat":1},{"version":"81ce540acef0d6972b0b163331583181be3603300f618dcd6a6a3138954ff30c","impliedFormat":1},{"version":"a82f5ba70d26e6ad9d432ab7556506d807c49f35a44af99fb8054004220aaaa1","impliedFormat":1},{"version":"5b8fe7a2087f6c15c4b5fc81d91c6f3a500d903edea129097f3d10970678427d","impliedFormat":1},{"version":"a7d604e14f80aa0c4d90a3af165af46e9a0779d744794a26f6b60e165907dd38","impliedFormat":1},{"version":"c06e1d2c793b609908a9843d4adbe5e39dfbfd696679b76fcc4426489dadfb3c","impliedFormat":1},{"version":"953a1c8c17fcbc8d4adc60912a7230376a5649600352dd34f7424ecf0dafd90c","impliedFormat":1},{"version":"3607dcccaccb94d625e56d1fcad603e065b0beeb9fa1373eb8f0f6b43b27eaae","impliedFormat":1},{"version":"381698d7719b352cf9ed1ed3c293fabfccae266ecdfb226a3c65dee594ee413c","impliedFormat":1},{"version":"5d4045cb7a3635d592e15ed063c702b0f7a49ee85fbb19bc0b51cac33de99b6b","impliedFormat":1},{"version":"a504acaeee6cba00ba788a73694de803b47f9d7d17d85a927812edf040bc58c0","impliedFormat":1},{"version":"9657e3c276b8a724a00cbd6aab8407b90bb5dc9ffee1376a097969129427d405","impliedFormat":1},{"version":"1f5090e0910c6435f2532eb943bed34004ab51c91165fe6d064407a3d44c215f","impliedFormat":1},{"version":"9831da94e382e730f7cf13a3d518de07fe6dd1a23c32f388657fc82eb8d1e378","impliedFormat":1},{"version":"a0e61ca1bab804eb5da882cd9c4ad829ad4457d2f7b87ea0e96cd9769d1d15d1","impliedFormat":1},{"version":"8b30104d4a7b2dc41cfe83f1ba0050d0436f89d08a634672fc3e75e0c4f9c699","impliedFormat":1},{"version":"295a5599fc659a6d6539a18de5f5cbc712111eeef7786a881775c8fba082a84c","impliedFormat":1},{"version":"62233ea74c1bf9917eb1ae257b912e7680e8aa7c373568eb075fc3e46e5c9d05","impliedFormat":1},{"version":"ea0ce17b66801f32b720210a9a6b898db12349c9ac7ad70edd09709794d4cebb","impliedFormat":1},{"version":"3ceacca134347239050f906de965496198bff2a7f96c311dffeacbe4cc5a39ac","impliedFormat":1},{"version":"d96a04630660016bf126c92ed0daf1c8d6c3a77fd8b6d241553126d1f1c4caa4","impliedFormat":1},{"version":"d928a3e7ec8967d325f633e26dde99086de47bcc6bf7835abcb1b60b20f99362","impliedFormat":1},{"version":"f29b1c62547344fbe3e02054eb62f793016d3855872497dd351f0c17426791e5","impliedFormat":1},{"version":"7438e05db16df5f5c47e593ef5cccde5666cd62b73da4b5ee521bcec11039dd1","impliedFormat":1},{"version":"c0ca1b2fd8ce75709f4b1f5df7a464599c28a9c46e486e71b17a35109f796090","impliedFormat":1},{"version":"17d716b12c230355d207d8b464a3359e13041c0cbb94c243981618e279f57670","impliedFormat":1},{"version":"08323a8971cb5b2632b532cba1636ad4ca0d76f9f7d0b8d1a0c706fdf5c77b45","impliedFormat":1},{"version":"84ed978ec09bcd9acaa479aa6fa307cc7eafcd9759ff0fa5f03da9499fc1a1a7","impliedFormat":1},{"version":"e243f7d314cb8d05f393a5dc9904b3bcbd769ac082596402ab197df75bf582bf","impliedFormat":1},{"version":"fc55f9f6c902e967e7d79f2b264d3bec205a1465b1274fbd38e733f4f6cc8718","impliedFormat":1},{"version":"6a29284c78941d22c7e2590a29716dd98036acd4916a81ca4520987032cd06fb","impliedFormat":1},{"version":"21271850a109497fab5a7fe9fb2c49b4d21043e0d89563834ff79cc43a29e2fe","impliedFormat":1},{"version":"d4f2836bfaeb0709f90205f9dbfa8e8b56b3c5757793cb1cc6d2ae68e709f301","impliedFormat":1},{"version":"4ceec69d8052310237a3da9c7d5b1b13a9f6346c1b6dac2f7ac3c58e2f1b43ca","impliedFormat":1},{"version":"9a11bfcdfefddd302ba9afcdb7beb3cbc190a4d89ad1b35fca3fea7aa733b21b","impliedFormat":1},{"version":"e997d5735fff184787017ad34b865215f9d83e8ae82f5464eaa6a976c72ed35b","impliedFormat":1},{"version":"f71d335412ab3d5d8b5728127ef1a0c656d6bf9fdd589f0397cd66eb5e3478d2","impliedFormat":1},{"version":"6f4c9b810a4563c63abe7903507bb10231f2b5e9954ae91777245bfd249dd06f","impliedFormat":1},{"version":"ae0e9a346e3799e48ca1ca02ca9cc9dcd22754ac16aa290c62ffb3a2d0683072","impliedFormat":1},{"version":"8300c7133c1ee8576d1a0b6551a932fb22b0ea4a24954e812eee3a7cca473348","impliedFormat":1},{"version":"49b34dd82b1a9c7fc1f6b7d54f124fa058fb2dab6aacd1cb22df2d4f76ab4de5","impliedFormat":1},{"version":"2c1da7f76b303c578f082f8e3234d0c204775db35f6659a0c89106913373e7d3","impliedFormat":1},{"version":"d69e23b46f816ae17855a9b7568a52652393c037311c0949de7353f62320aff5","impliedFormat":1},{"version":"d72ae10d4b0c5d835bc0d013a9fc21f09da408ec1c5356772a347c7fae7b45c3","impliedFormat":1},{"version":"9ea1cfc084a02bcf213c927cb86859cd79ae0b67f9d0914bd7bf2c0325a60d4f","impliedFormat":1},{"version":"a4b779037869ebd415f31730ee6ae0ee3d7c75dbc63aec37c8ff03ca7e666b24","impliedFormat":1},{"version":"475e411f48f74c14b1f6e50cc244387a5cc8ce52340dddfae897c96e03f86527","impliedFormat":1},{"version":"3683e4be4a3487e8484523b8b30236dd895cf27aa7c928d09041deb3d3cb10b8","impliedFormat":1},{"version":"87c32492d0a0db641a447460d61340d9ca3e8bce71cf8eff770ac64315f56511","impliedFormat":1},{"version":"4bf3261ec9c9a8ef5d61beb70e88d1d62200d338b3f0245cf6997dfdb95d5056","impliedFormat":1},{"version":"cfebb38384cf30d4cbe056bfb8bb8fb7c36fade0d397d6acc31cb3e7f0113b60","impliedFormat":1},{"version":"a462f4387eafc88332435d4d447b2c5082f5b94fe0f37588d68ca69a07fef14d","impliedFormat":1},{"version":"0bace41ff335d4d4216cae19fdd3bab324ff20a9f4b7192ca2af0c3445317b69","impliedFormat":1},{"version":"4fa722f3ebd7373b836dfc85858392bac172c124408af3dce59dbceb016791c3","impliedFormat":1},{"version":"2bdf2a02e826841c62ff484aa26834b69bde58255e5d0bc72665a2a1437ae5d8","impliedFormat":1},{"version":"e0e8f3ddc7dd4534e14f4545879f1661e4fd0dbfe8efe44492e5bd727134b43f","impliedFormat":1},{"version":"9881cf39fc06bfdce39a1fcb20d092784c706515db22da6f5364bf87b791d8a3","impliedFormat":1},{"version":"e14bec6522b7983ec572e4ae691db068d8cceceea1d055fcff0ccf375ec7bba0","impliedFormat":1},{"version":"3880a3c854d894e42b4208dab66b31a824f331b7e7ce02ad5cd3524b91d50329","impliedFormat":1},{"version":"563994cf3d7dac6287a0547575dd31f216c8e961621565a3b3ed9609e00a61f4","impliedFormat":1},{"version":"d7722aa0ae9eaa7c68996d2df42370e79d0d2f452f232fde7b84fac837809897","impliedFormat":1},{"version":"0c44333641956144158a42cf9ef1f86cd08451cb7d8b4475739f27501a91a02f","impliedFormat":1},{"version":"22fa7366064d3715ece6dd711fc74b064dac4347d456b1cf1619b2c31fb50008","impliedFormat":1},{"version":"d6f74fa400c9efbd1e5cc84cd5e56321642ae53f2af3af9984370a745c8cabb8","impliedFormat":1},{"version":"ca2ecd087b0217a958ec48c8965cf2436747c9e92f13c19dd0a99a7a7fe8ca73","impliedFormat":1},{"version":"a2ff02b602ed97031fc2109fa488e37c812541eb96dd85c9905196bf3645dd53","impliedFormat":1},{"version":"33b4bd8f2e6fb9402d9db60d133faf5e0e13edd94a1116efd8d4646b73f0412e","impliedFormat":1},{"version":"d9711a9daac6fe95073d8237a9fff8dc7678300572f0060f4f5513de4f64ae8b","impliedFormat":1},{"version":"746afda40f0268dfa53a7e95704dfd537bba40b03b968fa214548710d0bad790","impliedFormat":1},{"version":"1e18c1b79b3f42eff1e85ad484bfac293394315bbc3f1c6b4a66c2950d86a963","impliedFormat":1},{"version":"a9f2b226947046d64512efb7047aefa5432f7cbc78bae5b0313aa255780af5ae","impliedFormat":1},{"version":"5095b24adfedd6d228b26565809249dddf77a4184d5157811d55fb33238c9fd0","impliedFormat":1},{"version":"cd0f2282c3d329bc5250ab377d99bf9f29b09cf0d69a9fb906515c507fe264b3","impliedFormat":1},{"version":"4b2ce978985cbdee9d41972713dc68996a8d1977d8e637b97ec6a81545c7adc2","impliedFormat":1},{"version":"9505e240d1c21aa38f45825abe879cdc9627a67033f85a6d6453fb7eaf632830","impliedFormat":1},{"version":"46ce6bdbb0b03578240a094ac40b23045b644642b6814e8640b4a37d7ffd0404","impliedFormat":1},{"version":"4ad0e9a375f9be40a02345c1ace8d0ad48639974f21817f24e8406a53b3019db","impliedFormat":1},{"version":"594c24b2b4919491f8178a5065d61cdf12e4a75ca888c0170b0b22951120d39c","impliedFormat":1},{"version":"ab6f3aae409771d56584dbb1b0bb8140c25b9a5752e73ffa2ddd9d64027556b2","impliedFormat":1},{"version":"f064277a85cabab71db9d8130fe45919ab6abfab8977df7bd489c286ab2d9fc1","impliedFormat":1},{"version":"ad6367467bc55e6a7b8f1195aa29866fe244b35f83127b2bab6e714dbf18d44b","impliedFormat":1},{"version":"43ffb0a90f6a53eb5b9b964d4831bfd874718b463378f6b73ac86964c5511b26","impliedFormat":1},{"version":"8cafb9feacf095211739cd5ea666b5cb500a24e9a2da00e967d490446d643d78","impliedFormat":1},{"version":"78b529f4254781f3f1fc5d9cb706e920ca03a9bb1d91262d3252a57330c687e9","impliedFormat":1},{"version":"1d1b70216c2e93bc15441e2aa565bd6371e75a7d36a9444f2cee9e60bd31c8c7","impliedFormat":1},{"version":"4039e8af0df45e32f83016f639b67b501a4755dc8b0fc718a4cd796454958f00","impliedFormat":1},{"version":"5e3ef7583a7ef2fb123cf6ffb4742f6b292b2c67dcd3f315d1815a5a9dca51f5","impliedFormat":1},{"version":"bfcd76f1a95d7adeb0769f24e80d9e5628e9545e12db172641028907971b6ba5","impliedFormat":1},{"version":"95f26e134cf46f4c2aec8c70a79dcbc00c5811bdc9734bd3f3535fa63f8448c3","affectsGlobalScope":true,"impliedFormat":1},{"version":"8efc466b92ca8036ec8578c814530df2dc73d7a8d2c8fbcffe1041fcfe25ca13","impliedFormat":1},{"version":"150be7fa3a19b2d4c25b4de1ea4c614d44bf62b3601ec9b9fd7fd8ba045aabeb","impliedFormat":1},{"version":"44fae567f65cd8ca1c887101cd998855e048097a8554b35dc58196d768dcdd77","impliedFormat":1},{"version":"4a0f10224a77c522a4bd211ebae65d1efdcb7cfae949343f11f91b2c63992341","impliedFormat":1},{"version":"ad456dbf29dcfbe23a6228df5611150371e02115be680dc3682e4c8f62ef193b","impliedFormat":1},{"version":"3d5b4b1ccfbf8b3672f86a468ce9aabb2a13f2da3b07b62c79d19fe9a270c531","impliedFormat":1},{"version":"3b914f292b5ac89f97c9be1754593bf48cf4acd824e444fe87ff6d2714da2460","impliedFormat":1},{"version":"87cd3b583b8523d3314ea6e7dae37e4234ea67cb00d549f57f0ea05742c28cac","impliedFormat":1},{"version":"976b3f92fb6eaf793ce2574b7f35b026f3f4072c3b643916b333596097c026d3","impliedFormat":1},{"version":"cf979bf8040c94de48eaab36ca5029f9aac1596d81f7964a3ff0fb69193e2a48","impliedFormat":1},{"version":"793dfcf3edc892a6ef4ca33d1208eb44937c4066ea8eeab5018eff270d768e2b","impliedFormat":1},{"version":"636a7af967cc349aa2868c80114f7ec8d939fd2ad3be6e3d563f0e99779a0253","impliedFormat":1},{"version":"8ba8078278f99db563f7d5fd32625aaab6561d7e752adef6b6a6b562f0d75b68","impliedFormat":1},{"version":"0945db317f1a3cf50bed6fedf436f1261967a111d10aa145ac99f80162ee28ad","impliedFormat":1},{"version":"17733dac9109779bd96846e378d8276c163c20992435d39857f4cb80acf3ecfa","impliedFormat":1},{"version":"dd4e45e92219774a02278936fea8f004b15140daf7f84f087ce88357222a5d14","impliedFormat":1},{"version":"576737d85b5a7401fa5bb91c3a7ed6be1a8a4d6dec85cf4c2f317dcbd7674e8a","impliedFormat":1},{"version":"3b4e239e7fa1ce1a9a19e6eea8480718fd8af22d87ae85516fe98ae39254523c","impliedFormat":1},{"version":"528f7fc7357e9e4e7301191c76a5f7d7512f372c6fb0298298e7cd95ea983a9d","impliedFormat":1},{"version":"b9e7a793ed9a6cb586deec4e4adda2381fa529310a05e48bf565a9d9a5a42e0d","impliedFormat":1},{"version":"745fa90ae8aa880f5edebad2b7d32ad144a87bc1570036dc1b9f9a3a907f21ae","impliedFormat":1},{"version":"9e5574fcbfff6469aec16eee34653a64c058ebe08482cc194bf4c0f44df0ebab","impliedFormat":1},{"version":"82584dcda20cad69e9dfac87dc13c58100cfa787264bb5755b630d5af8c92d24","impliedFormat":1},{"version":"83e306ba39e6b1b8f14b43eed4366537701d7ac7eb49d935af3a684ec90cbf6c","impliedFormat":1},{"version":"0f1ddc5f4e4f6dc80d4cf42db1ab763711b4d039dd6ed5596e8d4e59c023f6ec","impliedFormat":1},{"version":"e5bcf5eacaa41645bb96db21d880397950154d5cea99bdb86e5477f6bc98cfab","impliedFormat":1},{"version":"a363489ca90c8a7651e2496caad66ca08e483ea8efa1da09d5d210bac4411e9e","impliedFormat":1},{"version":"525666eae13d8157c3ca10c4eb21e579a8d46d3a4b4e18f47b8b9f8137432f75","impliedFormat":1},{"version":"b0f9ba2e1e9314a8d7251d7f02fb5dea4ca7cd4453b1146b032d4f271ce8a22e","impliedFormat":1},{"version":"c740740cc726969469d989520f4aa3b259433faa790110e27ce175c3c3a7ccee","impliedFormat":1},{"version":"c642882e0022ae2de2ab43b0eda353db8c7cc0c64a7e2aff462f30b3f4e56fa2","impliedFormat":1},{"version":"9401cdaa5baed3cbb4322d55469ab5744bdb0dc690dd24742409ded7c047accb","impliedFormat":1},{"version":"55f787a0a0617a58cdbab25c19d43d5b1e1107316d27215e511bde9394034cbc","impliedFormat":1},{"version":"8ce3b8e5e7ab12fc4b7df25ceafc9bd8970215280202a6a42f4f195c541fd914","impliedFormat":1},{"version":"95504762d69bcdf861bb8cbfa10e87480fd48cd2cad7c73b5ccff7f47b7383bd","impliedFormat":1},{"version":"2d3e4f09946908e36968ae63e1bff5f9ca47ea47a59d59ba43913f879068eb0a","impliedFormat":1},{"version":"0174ebf1294e5c637b39d2228cd9faf349665a34557f90e58996768d4abea839","impliedFormat":1},{"version":"a876a459178855351624ca2f9a8697a9df8420cc9decb0d80fadcdc41fb4743b","impliedFormat":1},{"version":"c3cd71b9d52102e13f62b0d89dd877618c581a5334371c48eb33bdfa388f55b3","impliedFormat":1},{"version":"1b395deccb9d7434d42e3595fb55ac8ca7c39e90d1f4b78dfadf70227424f0cc","impliedFormat":1},{"version":"275d6a7fde0822552e4e7cfbdfb008e300df18da6e728ca464b98f3196fd4950","impliedFormat":1},{"version":"6d919d36ad7c4bf0cf0bd51bc0b965a35ec524b470ef5f1f1efef980dc2304e3","impliedFormat":1},{"version":"0276d354e470c4a12e33a6035a8da4c71fb8121107c15217ba1ef79055657f80","impliedFormat":1},{"version":"8d7624d0260f9be4a369ddff2017300ca91115684c014359e1c2ece39e58c5bf","impliedFormat":1},{"version":"b97b952a834d04b3bfb45c217c7d361bda32f02d80e09db2376cd006e9e9ccd9","impliedFormat":1},{"version":"ba8033d90121f6f6f1f1451fde6e0d89a340c7f18ef88ee7b1a5657133e25399","impliedFormat":1},{"version":"4472b77536928b35a6dbc0aaf7863790d1a694885d15bea8b9d11317609f2a4e","impliedFormat":1},{"version":"6dd42d5a5e2b027ab3a036fcfe73989b6372a366e6c0fa8f13031b8634765d77","impliedFormat":1},{"version":"c86347e8a98e56461c34090f9620c02830c966bba007d05102d058b25b445486","impliedFormat":1},{"version":"3748e73e23e2380ed69df941835d656dc16ab2ddceff5141d62f7181b7f03d6e","impliedFormat":1},{"version":"d7a3a5ff54730b819250c75c2ed9954c5fd8d1941867675040cdb25afb06956e","impliedFormat":1},{"version":"178332460cc1524bdd39caee3962d73cd65f3b45dab9d2977fc76cc7c3de902d","impliedFormat":1},{"version":"3ce036ce49d7be51782bfe99dd347d46dd6363f655a0a360a5aa1558db3325f9","impliedFormat":1},{"version":"9ff2a289cd7fa88114aa2266ee6f9d0769029403caacb7d6bc12188a7f1bb0d8","impliedFormat":1},{"version":"218e3461006bd449a9c3e6dc45dc0d6d135729d66589bbedbaee8bd3606042ae","impliedFormat":1},{"version":"7dd279a8f45cfcd1d15abfc1c1ab9163ca2b528a57af59bef70c1292103d4103","impliedFormat":1},{"version":"60f1c3db3ff000ac00af18f1dd077c1e6f513e146c0b75fb6842c5bc1ac326f7","impliedFormat":1},{"version":"2a1e45a03f73f6ef2bb1064f846abe13def5da95768dfe55e053434df557eba3","impliedFormat":1},{"version":"3e2e02fd849c64adfe90e18a7a685a1450529bac69fe31c6c1eb5e3ebc4253d4","impliedFormat":1},{"version":"cbb5fe2732baba49f2791d017d405034405d44780d2f53f624d80db73c0eac27","impliedFormat":1},{"version":"0a48a263f40c63d76cf3f0264ee7e80cee5bf1ba35d9d20a7113c2644cbdcb60","impliedFormat":1},{"version":"19540da60c08ebb434f269b0956ad591fca77371b421ecaec389a663c24f5ed9","impliedFormat":1},{"version":"b3c5dd997b89919cc63998b85bb5c8a1d1e6c1de1c5dc0610deaf9038535ad35","impliedFormat":1},{"version":"1b9c3d65d9b85b8f92fe2ccff604407594141d7da0ce0f86b2f35e8ab6062c4f","impliedFormat":1},{"version":"ac519e9db858d1c229343983dc059231e49eaf95f9cc9b2e1c67ec5c69896643","impliedFormat":1},{"version":"31c85bec364fa28c449e9604dd13818964ad044d367e6780144bb91d1287aefd","impliedFormat":1},{"version":"7d47230963402516f80d92baf7aa763d317b24ae05d0f12894e0df02eb652e95","impliedFormat":1},{"version":"3c8f9dfde460135ef695cea7d6c73951105ed36d2aff45b3f2f506ce8624b0ba","impliedFormat":1},{"version":"2a4a9bbefbfece5054fa69664206f66f39856896d3decb1c302304ea00ad59b1","impliedFormat":1},{"version":"d5fa8a97cd81ae633ca17349a0a7b9940fa47cb931698a348fc7e98ad2414681","impliedFormat":1},{"version":"ad5a7684bdf84b6afc6eb0f3dfc75e863a29fd179e9c19692b7a786089b3e004","impliedFormat":1},{"version":"a910850e6ec837e2dca139bfe7e769e032855d2aafceb3c6f9ecd45cf0876ff6","impliedFormat":1},{"version":"862ef53e3e6ec43f73d15f0a5c113dbc6b95b0d2d757023e39e8db19e94877bb","impliedFormat":1},{"version":"e22fe5283f65c62cfab32e9cb8986dd8792a9044bc5d7dc4f49ea6c3c1ea7cde","impliedFormat":1},{"version":"03ded9020695461eafdb52ba5f2ab994d0bdc85c681757e1c8e1a7f6d654562b","impliedFormat":1},{"version":"c31116ec14a99506b840afbe5a54e41177811a39af2ef1b8bec4fef5b62a8e78","impliedFormat":1},{"version":"7da6662e95dbe1954004f29a467e49539fd248c68da6495dbfdf509493d6ff92","impliedFormat":1},{"version":"dee7c0642d7dbd1580a2f588c206fdf753438cdcbebfd0aa797932e045a08da7","impliedFormat":1},{"version":"843fefdee9304efe7e6dc0f8ce42e75ac9acb32ed849ea206552b70fb64dfb32","impliedFormat":1},{"version":"f466a571efac9cf7392064a01bb2df09ad4c4245bb62b578c67ba5da4a322665","impliedFormat":1},{"version":"1e2409d6e5effd0919bcf96ca99f66937b8757c83a321147a3ac13a6b62cb894","impliedFormat":1},{"version":"f77ab34aa3f0e860adeab6993f569d919a8fef301b6db43ed135ce535ab92c8a","impliedFormat":1},{"version":"5ba64d0099d44e5355eaa5c56b16fb2975dc11830ac33e98a945b4bad53dad25","impliedFormat":1},{"version":"51c0033ffda0786abbf95f5275935a6d23f8148917e62db9529c320a2d0a0ec1","impliedFormat":1},{"version":"7d5a035bfd92dace5e295d22cedb886b6f91211e658c9805cb3e7d1b93640c36","impliedFormat":1},{"version":"706ad67192931f9ee3e57496277d120732baa89fd0cc1441dd3cfb9d038c4b43","impliedFormat":1},{"version":"4b998368c6ae0ab8202952408719df2587a6087a8a14a512a613350ad926332a","impliedFormat":1},{"version":"d4f04196cdccf2e42c2b8acc024259fa91f54bc98626b100c9de53776cc9d043","impliedFormat":1},{"version":"9ed1635ab1c01bbf1f8959b788a0edf021e8b0e84f9420364eed9f9f1101a380","impliedFormat":1},{"version":"946a596f5225c55cea08ea7299e934b894bb5cf434828a4d59af60f5d19bd5ba","impliedFormat":1},{"version":"5fb5cf76fbab668255eda7c8cd0944752793fab7ebd141ccda1131e8ef2c48ac","impliedFormat":1},{"version":"eaa3ea6393f95895bd55a448ed0e630b99ac34c98770e2f82806857f45b66022","impliedFormat":1},{"version":"0c8a357662f58a9f000e18d76b8cc33f426ef833cfb6ff88f412e0a805054079","impliedFormat":1},{"version":"32a3e9f5343fd6d88bcadecf351318bb6c535a361c5263dd52a5b909058b8412","impliedFormat":1},{"version":"b98e18633779d16db5eb5acb5795005ac5f598eff17a32bdeeee45af271c190a","impliedFormat":1},{"version":"819a72a64de9952259906b3632110a7a621a4ae4ac696b5ae125a7f924e79552","impliedFormat":1},{"version":"c3004988eb554c4159e6dad932fc8db0bf8af2248af4da23c009f283ca39ea99","impliedFormat":1},{"version":"780d76bc66b61e328ba01ad94ed7c3b5f111afdbd6ff6073cda37c2721474ac4","impliedFormat":1},{"version":"6f446a579cb4dd695adeaed7fa620c74f4a9d22055803df528ba922afa376d09","impliedFormat":1},{"version":"590b238aed20788f6a5b50509ff17ad8bb89f8f32dbb4954e194c26afd1a58b1","impliedFormat":1},{"version":"85171844f047f4b72b045f13d2e1e82f1821936bff7b66bd479d45811a0c190e","impliedFormat":1},{"version":"5af2f605f305138025d06da87e27e08f81dd76bbf72b8a3d3cac82c7be997608","impliedFormat":1},{"version":"a7ecda1dc9b45719dfe343c37ccccae74fc3e95c04156babd058eebae77cfa38","impliedFormat":1},{"version":"f3000083020259920763cd300e83d95a09fede556d39c18c7eebcb06ff3787c0","impliedFormat":1},{"version":"dcfc7f146554cf73b931ed7fe97cb4dc17858479b31cafbc3ee4429bbc226807","impliedFormat":1},{"version":"96d489b47b1cb0668273fd1a7c610a8a256d6d5c68db40b222c4951aacb61c9c","impliedFormat":1},{"version":"ad74d836d29d8b061bb1446350b1e78ba897ce7cac8f18bad4a4716a8ef6232a","impliedFormat":1},{"version":"78665ca489e1c60bc8da514d34f66d85ad822613a5f0572d70503567286e83a8","impliedFormat":1},{"version":"455b9b496a518dbcd433678453ee0097c79fdb80d8aa374d5cd5a48109c06475","impliedFormat":1},{"version":"3c8fabb727b2384a2351b9f97420bf643745990dff005d359c3ea06747509541","impliedFormat":1},{"version":"525c11f6d58ded43181e5cc83dc193c82378a010d1576a937a5861684782ccaf","impliedFormat":1},{"version":"8ae5f77a947f3af79012421d027e8ccfdfc4b004eb753e77c26845d4a1907de4","affectsGlobalScope":true,"impliedFormat":1},{"version":"c68ee028609c8a0b5d1eeb23739edf055f60d067f4aac4717597cf1914df4d9d","impliedFormat":1},{"version":"17552884476dbf1edb420efffd4903f5aa63fb466a8e7178fc23f4fa8ddcae54","impliedFormat":1},{"version":"dd9897a48778ad01b3351d200b870fe57dca84c74aabdfbb73d3bf3e268beb9e","impliedFormat":1},{"version":"51613d1d49d1d1cdaa1631e04792ef7ada0e229fa401fe1a220570871214bb7e","impliedFormat":1},{"version":"5c13d939990b7abe86c71cccf0f31e20a9278e05e2b82a9c6cb5777efee4cfaa","impliedFormat":1},{"version":"84d172accf022ccccd92c3c3d09ff84b39713311faaf4c75af56db09484927bd","impliedFormat":1},{"version":"da0e2e2ae5bc3579e21dcf8006d9a01572b5d792fdb936175a0e76fe21615837","impliedFormat":1},{"version":"e64986e948c29f9123ec54e72c9f0d5cf4773629de96b22762183afd25c678f9","impliedFormat":1},{"version":"e97088d3f062e4e8e6a02f0aa9a9b537a5d4589307c0e3d9ebcf6dbe99305d1a","impliedFormat":1},{"version":"ef8d9ff30d170cee25ba4c249f91a8c256e87249db4af7ae0659b1ebad62a44d","impliedFormat":1},{"version":"5bcef2e9c19b970c6fadf1e0c2b67967cea10f47b3e97af3c7fd63c64871ee15","impliedFormat":1},{"version":"5b36b9afcbcd229b9fdb0b28390660a297da5a1cea4b656054bb5861db9a1910","impliedFormat":1},{"version":"73617c4f2f3d6c74a8b1b3ffb2e53cdb0fd5114af319d627b677cc91139fe85a","impliedFormat":1},{"version":"591b5872004981d73be8a660cd654742448fc435b7fc3ed0dd8bbc8619fe2687","impliedFormat":1},{"version":"2aefbf0d82ccf94c0595d43d0143bbdcd052cd9b6ae21b6fdee77dc3b1868be2","impliedFormat":1},{"version":"71eeb701a5ecc0f9a95c4a1d5f1a0c91b0412b8d5317d66b84115ccd9512a8d9","impliedFormat":1},{"version":"ffa9ff47c191e36694ff6bb3f5c9dc5fd1ee82aef5bcd12adf7d73c2fb6047c4","impliedFormat":1},{"version":"64d2d74e572f03761597219ac61396de491804102b9413cac1102286dec19b96","impliedFormat":1},{"version":"97c4faaa7e90c793ca665aa31b18b1f2141ea40f14777d6417107ae892ec9bae","impliedFormat":1},{"version":"56caf8a6e1fffa25ce9c7bc138bffee3b84fddbdab3588d788d7fbfad0f2aeb7","impliedFormat":1},{"version":"55c1d234eef794ce0195c8f9163a81b0eb614e78bda22e2e94fc11f1d008b5b7","impliedFormat":1},{"version":"091d503346c6dbbf96c44452ef419d25205c5b08907d9e886e6d3358c3085163","impliedFormat":1},{"version":"b62f866c6632de08260b6aca5cfcef9a8ea71b59499bf74d7df14f62530a7a82","impliedFormat":1},{"version":"19cb174011ab49323edd8cd3029a7a060da74bb4deddd0964bcd75d1beb83758","impliedFormat":1},{"version":"86ab7950e5569ebf6d16719461a26abe3ea74b94a23dd1343b44bed8dd560806","impliedFormat":1},{"version":"69dabc913d7b0b8b70b223ebd553198daafcad8e393e47ea7ca4ec7b48860fc5","impliedFormat":1},{"version":"ca3e23f806be249004709c7265db2703abea762250cffcc1df198f1dacc6a3a7","impliedFormat":1},{"version":"de921033eadf9982233cbbbcdf7283024b9c0baf23cc829d25f1179d38e8bc62","impliedFormat":1},{"version":"12af66d75540a7640a13bd29265710f940ab76bf72e69c8168df271cf9601dc2","impliedFormat":1},{"version":"96d3c4d6400e9ea18e09e8b44a4a20bf9265e728dc2268367dcb78481aabe970","impliedFormat":1},{"version":"885872f0682e8fd6609bb7859d6c4bac89f296d69c95eba92b4ea53ef6ca01d9","impliedFormat":1},{"version":"d22178190871bc879214983c94b1f0baa1c0e4af942b847cbf90429807d62f44","impliedFormat":1},{"version":"d70471626a921770595fb19b503b1278127b64b0143dc8b10df2a2adffb66386","impliedFormat":1},{"version":"6a9d0f7fef987d1846a09c3db7189643fa5e6d2cba0c55a6998e2fc569fa92bd","impliedFormat":1},{"version":"4bd5060b2bbd926c025ceaa24ff60f65cc86be1353018c0b377ae825dadfc007","impliedFormat":1},{"version":"52a64ca919406662b45e2c01f5a86472ce98b5547b84222371bfb939c905263e","impliedFormat":1},{"version":"696daa57c6cc2a16eb737ea74ee4e319f8575f5614347c9f4d37cedea2dd5625","impliedFormat":1},{"version":"3edc82d2b3563cc9f9d55eca2f67bdd82e67d54e5151377d1122f0e047d4f23d","impliedFormat":1},{"version":"b6622093d2466739e7e9943c9d7092f41c21de06864ccbd8b6b070374f78a593","impliedFormat":1},{"version":"9066a657d3d36b48128d82b467a99a28eda47e8584027f6c22a5b387c910c887","impliedFormat":1},{"version":"5b4c7847c39e263215852b46ac02ded976707d7ee02d6bb2d7f85817f9b694d1","impliedFormat":1},{"version":"a3ad6761ea385685a24dd3da3f9065839dc680ebee1dd374196cd4b3009b5ceb","impliedFormat":1},{"version":"9aafee58901d1d98395a6604635a8f9fe8ea54891f4dcf149b2923b6f77cde56","impliedFormat":1},{"version":"ae437a33961216e81d8e47dea33155fdf6fdbb3fde5ee74c211f6c516a36c8fd","impliedFormat":1},{"version":"b76077edb865675786d6ee0ffb7d31e92932134a44da9998ccfdcdfa98e27317","impliedFormat":1},{"version":"e083bf31d8ba1bceb2fd215e028b7b525a315eaf57311b074b7e2d187009daeb","impliedFormat":1},{"version":"392207aef52a1e4a8ba0448535611d2a01955d216404315d8b4ab7e67323a415","impliedFormat":1},{"version":"6990f2fb809692c89ecee29660a7680543246d0aee7bfc6756a1047a9918cc29","impliedFormat":1},{"version":"b84b0deafa5845fd2f21e49945eec5642fc74616f4b324e32e1f5bdf84a0eb54","impliedFormat":1},{"version":"884cd5093164bd0d95afa8854b426df08997a085668f123992ec1bb8eb2accc1","impliedFormat":1},{"version":"fc892a9c766a171ee80ae5f90cdb1276a509a10bb8a9cc4ade22a637cd849eab","impliedFormat":1},{"version":"e2f0a4be4ff986b254035536cd7a0326c3998807c107314c484461d286be116c","impliedFormat":1},{"version":"052bfda778ba1d93404739c42f8c8be8c8f35bb4df1f05740542de9c8786000e","impliedFormat":1},{"version":"db114ef2aba1c12605774caca9a12f389e23a084f007662129450c669da9e981","impliedFormat":1},{"version":"6061e156608df22580cdfe4a7a5458d94c459fb813f432fc39aaf1d4a33a9888","impliedFormat":1},{"version":"0a33b8bff876368beef794f5f08e8221103efa394f9e0e27e19f557a8cdaa0a0","impliedFormat":1},{"version":"60cdbbb719188968edc279c7a71f72b852765f249da6fe9daaf83828db4c15a6","impliedFormat":1},{"version":"ba04712c964ea6f12540190b7f721fc1b7c7e5e7bf0e332789c06a7da31f8814","impliedFormat":1},{"version":"a22e46cc840e5d916329f3df57f1964ebd31b0f338bf744dc45ed796d703f83d","impliedFormat":1},{"version":"b0408fd0bb986440d5dcea2bcc6439ab5ba40eed36d961d8beb41b814ae81a1d","impliedFormat":1},{"version":"a8ed1f967c9c98150cb420c73b872e18a6eccc4030d7da5d0ac1bc53c533def0","impliedFormat":1},{"version":"6e05bb7354927edb091324e207744cfcdd1db034c6b931c97fab37dc6a5725c8","impliedFormat":1},{"version":"890e81356e89585a68846ac22ac97316577c60754f198f5bc3122645fe789374","impliedFormat":1},{"version":"a1cc5a3d01de4885903a724c4ae3ec1a5ff8bbe035d3f97b5d5bf9ca3f31b518","impliedFormat":1},{"version":"fcd5a204f5a821511a56e67703060d8e4df15aab9fe9c851b861a071bbfe8335","impliedFormat":1},{"version":"dd2af3e280d82b797c7724fdfc5bd27969d579ac8e289e00ef665cfda0c82a3c","impliedFormat":1},{"version":"e8153af04c65f7ee85f0da044842caac6b780a88431a4ae48be1440ad65a829a","impliedFormat":1},{"version":"7362224e3853f9b173e6e87b4f8d9cddc0f1b7201397f69f4dae5f823f735e07","impliedFormat":1},{"version":"a110dc50a6c5a8b10304d3043b0f03e1d5fc7de06e0035f5814e229214cce9d3","impliedFormat":1},{"version":"48b5aeb15a96c6522c1d817a7392c17733aa922cd55c8bb7e6e5109d0e40abc7","impliedFormat":1},{"version":"945cd10861b25159fec30bcd898eebe040b998a7f96f264d30e7ed83a9359291","impliedFormat":1},{"version":"860a1e2e3a5eff3c3d8a74d1bee1b1d3088876398dfa346fe9f7417f5934b59e","impliedFormat":1},{"version":"6560bfb5772c16788945c6c18c12932c2ccc48c3d72f8ea3095538921a051cf0","impliedFormat":1},{"version":"708b2a0c1011c2bda2d99a6cf8948e2190a9ab2baa169a078992d34e5f74e56b","impliedFormat":1},{"version":"67cc83be1f111a453527acafc6845e61244bb23d85ebd4faed6c42087cae7b34","impliedFormat":1},{"version":"ce96ae46245f8e1d145d75148e711ab32b816f0e544636594bda4b5dfc5b349b","impliedFormat":1},{"version":"d2272cf32e822522ab2be798302461e5b58a6b59590abc197c19f2a7fc76cdfc","impliedFormat":1},{"version":"0b8281859c610fd3ea0baefb35ce604728e7dbf27b3ae976d8f638c967ac928e","impliedFormat":1},{"version":"50b063752010cd109d79e882d5c7db2728c5a2e7f25addc5444915d69af9c9c9","impliedFormat":1},{"version":"71400ccc605edc8d52fe57ebf3ad6817c1393586cf189048a64b0399b3259d9f","impliedFormat":1},{"version":"256aecf7ea964f2932d2456980825b9635182b230ef17f7a375c97168e2ffd4e","impliedFormat":1},{"version":"c73bdd93cf166b8b11dd623ff41098d0f023225f5725fead1cdac933cef08b7f","impliedFormat":1},{"version":"cf0a5fdd8bc4143040770d107b9c3810fe02b5c262204738eec16c1cc2bc10f2","impliedFormat":1},{"version":"b212290e79e5b619ee98000413d69335e0f3960533da9936fb2fb57ef02f7508","impliedFormat":1},{"version":"59d1bd5907093f1703fa03c73e4158f47e22933dc6f4a38b445759be79853c44","impliedFormat":1},{"version":"6e38cb51261cc4f565918e81ea78fa35734a428dcd729e1448ea22c83e969bb0","impliedFormat":1},{"version":"b7cd9c8e0e2bccf89ce038ba5ea708b5bef3e72475c15e752d33dec5446ec592","impliedFormat":1},{"version":"cc3210f0f66abd795c31a24da0d5bf89610dbb3728e044aa41e8a039233a00fa","impliedFormat":1},{"version":"e3edf295c057fbdf4ad87aec8a1e6399bb0d4e18263d3a3be28491a065a9c4b9","impliedFormat":1},{"version":"a0e411fbb39cc38ab4ae1701f76c1bdbfe6839381090c869b200b8ebf1187d08","impliedFormat":1},{"version":"a087d862a0877d645b19f3cc7ca25158871abcb1d6782077060c290aef42db82","impliedFormat":1},{"version":"fab6f37303adbb991dbcd54d526df988ea0977931415d5e61d1f731981886a5c","impliedFormat":1},{"version":"e7c0bf23018677e0f66f50cb521c6ff4873ed516907092325de671121ed78dad","impliedFormat":1},{"version":"1f5827e358c144a220ed02d4843b5caf741df5477116f7a4ccf9e356ecafeab5","impliedFormat":1},{"version":"d817c2790b54b7866110d6b60132729cf1fdd2d5ef112826f8fcb90091ef7208","impliedFormat":1},{"version":"2af7da933a7e85d582ee12f2fd06dab04ccbe193d2ba0e99a089b069e81ae205","impliedFormat":1},{"version":"48d178661ff1faf6571d153b8462b5f0abbd37e9a0112999773fe891e9a445ec","impliedFormat":1},{"version":"1a2e9df86c7ec4212ebb8d72b520f435ac4586a6078c24775da7ae1f7efd2ec9","impliedFormat":1},{"version":"b8a4cb1d77eee3b147f0e244c6740ec71d9876c62ca93e5f21d9630aea656055","impliedFormat":1},{"version":"b044bfa3c47078d64880b0a5efea0cbbd9b5bf90a33859ea9f56f9a91fb09bef","impliedFormat":1},{"version":"2c8ca8a44e6036ddf3700bd218da3e5db8f5d866f5c4137f8ccdd06ac9e40477","impliedFormat":1},{"version":"54beddf820146021c238ee33e8cf49820e974e9966292f99f4f6ae99bb6f544e","impliedFormat":1},{"version":"67b454c8013bf77d36b45cadfa1daca0f8cbf61d1fdbc5094944e0170fa77deb","impliedFormat":1},{"version":"98b94f1425b6f88eeecb6a3d395eb1ab4c0a6d4dee9d4d82309e4241f46858e1","impliedFormat":1},{"version":"348a88a2c1d28ef8c9df7c9e6929c3b21f3532bb5c5cad721bda43c70e3e6c77","impliedFormat":1},{"version":"f9777518f8896b0c76efe3d622e934606cc29f5412424be0d3ed4182510f4458","impliedFormat":1},{"version":"bc31f613d5e598350f68995a16963e6c1139a25003a3d8bee9a82a48c4962bf8","impliedFormat":1},{"version":"80034a38101cbbf8df2fc9fba489a676b39290f421d3e7dfc96b9d0a1174ccdd","impliedFormat":1},{"version":"9e9b74fa9bcdbf78ebb03d5596af45d1ea4f25f61d2ad716acdd3f6c8771f8dc","impliedFormat":1},{"version":"79611f3e92995480b365bf9245582410bc915d0c01a431b8bd4e1318acefaffa","impliedFormat":1},{"version":"e31e473c841185934f42937cfe06c246a74de6e25d8535a06c88c3f472a33d71","impliedFormat":1},{"version":"49c048c84cf3029119213e1d03ffd57ba554532e6f7ef16eed494010034d0eb2","impliedFormat":1},{"version":"a333ffb95b56d2f679ed1c6e2ea1b8ea4ab0e682ab5fd563e8280407cb38b774","impliedFormat":1},{"version":"31342b5796eb5cd966cbb75e5c868ac0e60bc28b9133bec8cc1123759bd7a5d7","impliedFormat":1},{"version":"2fd07e88fa02368b6ca9e19d3387e8db472e99e7c244e8723f3cecca0a436d23","impliedFormat":1},{"version":"8f13795a654f3c901d03e5e32e8ae23b9863c5d5fdf32bd7c3b2d0f005fc2e94","impliedFormat":1},{"version":"2510c1c3dba23082b978d1b5845e0866a400a6896c5abf67beb67e366f0282ab","impliedFormat":1},{"version":"d1c69c85705f9ba3437a9e9d380f07ea960edd5ef9710410f597b97c48b5e264","impliedFormat":1},{"version":"f8b6101ee5df0732a10bfda46fd3de1dec1d424ce1bb4ec804578f28ebc05dc8","impliedFormat":1},{"version":"8f2d70343fcd639b1d1c04741e3b504a8303f7ca51a2daf35acf0ef14a497a01","impliedFormat":1},{"version":"e21bd82b9eb7e6ce0d0143553badac091495b4e49e88e9858a3b8e8a2626638d","impliedFormat":1},{"version":"0a1a4588cbe5d0c7cf79e192dea435d7f89164c4980631dc2e63b24cd93c154e","impliedFormat":1},{"version":"3004c7815d9652391cb53ce88fb87f8ae478a168842dfb5d76bd7677713b7021","impliedFormat":1},{"version":"39a761f9094915b326c23b59b8b4fe9e6016647a525542a720b0b76e00780132","impliedFormat":1},{"version":"e22083a1857923e950dc2229f454b623e0ac93040ce35782bc943adf02a64bd5","impliedFormat":1},{"version":"e0e8ca2ee4a6e9b27a851dba33fccd5456424ded7008affa48bccde461c1ce26","impliedFormat":1},{"version":"b1b7242e5b9f83b1175b2d3b758c77c309ee54092d1eab048949e5b73886621f","impliedFormat":1},{"version":"9e32fa94fa41bb4ee3fa77311f40562faa4d40997e07685e8b5db7c7d897f934","impliedFormat":1},{"version":"13cffa233445c09efcad1039cdf97d1315ac4f32f87d99b34767b8e545b89e93","impliedFormat":1},{"version":"9cb69a1df6df485d00f0b0133b5f279716da127b04a655e3feb5dfae1688c8d7","impliedFormat":1},{"version":"d6f3f558ebe18d20c3f613946c77374b4f4fd6df5cfa8e458b80326326d4d6a5","impliedFormat":1},{"version":"1c6fb2b87da5ca83cf86c5c8c1427a3d5d320672f15131dedfbae907feb9f945","impliedFormat":1},{"version":"49de6198d9a18cb2955d55ae26214dfecce9ed164e6da6c6f838b554de051fd0","impliedFormat":1},{"version":"1a039dc4c8889f6ec018043f2e4914d1daf7ead70f43e4f98d370cbaf1bf340c","impliedFormat":1},{"version":"7fbe68cfb8453e462da866bb08695491665fc567f300796e1e56a684621c863c","impliedFormat":1},{"version":"601e9f4bb9fc85ebf0757886897e1a2c23df0528c24e9b0c0cf09165c7e9a6a5","impliedFormat":1},{"version":"91acfdc589417dc2020a84809723ed5e6bce23507487f0f169fea22fb6b74206","impliedFormat":1},{"version":"871e0dfb93eb2bf580c239f20fafa8ecd8b2a48bab8162151d03c8874b9def78","impliedFormat":1},{"version":"e768367459bae3cb8c9b72ded6fa9d8caf0204676b2b9649e6c31845da5f06ea","impliedFormat":1},{"version":"e14b6206225aad853deb8af993b499ddb1fba42226e9f88dcbd5973eebc4a44c","impliedFormat":1},{"version":"d8e521499964a30bd1855bd93e4d0599af72b38d7935f5beffdce2a8a261d1d7","impliedFormat":1},{"version":"89f19347d749e705918393fd2676e5d945ac4154549e689751eb30e8128931e5","impliedFormat":1},{"version":"1aeb98a91a0b087515df54c8ed7fc1ade445137f40afb9d7d332e050722357aa","impliedFormat":1},{"version":"cf12b7205358a8e560aba93c7e6bc89f6edf8981c1199aa9c38bc3ca2eacd1ee","impliedFormat":1},{"version":"effcfa9387a1842798d4873e16c19a5aea9e80f5be6202e8032f43a0a27fbff3","impliedFormat":1},{"version":"4bf414c1962ade94ea5ecca293a85468da176a721feda12fd1b9f48944b4cc7d","impliedFormat":1},{"version":"31776021cb6e39ff94ae89974effafe0fcd36b2fc494e92f4e4690c76c336eb1","impliedFormat":1},{"version":"a6723114d50d96c6b7b2e6e7569c10fcbdb7b313f36eb7f3e07b7a1387d44514","impliedFormat":1},{"version":"9f3d70ef795f8f8a758b35f0e6171ea8453252f87d3f15a85766ca90010eb939","impliedFormat":1},{"version":"2551ea09d8918fdd96438248434601f4a73c16e4819e383362dea4c1580ca0a5","impliedFormat":1},{"version":"0b629924a2bb0de7e8375ee46b990166ba94dccf5c8b8b93d5eea0cf04ad4fc0","impliedFormat":1},{"version":"80ea5525c7b771c21545169f990016d67373a127a4f8ff8d1df317e722148a49","impliedFormat":1},{"version":"6bbac1aebc5b662eec81f1cc49654a7274e954c406a28250638a12467879dda2","impliedFormat":1},{"version":"8c47456f2e26d4520f79e97aa5eb13481d8964f782529f7d648285c5bb0dfe30","impliedFormat":1},{"version":"7bc4f47bf73b2775e7f4eedda45dac60e8fb2b30c38e7a7a010d219f8163b3eb","impliedFormat":1},{"version":"2be147cc62ad76853deb322e223d4ea2d421843ae9841cab1704421212e63d07","impliedFormat":1},{"version":"58c22f8ab25922afa8c4c6126fc427761c46f0b0de032eafe47af661cebfb0d5","impliedFormat":1},{"version":"258a71f597c43c18e7f33cd5f0c3b1bb09910179466df0829ffc34e9b4e914e7","impliedFormat":1},{"version":"fa67457e93a53aaba5e8d3a296118d4d28c56f4703792e85ad18be9efb0c1f47","impliedFormat":1},{"version":"9f2e196738b2fbe0a7ba0ba4c6af0b6df06891a4444f799f1719d612c8730c8b","impliedFormat":1},{"version":"198d81c4eea4ac9515a697b57da4e9bf8271578d7df2c731dc20232fa678f415","impliedFormat":1},{"version":"64f3e4c147deb4d57d92dbc5e556ef081110923f08953865bb0bba36312944af","impliedFormat":1},{"version":"f0b3a2178d6f515216a0bd15b1cc565303642937d0d843a289da0ab37212ade1","impliedFormat":1},{"version":"294782f8a20631e456053f4e2c91e7c2d6703b3c171d6c32cec597279f6ea426","impliedFormat":1},{"version":"b39dfd91424860f9e439794a28eb05496ff63d1d35db4a5c8874720719c3be04","impliedFormat":1},{"version":"a309fa9f9a7fdd2916e5f3280b94f79c292df2c2a48be1715b961892910dc6da","impliedFormat":1},{"version":"5c54a34e3d91727f7ae840bfe4d5d1c9a2f93c54cb7b6063d06ee4a6c3322656","impliedFormat":99},{"version":"db4da53b03596668cf6cc9484834e5de3833b9e7e64620cf08399fe069cd398d","impliedFormat":99},{"version":"ac7c28f153820c10850457994db1462d8c8e462f253b828ad942a979f726f2f9","impliedFormat":99},{"version":"f9b028d3c3891dd817e24d53102132b8f696269309605e6ed4f0db2c113bbd82","impliedFormat":99},{"version":"fb7c8d90e52e2884509166f96f3d591020c7b7977ab473b746954b0c8d100960","impliedFormat":99},{"version":"0bff51d6ed0c9093f6955b9d8258ce152ddb273359d50a897d8baabcb34de2c4","impliedFormat":99},{"version":"45cec9a1ba6549060552eead8959d47226048e0b71c7d0702ae58b7e16a28912","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"13918e2b81c4288695f9b1f3dcc2468caf0f848d5c1f3dc00071c619d34ff63a","impliedFormat":99},{"version":"6907b09850f86610e7a528348c15484c1e1c09a18a9c1e98861399dfe4b18b46","impliedFormat":99},{"version":"12deea8eaa7a4fc1a2908e67da99831e5c5a6b46ad4f4f948fd4759314ea2b80","impliedFormat":99},{"version":"f0a8b376568a18f9a4976ecb0855187672b16b96c4df1c183a7e52dc1b5d98e8","impliedFormat":99},{"version":"4d2887fb8e436d8ea1dbc219b1e714e7fd327b663bfe4537d075dafb8c4dc9ff","impliedFormat":99},{"version":"77f7424c7653ca571b6aad3323a73da7a23a97275ee9e14c04901b2fc3f75859","impliedFormat":99},{"version":"36921e15078d2fc229fe0c76611ab5a0df260b66cdfd5f99e6c76bc3ae9bcbb4","impliedFormat":99},{"version":"d162abec4ee08a8912ab4d4f1ef890f726497b564f203b71bd5a60cded913cdf","impliedFormat":99},{"version":"8603b66aff9d8ffec90b2f515e337c4f19de03945925ad77c8759475168a8343","impliedFormat":99},{"version":"8b624e12fc25b0c5f51a26ef1bec5c31c314a479de0712785c8c4b8e4185bedf","impliedFormat":99},{"version":"e63033ff7522e994e0e1d9faec3fd84bc0894ce885dc933fc70e0528e397957c","impliedFormat":99},{"version":"6ee110da2af8f04936653814badc2df73fa893d4db0b4e1ebac957f612d63b55","impliedFormat":99},{"version":"838a11e68cfb3688925eaa7cfde7166cadf86f9950fed4853fb1923dc098cc99","impliedFormat":99},{"version":"a602eacab7c5a2398b7a4131a4e4b8a5d2faefcddf51bc230286e5286285d70f","impliedFormat":99},{"version":"9e44d5f53a9c293b004d24e6b3e709902419ff26059e0d22affa93462f157d67","impliedFormat":99},{"version":"4d3907c1514d751e3fdd00da4640377dd00756b4e172063f7e2c6eef9f074760","impliedFormat":99},{"version":"e24d8dc9dcbaf8fb062d4ac97edbffba1c572e040d25bf0860dcbccf1e9f3a88","impliedFormat":99},{"version":"1d5968735d6a01be14f39f3709ee729e2e3aae3309c2b7542c601c4d9369dff0","impliedFormat":99},{"version":"0cc9481d549ee09909165fbb9ab12cf1cf5b4f6748e9f8b68dec6b9583133818","impliedFormat":99},{"version":"05a97c8d50bef9e99aaa97149b3239f37b78576850aa698b3fcaefa32f75f092","impliedFormat":99},{"version":"106db9f3b4ca7980ab7744804d67678ea81a76756cdfad8342577e1b2af46342","impliedFormat":99},{"version":"b4bd38e8b0044564d129b0c81ba7d7999a2ed2affe5babbabc87a2d991210f31","impliedFormat":99},{"version":"556121d6cfea199c95472772cac2f719b834be8b9bd41eb6d8d91bf2cb8aef3d","impliedFormat":99},{"version":"c4d5184203d55e125c00257681628e038089ec04bdcc9fccbd81398af48ce45c","impliedFormat":99},{"version":"9cfaeb5d4d823615342550fbf0bf707d38027a8896d080464c6f6434e5bea811","impliedFormat":99},{"version":"c9a0186d419c1a2ac0867c8d7c5f753d068ff88e506b5810ac4b755443cef93f","impliedFormat":99},{"version":"e5276d294771106d9103815911e0bcc759c2b69437b2eaa53ae6ce3b31698f93","impliedFormat":99},{"version":"a849c1aa0f8fbf850658ee098099e30fadec5bdcae322e43d3715b13d28b166b","impliedFormat":99},{"version":"69b82e214e484e7428af5dc522675ff70f05b07a4cdcc168b0de3deb9a74c034","impliedFormat":99},{"version":"eaa27dfa46cdbda4aa20b27881245d5e38ce4dd0403d229c0cbba5211190e3a0","impliedFormat":99},{"version":"49637532054b1f32aca1a2e37e36acb6a063ec145f398bbd806ad4ad2d610b77","impliedFormat":99},{"version":"929672b92ae2eeb40eb1171a5f1551c90b6d55928b8d3c13a119ee6bad25c648","impliedFormat":99},{"version":"018c169aa65c2e199c1256a50229fc2476303a7d229109c76920734533715302","impliedFormat":99},{"version":"769eec6f55b0fd03ba1fc9c2c806ba347d4007a9307cd5e78f8c50488407b755","impliedFormat":99},{"version":"ee8caa32e966d21923391aaf139eae98fb58a865a74ecc3d55950781da964549","impliedFormat":99},{"version":"1965c99a27f819fec1007321018cf9552beec40799fd7bc080c2e64ab521e064","impliedFormat":99},{"version":"f0cd5f360be33c4507df7fe7491388b6890a14844fb1e26a5c779ef0ceeb3ba8","impliedFormat":99},{"version":"58b79e76ac3062bdac3bfa5851abeaf66b7432f2cfd2fa79c969a1d619f31277","impliedFormat":99},{"version":"570742c5ba7f2e8f4b3e6741814030d2a282111a63d42bd40e6e48d5b070e48a","impliedFormat":99},{"version":"e42e8eece168b49b0a95212d709831e979049e583ab50c31f22d7c7863def456","impliedFormat":99},{"version":"5a8516b0d60aca2895ed18ebb5f1bb61fe99dbb99383420c1038679bf258be7f","impliedFormat":99},{"version":"98708f9ff38cc2b2738a82d862deaf190fe50c76256c34d877531b5add891480","impliedFormat":99},{"version":"e61b8d8c4c729e967d332c3c1a2ba7576786d218e21685c47440e02d123f51c1","impliedFormat":99},{"version":"ab98cc4cc649989f185f8e23da9cb2c27847072cd7a071b7c7dcf8bda7f361be","impliedFormat":99},{"version":"69631c578eae77a24486a548df6272e17318cd2cc3742b301c6e374031ce15d5","impliedFormat":99},{"version":"85e7e505b1eb7b86efb53992ab5638253ba698d676397aa4aef68636a0d92db5","impliedFormat":99},{"version":"c523515c0bdc2fbb0119ea564b1952ffc042e6692c22aac588c99bddd89fe280","impliedFormat":99},{"version":"7a8fbf8a1e38dca11ef63c25ce81b0c9cd3a2b75d32b2a1aabb22187a884f65c","impliedFormat":99},{"version":"ee07fa266671cf9ad5522e425752bac7d1149e9d66851058ab1094cc4b475565","impliedFormat":99},{"version":"6fea7054de404b9980cd44dfdd416d03a44477ff3e1c929493022abd7244658c","impliedFormat":99},{"version":"08297fbb15c5b09a2170bacc090f295aad6267f51ad49c836ed9cdec93d57efe","impliedFormat":99},{"version":"adc160518fe54967314e9a78132fe1630341b743acbca7a40366a7118d64d8a0","impliedFormat":99},{"version":"aa0db1558cfdab86a71c88c4369b0e089749cc17dad751e4b824d0b44892ea04","impliedFormat":99},{"version":"a4e4ed7aeebed4f15bfc68ef9e719b154765d523681a69aa38d9f4be10ec41a4","impliedFormat":99},{"version":"79da23daf791a61c15b6adb2c8030aab11d2b96b12fd7cc1381157e64ebc2fc4","impliedFormat":99},{"version":"64e0b717c40a38d507f38117c2363cd582cdd58d971d3d57d413fbc239f6e612","impliedFormat":99},{"version":"64c7a10dbba5405299f30f1ba2e48f680a99a1d9ca56ed3b25fed37802e49f0a","impliedFormat":99},{"version":"4e89358beaee0660a66f27120ce892880fd6e4ff50a20ad17dff711b0531ccd2","impliedFormat":99},{"version":"b49349872646f50772934a48fef4c95ecb328160f60b80d412a9f7210d6ea817","impliedFormat":99},{"version":"58be3671cce553bcbe1236d16c451c25b84f1d0a9fe32bdb70bcd672b8d84026","impliedFormat":99},{"version":"848fb3a35212155e7320e4d412a56d2ef082fd954f281e6a221720906d8e24d5","impliedFormat":99},{"version":"b130f22d08a15bb6c3b47ddf1b1f14ea0def8acffd486f1668a28b4ffa6809ba","impliedFormat":99},{"version":"4a2061c6cd6193f86dcedb3f2dffc38e57fab097eb29e2c857f2ac8608f05349","impliedFormat":99},{"version":"a037be29361879cebb09992466be99c3bf52dd7426986005026ac7c9351970da","impliedFormat":99},{"version":"4f27ea452fe87e5614c79bdfa06075c1d7afdadabc3213299a4597fd005998bc","impliedFormat":99},{"version":"aaac531eaa95b1c4d28bc03bb7fa1d6cf9495ab14b61494ca452514d60133a0e","impliedFormat":99},{"version":"d7442be0f659458eefa72616260b16fca92e97c03e951efd989966b5e7ea5e91","impliedFormat":99},{"version":"fec07695d9acdec37e1922969b4d6625f70ae89adbd4afd7d268e5d523bde38e","impliedFormat":99},{"version":"f3eb5627a5494e0207831df2aebf5df6ec2265b9ef94cc1e3bf2d810f606be14","impliedFormat":99},{"version":"48cf15e70db5b3b6ef026d613b091464604640c8b8272f83c4dfc612498c4f50","impliedFormat":99},{"version":"75d4c68ff23ea1875f4886bb79b273fc4736ebcc92d55c75da0d0515df20eabc","impliedFormat":99},{"version":"d76a111579f9ae213c059df3ea6490fefeb44d501cdb0f18bd9b9fffd8fd142a","impliedFormat":99},{"version":"3709251f4d3f80cc7dbdb0398f4cd1b0fbf1d68b88ac2c2c9a2819c9f4d93b42","impliedFormat":99},{"version":"a9fa1ca3f563a463e3dbc7f08b846512d570450887ae2d144589cc723e3d3fd0","impliedFormat":99},{"version":"c8b8403a54738582b19f7a4f93498b6550bdcb665ffae98a907c91358ffe55db","impliedFormat":99},{"version":"fc8adcb7f270b42bcfc3b22d0b170f0eb1599d8661d15d6cd4538ce053e1b9ed","impliedFormat":99},{"version":"deecea988e1412aa38b360b0fb071fb86bcaf5c94ad1b1398663c8dd4871e6af","impliedFormat":99},{"version":"e2d7e3f27356ab2be630a4405e3f60499b9dcf466775932f371c7ad30d305f17","impliedFormat":99},{"version":"20035f181bd971cb94f5742bd91131b79c1b114706e20b2663d2c40c055fa53c","impliedFormat":99},{"version":"fe5af5ee1bfb821694b6a026c509511c6d8540cdd285131c81a115b7eef56e11","impliedFormat":99},{"version":"54442f15c1d35a773cbcaeb7520e0e09ac991a1e00d6be72d65a078288e6dbe9","impliedFormat":99},{"version":"e41d8da000ae9c3619e6c16606af32b3d70f933faa3d6f10d72563b5b0f65bce","impliedFormat":99},{"version":"124c22139ae091889925c5d1ade97be21890a5135d98b17d96b3c6f382efd196","impliedFormat":99},{"version":"c36c30592da0b0667ce5c4215b660ab5370b21412320be13115e9eaf22987c57","impliedFormat":99},{"version":"91386cb2bf54cad36b0a7b9ea9790afe894050c17ed40cb2d63552fec4961e85","impliedFormat":99},{"version":"d77786dffdd483df22bba299465b01ccc0b48c3bd41b0af66b43ee9b280629b5","impliedFormat":99},{"version":"4aaf5a0f504e99332220b7189fdd94ed71c1f3db7225bdceb6148b985139fa0d","impliedFormat":99},{"version":"8ff5f071f877ffcb31d1476c59d4c68ae05c0ad9b022d0145970c7dbf5e40214","impliedFormat":99},{"version":"a3fcdb8949307b5481b66479a4168fafe3d07647cf91b856f22e4556bac78df5","impliedFormat":99},{"version":"72fcb3b2ebe9102201635cd731f5e655afd680a7edcc5804435827e994948700","impliedFormat":99},{"version":"9d9dd4371e7e7ec4968fc506f7dab3303e70c4baae96cedbc0f25fd487994d29","impliedFormat":99},{"version":"9c3033264cfe0084b80cce45f90db8b2af60ba8771748a22d14e6a30bc467cc2","impliedFormat":99},{"version":"e9cf28fb0bc429b94cf4c0069954edc5da874eafdc5c967865e184eac9a3b5aa","impliedFormat":99},{"version":"bcd73ee4dbb40711d57b4555d222453b3cbb3824f7fccdf355e43e6e35a9a4ab","impliedFormat":99},{"version":"12dd3b0dcaac8d69f273b9f03d316eb29cdc4a35fccef29583254310505d32d7","impliedFormat":99},{"version":"38077de13fe290c3fb4fdcd8f426c260c06e7308783bed33e5ff8921dcae5194","impliedFormat":99},{"version":"5ec96b9e4148f817ac89052509f6a9db1b434ef37b634c9cfb54b0be3b81f7f2","impliedFormat":99},{"version":"bff50b812b9a6bdae45bc5c4025eee90a6d37516f5c473729b590abacdcfc00c","impliedFormat":99},{"version":"e102eccbda45533f54617e5a53b143d0e44aea1f251551eb6e237085ece23806","impliedFormat":99},{"version":"f12b02156d76749c81e4b83185d3b814b8352f5e21ab5b7284e2eea2f1b17a90","impliedFormat":99},{"version":"4c612460e5871907fd0182ae1eae612b7915609ca78139ef110ddb4e1af605b6","impliedFormat":99},{"version":"e4519b1ad63f51fb64fa0db0fc963f83ffba0ce449693c3b754a2315449f7cdd","impliedFormat":99},{"version":"6a8106c44c9de23fff7e01d74805857b5702da8c72f1391a38b34460063aecc4","impliedFormat":99},{"version":"80492a9617e654e7fe8e27bab491d51e1548ea4bb9f8c51357267a92a435dcef","impliedFormat":99},{"version":"89aae61ac71e83a0f76dc14179cca84dbd1dcb6f7dff0b112dc1bc6b1c887800","impliedFormat":99},{"version":"b43a1d1eb7fb5d8b3c7e99c020b4313bc614de10665a0cf26d7d4bb78ff008ca","impliedFormat":99},{"version":"8f1dd9a724520513ceb0014819e9169525bd9a020c74458e85689cab061a1f7b","impliedFormat":99},{"version":"60b6250ba1516b1eb863514b3f1ae52403f781eebb5b798ad8765dea5dc79dbc","impliedFormat":99},{"version":"61a8dc1eaeb0a50f9304858e79a4f1a7b72a0901a27ef046e9465911ffe1ebec","impliedFormat":99},{"version":"f75492d33e2be3eb66f9fe7f01c8760fd18505d724e6fcd687f6c2e806b40046","impliedFormat":99},{"version":"b5e40372d34e1f0704131da3a8526e12948295e64b4d05a11e1fd8570c411e39","impliedFormat":99},{"version":"2c879cf6a84b92061c13bdc0f4abdca88834242ffb7b0765176eb44a0602a762","impliedFormat":99},{"version":"da67be907089d1d406cac1a6286a4cea9d430e099c34464d00e7d7791bf2d3c4","impliedFormat":99},{"version":"d3820ad364704a21b13bb585852e968e3184b4662b185c9b53cd30f1d4d00510","impliedFormat":99},{"version":"8d7659793df95d53e1757de966b7e1c1fa809dde2c02fb87e53df19b124924ef","impliedFormat":99},{"version":"2b384d6463c4ed2cbaaf58ae46a17753a2b729c0d17fe346265f39901a89c301","impliedFormat":99},{"version":"f865cf13bb812986c308c80ec8d536356f91addd45a9f850968eac0c740c6528","impliedFormat":99},{"version":"cb35c26fb8933531969fdf198d70d91fe10d445028bade6632dab0e884573b79","impliedFormat":99},{"version":"cd6b5c72ea7d660affad9cb41859046e79c4e363c22700a6f86a7f7578ef9a2a","impliedFormat":99},{"version":"5dafab1e5e9ea9835109fd2766b154c1499dd17d935e4ff49e70ffebda3032d0","impliedFormat":99},{"version":"5db698db35aa63f4d2debcc34101a5f5a2d01366c3f15bedfa9050ca85d9aa35","impliedFormat":99},{"version":"c55c432c38692edf9f918f385d536c43073cc8077ff44850091442722bcd01a4","impliedFormat":99},{"version":"17a295c1b1dccb8cb4f854bde5ff33980fef1d883c6d481f8593240ccaed60ca","impliedFormat":99},{"version":"47ab38c7c74019bd347aa1c812e6eef86d2163669e50242cd27d0de30b6c3fbb","impliedFormat":99},{"version":"c8cfded6c4fd715b52de664d21931bc6a55b225894f5792d05ae29568c623def","impliedFormat":99},{"version":"1bfe5cc8bdb660318b30da6f47460605b06f196335705af4cdbb510ffd8c8fae","impliedFormat":99},{"version":"d4aba31dd41819bd87d70843438a935ddc142c0eb1d0cdfa164e5dbb9fead30e","impliedFormat":99},{"version":"9aca4a305574aa60617b94cb25d8d585fe169ddf92f7dd0197d89d636aa1c19a","impliedFormat":99},{"version":"d23800041ae0858327ad3b47c3876e0191c16061c33c0550fbcff60b695d7bdd","impliedFormat":99},{"version":"b809557adda13b9bea2ce69cea6405d1345d85f7d029a28d092fef440edf6141","impliedFormat":99},{"version":"b9f39d0dd2bc56a387290ec42a094382ce91de1258a6f5f3b89655d7aabf65bf","impliedFormat":99},{"version":"c8e72190cc41dac064febe56f97bc89351be5a83832918797fe8c36cbb604fe5","impliedFormat":99},{"version":"250a161356fb615263402697679460d0b765a249404a78125168d3fddaf9d090","impliedFormat":99},{"version":"41d93ceb853cc53debd13fd440e4b71f089bfec10768811668db17e7df55a3d0","impliedFormat":99},{"version":"4fce10097a5a81c6811ef81adfb03683518a072d4c0d87f5347d4d7b4400cbc3","impliedFormat":99},{"version":"f5decc77d27c3a64f0d38a8ed69fc60159706b12a7f5ddcfa574ea29f0e59f80","impliedFormat":99},{"version":"6d93506d3159b47c8651e353095a333fad5211363b5dd2aa48dcdf9e9d69871a","impliedFormat":99},{"version":"8289780f7f1f94951d01e6c4aa2bc9fee7720c9807fd5dfb77e6a8ada8242cb6","impliedFormat":99},{"version":"cc52591d128faa36c09f3aa27a5054ed3cbb651331095380915cce77622f0fab","impliedFormat":99},{"version":"a39c28ed9ee3e52c975278adcb84d56cd0c3ac07f339481219c67aac93b78c32","impliedFormat":99},{"version":"acf12bc7ab7f2521ecc517b2ab4cb61014a384f16d75809902ad7cff8696169b","impliedFormat":99},{"version":"96fcce579cd105b23b74a6e39c9f62d478a0e4cc88f51cce130c106a92305603","impliedFormat":99},{"version":"bf58326ddd44ea8c9e3377e6355bdcfa46b2157162110c692b3014adebdcbbfd","impliedFormat":99},{"version":"28f4cbb0f2b77cdaf8f638286cc2844669a496f687c2fce10f9f8ff14e407fe9","impliedFormat":99},{"version":"5d5a15194cf1e9bb670d20624d80474368d2894d46d3196ec7aabf80acdd0ea4","impliedFormat":99},{"version":"e26538b0d04ad1ea982c6ada5dfd1f340e98137cbf0d57075e754462d86f7611","impliedFormat":99},{"version":"99a12659c5daf9dd6ae79d11f8df6d34c5943c6ebae7f424e21cdb963260a91b","impliedFormat":99},{"version":"473c6060c3923d6beceac97cac7a684113090abb5363f50915ae0fc29492c928","impliedFormat":99},{"version":"bb64643948ce89cca03b8252ac01f3beb1e504f2e232bdfdb1cdc81da5d4687e","impliedFormat":99},{"version":"c4239abcb2ff0e4fd1a7ba09e88986e718d4612d13929d30b4d02779e3d87aaa","impliedFormat":99},{"version":"dcb610f5aa4b8627c9676839320db26f357d9ec75d31490892a1fd73be1b1314","impliedFormat":99},{"version":"7a4e7b83a4e920dd574f8df7d3bdab8dcac6d31226fa1eda728628508188a977","impliedFormat":99},{"version":"eaff8a935d00b2586318cc5c3092e59bcdb61b687415978f8adc78778664ec72","impliedFormat":99},{"version":"6d170802c45620c12a5ed32aaf2b239f1c3f3cf76aee3a2e955cff1b6c6144a1","impliedFormat":99},{"version":"d249734a690bb801bacd2afcc0432b5be224dd91ec88ec6ec43848c37858add5","impliedFormat":99},{"version":"3a0d55c5d62914650d86fb0402277a1fde4bb25388c15734bf3c4a9354bf52f6","impliedFormat":99},{"version":"6789838f6daa7ddd03fa4be97bfcc6fe3449c9a04a7f4c9008c508898124bdf0","impliedFormat":99},{"version":"b4e1f8785a623cc58e37ad538b9a5de1de1218e154c9f5a0c03eb18a2de9bcb7","impliedFormat":99},{"version":"767bee06d602aa9510358818e71db67140a3c2f056566e41be2a079a29c41979","impliedFormat":99},{"version":"206260b1670649a465319961ee478ac2fd1e7852259efb9e04112e4651fc9544","impliedFormat":99},{"version":"e8de9704319ec1ba81145df7a6c97a409c572fe5ce22ad11a9ad6737807ae620","impliedFormat":99},{"version":"747b9ec353a6bb35d732e4691dfa3ae8e4406971a08f4199cb2c91003c03d0de","impliedFormat":99},{"version":"f2ca59e16388b431b8e912ee51d31e192c4792bd4335ae4ca2f59af622dbc302","impliedFormat":99},{"version":"cd631db9f450f9a18015c23ffde0cfd030e44ebfe4b10f5c72803de30ef0e8fa","impliedFormat":99},{"version":"63fbf377cefedf70ed0aeae96eba90abf65c2e92679c459b325b2bd37cd4983b","impliedFormat":99},{"version":"e23f60fba2fcd179fc2152ac4f6f3498059f21c76bd74e64147fc3e1365f3311","impliedFormat":99},{"version":"78f304cb1217b823ebd9b79dd9b4adc75b0d915432456afb140fb2188e1bd748","impliedFormat":99},{"version":"d8425128980a85913c1f5fb9ece9fe237a4e70eaa9845a5527995c2d40b89331","impliedFormat":99},{"version":"39b5d3de3c64f6b268cb843ffa399e5b0d8f17c3f65be35b05b9038c987346bc","impliedFormat":99},{"version":"9069f61b6a5eb7844d89571ae96dd492fbd5f33534bf621abf3bf29579f0484f","impliedFormat":99},{"version":"468caddc2aac962edebc1d3b8a5a9e9a173b9e75d36d84dc263502fb2e49811a","impliedFormat":99},{"version":"08b0911ee98ea9f9f4629fb6c3ad2f52a9a5aaa0aa9a80a7c8041b8c27e8f69c","impliedFormat":99},{"version":"ca787195f6134b4dac541a629f9db12a30162adf5467bd343f37dfd562b7c329","impliedFormat":99},{"version":"7dcb30baed58d49e6bb15bad648185d3c198959e7a3e9f063d1838a8fba7c91a","impliedFormat":99},{"version":"ef8dccd817a571ec3fa073a965d5d97b785cc43222c7854121ba31fa97d2bdd5","impliedFormat":99},{"version":"3a52eca069515967c1b43594091abc98d51004c68011b4b7d3335a830a19e906","impliedFormat":99},{"version":"85008e5bf42ef9dc1c4b6924c78c8b911334cbf91a7a24ef70efadd9fa88ea62","impliedFormat":99},{"version":"028cb9a8ff4335a9b239b17cd381d61b65af2384fdb866c47200c6beed7674e3","impliedFormat":99},{"version":"ce1ed5f9d243c8378bd4099ca7258f4492b9c41f7764af07fda38da659f0fc57","impliedFormat":99},{"version":"d6e00f06be5750686d5646ee1ba49b73050968d7d68968e3c815d24a08c383d1","impliedFormat":99},{"version":"1c0472bc9182a884d74d7e8f2bcc46d34b6b16342ba3cffec03be817b2b9b042","impliedFormat":99},{"version":"c097ad4cab7d86210476ce41e964e806c9946aa231bab21cec2aae3ff2795978","impliedFormat":99},{"version":"060d300e05a630bca1752385d12f8c7283bc8c572e4c2e797abd51019a0206c1","impliedFormat":99},{"version":"3e2bfc42812d3a879308227c956b958c0e5256a57c3549da9ef982194951a97e","impliedFormat":99},{"version":"b158543642d5e0d7d86926e135c3bb618428b65aff3cfecab549b04725469f5a","impliedFormat":99},{"version":"c6abed8a1c50ae86892236bf08e5890798b939bcf263a7b25fabbed8dbf70b07","impliedFormat":99},{"version":"2aadf562886279ea28b6b469b2396c86f54a6e80bf8427dd895218e58b4bfdf0","impliedFormat":99},{"version":"e6b66ba6f695ee96ce5ad8e0e39bf2c5630e9b6c2f7a91eccee70f8ba1a82c00","impliedFormat":99},{"version":"af8546e25450ee35e8b24c5f46558c3f0fd7c92cd6e8b6024036d2918994af76","impliedFormat":99},{"version":"d96f38005197dd03404a282b2c2f399c845c233ec16800bce394000fa5a1a727","impliedFormat":99},{"version":"1b2aaf0cbd2b9c6592c40f476e6053dbe52edcc9cc96dbe03db1ae8085e50e7b","impliedFormat":99},{"version":"d7d173a78b314a1749f45ef644f1baa1d769a64e72dd1a225990ab858279a1e1","impliedFormat":99},{"version":"c919340f2b125d0fa4e9179cc9b53c225e852cb70e321576d83a4068c6d7baeb","impliedFormat":99},{"version":"f2ab946b2481f725ebb90f42504db6c43bb967b08b6e6c7c84ab4f6abd3f3890","impliedFormat":99},{"version":"b0d96987e7b7219db0af2caebe36fb0470fb351d532ab483582032a1e38696fe","impliedFormat":99},{"version":"91a325d80ba995754a3a8072dbc20a28da4b84387f09f8f4bd549bd174e83b82","impliedFormat":99},{"version":"f9a43d9390efe0c20d22ec866f6f892c2a1e338c72a512809125f9df53cb92a7","impliedFormat":99},{"version":"b73d2f6f38ca4c1ec4a7151cddfcf0f144bf4364b2e81b082e35ff5361c0f57e","impliedFormat":99},{"version":"7801cae57a7497244c5243ea6f549cb3a4d1eb65c08268b09e544f902c48cf22","impliedFormat":99},{"version":"a9088a68eb7057a790e986cb60835dd190691642ea759e0f249ca9a555e6f4df","impliedFormat":99},{"version":"561e83c572ac51be3ad30f2d52e4e21379dbb7fd06cbc6eb0a8d4410741faa16","impliedFormat":99},{"version":"948c68479773ba7430f49d9aca11a27cc634ce921beb0ffdeeec60e3ba175a3d","impliedFormat":99},{"version":"2bd820079a9688d1b11fdbd4ae580563fed1edc6905d8ec08dad853766a38fa4","impliedFormat":99},{"version":"66b7178c218793c116e9b1a9871dad446f51618fcaee8730d9a3462a2f99c2f1","impliedFormat":99},{"version":"f20eeb62635edb76f3bed0a0341dc1c543684d8c2e280192dbaa9d815a2b3e03","impliedFormat":99},{"version":"f68ee6b0fccf8dff34d25d155ab88a1a699be67beaa3075f695f130f9c20b975","impliedFormat":99},{"version":"5aa560f601510ee8bd0b34b2d6a92316c46b43bf27c582b168242632b1613aae","impliedFormat":99},{"version":"0d3b3f2f3c92e2fd9b56d75bd949c74ccd3cd2d6e89a553e59f58568ad90dd78","impliedFormat":99},{"version":"c09eb94f5f890522952ce366442a1fd12052bbb76e84a6d2ca87238307fd5d4f","impliedFormat":99},{"version":"1460af367d2f860537a9dde995cc06d0cc2b86c5761b2f4c0350840caf01e7c2","impliedFormat":99},{"version":"a02d3f1988da099c920b3209211840a299db1a3c20d7aba929ed7ef0442f3e6a","impliedFormat":99},{"version":"75aca9b08ddf95a78154a8a261e3ecef1f924ee269348687978d187b872d1535","impliedFormat":99},{"version":"18e61650cab316550f346f688c1dc7933cb3184cbcd88407a77748a75dc844b3","impliedFormat":99},{"version":"f17d24c6f8d381e61c99f13e4f38849e72b72c44e59be96a97dd212e2e6679ca","impliedFormat":99},{"version":"b64b8f2b635c69a120183f741ef3eaedddb2e4b021468c62f780c6ac287deef1","impliedFormat":99},{"version":"11e434214064759b5c95eb4f026adf239b1bf4d79ffa2a4f00b398111feea794","impliedFormat":99},{"version":"05d2836490172eba648524e51117dd5dd98c5438aa89e15f6890c9562f8b4004","impliedFormat":99},{"version":"f2d58e2a95faa9b9ca10bfd9333a445ce6eea6f2a1504fc7c8c549018adaa59b","impliedFormat":99},{"version":"9d18b7270255629a0e40053a36d9cfd4c765c3df73313422fbdc077e6f411ca2","impliedFormat":99},{"version":"32b791692403665af92cec27daba20c02469748e2e0602d3ae96350ee08d2a6f","impliedFormat":99},{"version":"6332e40859f83f0446c33167825f4436e2ded25edc7974a5b42c7f6a59124f23","impliedFormat":99},{"version":"50ae56aa0973ac45d8176c56d105af95cbe8b6301db6ff5fc3512b4c684b4255","impliedFormat":99},{"version":"622f748b9de2b1a65392aeef2e18c6dbb372f3fb82d8e5ee55234cb9763b3fe9","impliedFormat":99},{"version":"a6150b170cc88ac46d7005318447bd161982c091e0224dfc63dc2a8cd6d12f20","impliedFormat":99},{"version":"24f2b131e4b2d9aa929c24e68328984de1b9ae0bf4bceba5ee40e6cc5b0bdc67","impliedFormat":99},{"version":"d7fe6edb96da75ea3fa6b76a8613e61d13aad20b7462b42f4f3492091238b215","impliedFormat":99},{"version":"5e9ba2bfab8ce1e5f94a7463969a64ea6c22d31919faa888ec940dd770af1248","impliedFormat":99},{"version":"a2b13db4828108b2406f879c2cb93d6a497fe936aa14f0f3d3dcf9c9ed03f75b","impliedFormat":99},{"version":"b533b94c5ce70318fde3772b3221d46941d2f359d81221da079c2ecd477f887c","impliedFormat":99},{"version":"a8794bcff57ed0c4f880a948f4b85dd1b22d925ba090871dbcd88b35c5ebe968","impliedFormat":99},{"version":"e2f77b057053d31d7fe1a3648908095bf987bd96f73855889b5ce9b7a8e250ec","impliedFormat":99},{"version":"c897ceccd46b2c55f8aab887a246417b0520143e8a96fd26c0c84a12ebfeff25","impliedFormat":99},{"version":"b762e986d91311985863443a278ce6920e3541312338a8b2ff5026644f55cc52","impliedFormat":99},{"version":"d591d1559ae4fc82c4c582ce269b6023a0caac336b245b78fc556a9a37a60bf5","impliedFormat":99},{"version":"9a133dedbbd96d3415cce1bdda55f08ec1ba38bab7e7139aae3afcc56cbc070e","impliedFormat":99},{"version":"1796c4fd3085ac25f634b30378e000e1b985ffcb2f04eaf9ba7c6c2785500308","impliedFormat":99},{"version":"ceaedce2f9989592a1f2bb970c679c167e8a3b8973b046e1aaf85bccf9859cbd","impliedFormat":99},{"version":"784e9840f78ca32d9f8d6d69f3b7b5a955b9cd134fc283d84e7777cb63276d05","impliedFormat":99},{"version":"c48e52a9c4c8c3cd841da9cf35f2a6574ab0c45a84171c075ca9c6cb6b715768","impliedFormat":99},{"version":"98afdcae0697df3fbebb0d9cd46a4865abc9c47378cdd022063ebccff58239ca","impliedFormat":99},{"version":"135e72dd70117b78dfaa72723885feb45b296f61bf60cbf9eea7726bda03c154","impliedFormat":99},{"version":"61c43c4ba9a7ace834e443cbfe4c7cfcfe23b6a81505cc0716564fdae9597e3e","impliedFormat":99},{"version":"87f4c6dd964ac87d6b45d5663b917b74ed83789a232bb9419670a922913aaf30","impliedFormat":99},{"version":"7c901df77ab9b0b7e932042aad3629729eac81157aef01e377aa7eeefd9d8f83","impliedFormat":99},{"version":"432e8de8444fa333c21e5b427b3cca5d2ece5177043af26014a87a2de779a8a9","impliedFormat":99},{"version":"b0f1373cb8fee14b5a96c2083d9e06aa5329d9329f1945390c3da55b0e475612","impliedFormat":99},{"version":"6a07210d3945b68bd25158aea4538e8fc45c8073aef4f18a6fb71fc4afde8e16","impliedFormat":99},{"version":"ef608b53fdfb8ef2ce08eb30f411c1c1500c4990541763b48d041fd3ce970676","impliedFormat":99},{"version":"9c9da2b7e0cc3dbc5323d17420ffa7c694b9cd635f7928670f0821637b1efe54","impliedFormat":99},{"version":"9dd18f8953ad665a1845871c0bac9a11ba128951f4481e522842d8a7e7999fcb","impliedFormat":99},{"version":"618b4ae5336a47df468d4f71b3884048f5e6e7bf7ecc9093b98cbd7b18daabc6","impliedFormat":99},{"version":"7f97435638b9523edb4870b4e805088108d874a777172bc8a46caf63c6656f99","impliedFormat":99},{"version":"31ff93b370bb6c701d287996b955c5ccd063360f363fef206d60a9848a48e3d2","impliedFormat":99},{"version":"1934c6418bd4f3130e7a98e8e4b701c383a301ef831e767331ed2e544965fef9","impliedFormat":99},{"version":"69b49a4e4216cbcadd09d3d8cc11d224b3c6cc2749ead447ea1a1b514b748133","impliedFormat":99},{"version":"2bcba29ee9cb7c86e7cd486a1dec3274d0aa3a14847ea6e84eb7b117d1210271","impliedFormat":99},{"version":"489e5b3590d99830e9146c61dd810fe0305b2c580d9e912c1e69ca84858f6a6c","impliedFormat":99},{"version":"dceb4c71cb4c299f79a784e58119d7788286bbd1009e89d476aeac26cd086763","impliedFormat":99},{"version":"e5d3ee84524032a0fe1066cb9cb38dd78218f9a496ac335aa857e5c1c801a86e","impliedFormat":99},{"version":"f41940c36a1a760593e4e214bd6eec3ee7f90cd934bde0c2b1caa430d76bf659","impliedFormat":99},{"version":"7611726255029e649e3c2304ae36bc8a34501823e145c708b35b99e988b677ef","impliedFormat":99},{"version":"6b246b69ee26df19a7fd044a3bc686e99b903284695ff0c3a232baecfd055499","impliedFormat":99},{"version":"b3fa4ed7d7976d27aecb6547320508c949cf9c6503f8046d74c6d74cd42cea83","impliedFormat":99},{"version":"8dc2b342bc7ad0e949723a89955147d942020d1fd42656d08e87a2302b757d7d","impliedFormat":99},{"version":"6c7c15055a23e2b54f15113daa60909806439d168f0ac4d172aa733637978e52","impliedFormat":99},{"version":"80cc3ff6d31c4235aaf2f3cb303faba93ee6be651863ffc3db33433ac779db76","impliedFormat":99},{"version":"665243d722de2dc95ca2351b6dffcceeb7a9b2bb881777b9771ab55dec4e32c3","impliedFormat":99},{"version":"49506ea016a6f383f5d463b991aa04f1e05ede9d82c61b78080a54f5c6c67ccc","impliedFormat":99},{"version":"1a1587ceeef503cd8b5472cbd745e845d1d89b329af1fe5dde0a34dcc7e11d3f","impliedFormat":99},{"version":"f372b58d2371a40a6a2336564cccdcc09c8516006afccbe23d524e9b3e6b0b50","impliedFormat":99},{"version":"234bcd30c9ec5b0485e91c5ad45409fd856f829e8fda76396147593f99ef001d","impliedFormat":99},{"version":"1bf2a90865d536fda72ea3686c9b18219d1e2582d8ece7060a3a242aaa9dc7aa","impliedFormat":99},{"version":"f2ce60764659e04d7daf572edc3dea68602ac09c4988862927167a30ac2f7b40","impliedFormat":99},{"version":"1e9a3fb05002f75b388a8a1dba9f05d564874bd06cd972f8a946840c8df01364","impliedFormat":99},{"version":"616f997335616ac58b0ca09103653c5e3f1677c7a4a34808abe5eb7836db0d8a","impliedFormat":99},{"version":"8f1018bc0bd737fdd70993e38b8d9e1069b6b1c1dbb0097c41ccd7279b57f55a","impliedFormat":99},{"version":"1f7e26fb66bcdb08484fdb1b65d379ee85d1b1a05264d2cf009f84318b4aa678","impliedFormat":99},{"version":"f72bfaaddbd122d6f2aa97df6a2f2f0caf5e0abefeae7b27d5635237554cdd5c","impliedFormat":99},{"version":"2e1a8e0777522f86ad6503c2082278c4d4e0b09259b0ad4323626976800d6806","impliedFormat":99},{"version":"d7989d7063b13e494a39b03e0ec3a5e2542e99bef41d7f9b49547e39df419747","impliedFormat":99},{"version":"26d92a20cf51acab25834bae098abfa7f6a26c2a8edd4213a880ad8c555f703a","impliedFormat":99},{"version":"f3091dd83c77ff308499705a785601faece1a49863a50a7066237d4e92fea04e","impliedFormat":99},{"version":"10b207261c316bba4a99ce037c8d40aa04e4e15e183d3f87ed7c6793c53ea9ad","impliedFormat":99},{"version":"eb79b8087e892147c0c0f44f5e7bd88c9999c96665136c21b179a7b7362a595b","impliedFormat":99},{"version":"c9ae9256eed3b3f360cae3fbcccf955233ad90bfe0cfad0f103ca3bb85de7044","impliedFormat":99},{"version":"bb3422550b34643170b845a9c8f4dafbbb4bed983a2180b7bf1a2d8fc1bfb767","impliedFormat":99},{"version":"0bfe62549a16f0ac4743d7a031ba321268a6e4b7c71bb394bffa745ae2c84b0b","impliedFormat":99},{"version":"4ad4b6f3a80c526f51c498ced3e30fed3ca33780f330046e18c553f945b51e54","impliedFormat":99},{"version":"b50427c14921a1ae22a6eff321064be09f82d2f99bd3640946bd517275fc0be2","impliedFormat":99},{"version":"86c5374ba226e809c60fdd4aa7ab64a80e1f0b32d6676edcbfa29bcbf8b65b47","impliedFormat":99},{"version":"c10ea70475948589ac588174d5cd22c6ee70565cbb46e840567b03e1df6a9255","impliedFormat":99},{"version":"4126e5d2e94808449564fc8899b68ec0bb361d00b156a2734718b687ef5dce13","impliedFormat":99},{"version":"47f2dc585b8150c5256731c3588abff64ddd707e6fa9103c42e8eb6f5216b291","impliedFormat":99},{"version":"56553d8dae36a4d29a912b7d90b99e89e19db31a2cf466153e02e518c2eed92d","impliedFormat":99},{"version":"d08c388e022005db246a56c7ad6747731807063f99bcf5a86da1fb7190cd19d5","impliedFormat":99},{"version":"d9b82403377511ff2d2b2273765e3046dca75fb6471e142f8843d1ef4ab6701d","impliedFormat":99},{"version":"5c196ddf7282a96a45224c103f3a49bc7a8de31c5d6ac8fc5791c5bfc8abda7a","impliedFormat":99},{"version":"29adc3c30ad4c07b571b7cf28a4a17be302bf51dcb4111ac6d4346b29e6f3e45","impliedFormat":99},{"version":"7b9a892374d781d2a7e2a4d8f89f866277913c8e0a7703c05f9d38907f9d2b53","impliedFormat":99},{"version":"278f73a916427e5f1bb9593de57347cfe37d06b2277be2c307590be7922789a2","impliedFormat":99},{"version":"81c67711d392d5ab7e00b7d06ab91418e451399b1d2b0ae93fce5040065c4255","impliedFormat":99},{"version":"67d125134a3f599cbc256843a07c5351d6356cdb5c183dbc223ec6eb30197508","impliedFormat":99},{"version":"21529df6d5b1968c624352ddff328a5d78d634df97567e967222651cbf527307","impliedFormat":99},{"version":"77bfd4eec7d3f787f1e0defd19334a2d9ed9477648db8dfeceffdbe5b0cab336","impliedFormat":99},{"version":"87970f078004fb8820426b99d4da3fc79f695471885541fc77cfc892b80b0067","impliedFormat":99},{"version":"bbb1ed873062b93d439596d6330f29fd48f658e6bbbac5621cee80b2bbdf026e","impliedFormat":99},{"version":"5db82aeef514204d924b85f6aa881fd82a52c9e6faad94eb7296411ed06f7809","impliedFormat":99},{"version":"33330e7d74af117dc9df333d316637acfe2a26642a8954d58b3e88451ee8f497","impliedFormat":99},{"version":"03a9ace084ff2fc3b9dfaacde474b905db9c5e864543e6db3f9c44a1d7a43055","impliedFormat":99},{"version":"98d7cc6c9ebd188e69f19a799e646d62e691d769b81780d82c9e707d3bffd20b","impliedFormat":99},{"version":"c0a9c77d44f515c0729d952fd66f27748bf3f4197a9ed98294565880c7882772","impliedFormat":99},{"version":"c0af90161ff3f25a95d11029fa4f486f3a541a00fcd026c9d010b662695d7521","impliedFormat":99},{"version":"64570d5562fc4741e7eeb24c60757be98c2e58aa74484118bce4df6ac59a8651","impliedFormat":99},{"version":"94b5161d14dddcdc370617bc3c3ae0ba5b181a2e312b9570e992f76e8ad4135a","impliedFormat":99},{"version":"58fb9077c1eb954daacdbd52bf831915076450f39888cf4edda714bca2216042","impliedFormat":99},{"version":"613a0e8239ed1f14aa4729cc733d43a0e1f2a7f2f7875af5215aee55655b6e22","impliedFormat":99},{"version":"618cea80bc8c79e91decb999d7bb5bbf6928133db9bb76a8f4df19a4d18e0cdd","impliedFormat":99},{"version":"aec18e32a40d13d4990cc0b2e505b8f653459a27c8b85b3743fa98358b03bcb1","impliedFormat":99},{"version":"73739f40eacedc63d85e344e8ecbcf2a291439ff9466ad0e1e8f4edad56ccc65","impliedFormat":99},{"version":"ba85485f6e163ec59385259ae7ee5be3167dbc092b0aab77ca8621ba2942f43a","impliedFormat":99},{"version":"c1747451983fcb7eacc2e6ddbc33024dcbd05f02c3b42f3ef85403aaeb84c35a","impliedFormat":99},{"version":"b6e7fc2eeab5dcc3f7aa96294479474b8d584f10a05b5f473638574ffaf914ef","impliedFormat":99},{"version":"b9dffe8c2cc3ea64e6aa81eec0b7250e4dbb9093ea4b296a249430e15410ad83","impliedFormat":99},{"version":"fc0b155fd95c7ebdc4acbf0012f9afe5cf3c8500f691efe874790de0741fe5f5","impliedFormat":99},{"version":"fdef563856017d9de5afc2e27ed3f8561a59711802123f6dc4cde707e570d8ba","impliedFormat":99},{"version":"34282efaad54b2b67fdcc479f19d8916ced7706d4a2a2150fe6ce495d343e6df","impliedFormat":99},{"version":"619695efa4494df83ee77ed818daf837a842ebcb93873b2024f19072b6d18209","impliedFormat":99},{"version":"4f3be5c128a12ebee37fafabd356c9bd5da5e30497b552df06a4a04523e2286c","impliedFormat":99},{"version":"94a501970c1926170fbea64d103b71780e4a74c26a96d2f081e258d2272c7010","impliedFormat":99},{"version":"a9e51a219e7a4b180e553b2f0b80620198f94fd00813b571483053b421a3a423","impliedFormat":99},{"version":"4f8e05a35f853f4a6f76169db8bcb2d25fbe47e1fe948c2545ad47111bcb641c","impliedFormat":99},{"version":"f9013dd3a5f8a78f7be9f189ceefd0caeb07d032d73d06edf5d323c5c012be06","impliedFormat":99},{"version":"fd5fdf9cec63cdc9b057589eecd950a4c00835f2c57819d4467cb90afb7ceebc","impliedFormat":99},{"version":"07f234c3b2d8259a3c8e043934e064c1d57c9b6b870bbc82995d63150658cd2d","impliedFormat":99},{"version":"70537c49ad0ba23281776a451ec0e9a3124ce0aa6826e7e2c71f2048153914e2","impliedFormat":99},{"version":"7d1570bc8a51259f43980b1e1bbfec62edfc8e56bd75a0f9f5a541df303beb2a","impliedFormat":99},{"version":"35c0302ecbaba11503e339c8d6a14ef99c33bebe45fe22348a51ea1f851f4753","impliedFormat":99},{"version":"7d0ee70479273910f4998d3db9c624cc54a7ceec1f2fc32aeb5dd1da26cc6ecd","impliedFormat":99},{"version":"ee99391e7c005b9792ed1c4ad78f63d5612ea248121435e2f19cad13cc772102","impliedFormat":99},{"version":"a63057e247853b6a27b900de357d3b2cbbb0205a746ceeaf1bbb08b53d37a594","impliedFormat":99},{"version":"54b715e3569938c71fb6ccd89b5c9d2569c67a160bf07e395afe71a8c99f6719","impliedFormat":99},{"version":"6c51831173ccc1a13f0b2e7cec9c492474ba762a67fa729f59faee88e5fef2a1","impliedFormat":99},{"version":"58f36965de212113b644068e12226e4ec4f3dc11aa8acff4bc0eb506fad853ce","impliedFormat":99},{"version":"6e280d9e7f99a769d91ea5f242404d32caae0c23241598b4447ad8e2f651d0bc","impliedFormat":99},{"version":"f91354f5e4bdf93914bd4d8d4c513a525dae7cc58c29374e602499cb59b45792","impliedFormat":99},{"version":"69eec18f3024da9245e6f8800661032de02849fdb82f4e5754234b9753ab753d","impliedFormat":99},{"version":"f508d9b5b7aa6ac0eb6c7166d8a163907670737ab6cfed72cabb18ed4d27e93a","impliedFormat":99},{"version":"72035a7a97898aa687e1226a0e42428fed98d0d269fc5afb1da4de3c614b6afa","impliedFormat":99},{"version":"afa8f9f695190917b8e7aa763b476a64c3f3818ad4e465eb84a5c542aa5ab6d3","impliedFormat":99},{"version":"bdb48a412742f28266e91f8b9c3cb93ab5e5fc4efeaab20ac23ee923d1ffab85","impliedFormat":99},{"version":"1971d324a3cbe55f05b7902adb6453dfa9c26676636961a004f7c493eb53ed68","impliedFormat":99},{"version":"8e7b4e9532df3f35e655c3596dc2a1f9e9ff645e265fe674f05948185fc20aa0","impliedFormat":99},{"version":"6394c04842b451114e283a46cff22eda53fb6cd38cef53157fb09a5477e14ce7","impliedFormat":99},{"version":"525282d1c19684b19c0ce67c09111eeb9ecddb75402afd2575b2c43c7b72587b","impliedFormat":99},{"version":"a29812309236ff935f2a25f7e5cc7c3a471879cb4e7a807d812ac7c0528aabf5","impliedFormat":99},{"version":"c0e4577ccc1f5d23c7ec9786194fe5bea12f10237ec63bbed5daef44a90ced7e","impliedFormat":99},{"version":"dcb4979825df9ee8d826545f011caf031f5143fdda9483ec1711f01cebc6dd08","impliedFormat":99},{"version":"cdca391f6e1c7e0a3c1bafed3515ce7eb93bbcc45957301b182d4b359f4dd469","impliedFormat":99},{"version":"5322996149800e888007de5157125010eb3311fdba699fff1137975c115035ab","impliedFormat":99},{"version":"31cf8f21b25cf65e0b76ae854c5c325dc4bb1658e95058bcf68d2e499f70066c","impliedFormat":99},{"version":"e6b62986b66e8f6a6db255e4d2646be1d2ae3fc14a0d39fc4bac6ddd9c579ad2","impliedFormat":99},{"version":"ab48fa147efe99bd6a50484b62119207eac0dc8d79011cc0238ab243778107a4","impliedFormat":99},{"version":"438fc2adf109b7be5ec9a92057b98fda3ef8d2be1a1846fc245d57afc57a2a50","impliedFormat":99},{"version":"ae6522bd249c23edd46831c93bb59ef402b396c3a11b8eeed1b2b6d9036c3e6b","impliedFormat":99},{"version":"68036037cdf6e6446983edda42e4222cb7725cb333b3b561cdfdf0582f22d187","impliedFormat":99},{"version":"ee2a299893b6d975f7b8d65b4d2c642e429e39f1fe1f351f42ff4fde0c34eca4","impliedFormat":99},{"version":"8d5b46732d8296ce8118fc25d13da98f1947800b9dc8b6f0b4b2e8543ec368ad","impliedFormat":99},{"version":"e9ee952913d691cbcaa172cb143691391b8dc75b6f5a60ee35c92a25ef6479f6","impliedFormat":99},{"version":"39e2c467f0c117fdd706712396f80b4bbf4ebea829a68096e0d6d62366d03eb7","impliedFormat":99},{"version":"15906c60cd7e6b25f0cb90580cc1527584a5fd3d5973daf55a10ad4587510c64","impliedFormat":99},{"version":"406ab0f368fcd5ffb379b4c0fa84b3675fbca834c2c954591552462568994cee","impliedFormat":99},{"version":"656be0f49f0d32f32dfb42b4585494e48138c15e3e56ed7402b36b9316cc5176","impliedFormat":99},{"version":"eb8a51a88c818e8e3d8b4761346e886ae46fdb8179d7938236bdb6e5e26bcc53","impliedFormat":99},{"version":"7f7059a644e3499bf802d9c252b1d99b6bdc21556f438d7693758984877fdba0","impliedFormat":99},{"version":"525f80295ebccc0b8184bd7e03dba432371f3df96b1f88399112a230f1c48e82","impliedFormat":99},{"version":"b355b8f50ac9d87bf458fa0a2762e36c2a395691bec0c21ef6826cc631dcdd34","impliedFormat":99},{"version":"822399a2755ea28ae3d97f9ac2c20eb41148a15e014dec021988d2cc514f656d","impliedFormat":99},{"version":"0b1e14cb06770ed81cf2a7085c973fcdacfbf96455fc025aedba9539f724afed","impliedFormat":99},{"version":"f6b6aa4f55562260b06aabb08367195905565e5db2b8d541f4cba5a522d05187","impliedFormat":99},{"version":"04a49a60381726dbc52583896f1e888a727ea3f15ea719ddac3f133c699bab1f","impliedFormat":99},{"version":"55f38bfa0f4091158ed411e4a54a94bde8ec5105a48d468326350a6ff98c66f2","impliedFormat":99},{"version":"96112614a8d983c6aac682b05815b82cd5d2af174713f95df46b7a5d4393adcc","impliedFormat":99},{"version":"47178e74335c75f16d18b8f9997326d65774e1e490722c1ac592e8f62d37e63e","impliedFormat":99},{"version":"5fb86ff855a340505dd1e5a0c2475696df7865f303323d7e2d005141ea73a461","impliedFormat":99},{"version":"dfc8682fae1326ef7106770fd67db712f21ab6b812c693dcce24a451d951c1e2","impliedFormat":99},{"version":"1852cfb5ae7c11bba23047e44e198416c29334c8f8b832260964c350e00db46e","impliedFormat":99},{"version":"c69baa2cba8d9f66f7cb38cecfca8c5924d6304bb59b85da457dd724a46e8548","impliedFormat":99},{"version":"3cbe672c15126cde626ccf301ef8a5b4517f2e40d63cb4234cbf72de687260e0","impliedFormat":99},{"version":"1637612654e83a9027f2ce3c21609197bc33483029256cdc4e573e8ed95d930b","impliedFormat":99},{"version":"1402212882b04813ea796e08fd07bc53409bfe4262ae72d3232e685b31cfcc02","impliedFormat":99},{"version":"fd5b89584e1132fd39773ac3d10c8003d975640fbd5f317018b2f9e3105569a1","impliedFormat":99},{"version":"c80a1f303a1f70e1c84faa586318b46badfc440a8dbfe179d34cc334fe9da4e7","impliedFormat":99},{"version":"76c1d19e111d0823e8dad68a6b2a3d86ef73545f8a0d1cb4ed9e86dab55c5f67","impliedFormat":99},{"version":"5ad24d0e258dfdb0c8293415aca74f31f28f75863ca11d58547f82dfde2efe14","impliedFormat":99},{"version":"56d26c22fbe3af215f12b5044cd8a9a6b9501c913d20de70e26607df6ec7195e","impliedFormat":99},{"version":"f580e4a5c35390e943327174a1fcbdcbe1418c7f565789287e70b5468f3e59de","impliedFormat":99},{"version":"2f725113ae18657257f08cd2837c40e47d76c4018ed791aa9e9776f1933540d1","impliedFormat":99},{"version":"523265b33f1992dd3c53594efff46af60cbb160b73bff0a576d39cca6e1ee31c","impliedFormat":99},{"version":"8329ddcba0b13dc3c59bc9df2b1e7f3559ec42336fc7591fea51143f895827f8","impliedFormat":99},{"version":"ad88f437c1230d635e5ee3e535176dd291985fd55032f4e0d1c986f36ea54da0","impliedFormat":99},{"version":"4fe3e1aea7c6e4ac1ac824814152df4d0f63f70c287aa6a45796a1fd794cba47","impliedFormat":99},{"version":"4c1b974cc791e3c5b6d85786933258725b1bafbbde2c06f8c857fde6d1e1ec78","impliedFormat":99},{"version":"4d4fd98a081f7646284761857316e2d9f0b63666c9fd2e2e1d7b782aac7b28f5","impliedFormat":99},{"version":"7a9fe3be04c4bba6773310bbed8b62349479b36bb9e984b3482ab7df6b166238","impliedFormat":99},{"version":"16f0d7f408b62da56e251e90612a169938867cc9d242756738833ddf1fc2d481","impliedFormat":99},{"version":"c51568c9c91356250e18517b1188c6aa69ff47bc08a3bf24cd9439134fbdf683","impliedFormat":99},{"version":"72fbd780809660f9ab66b163f404177f034fe946d02b76a99206b95610577d59","impliedFormat":99},{"version":"1826918b53908dc00d488bb0dd0e5ed029dd08e0bfc9188d265bfb0053f5fb9f","impliedFormat":99},{"version":"5d7597bfcca496303256fd44744c6de4531233fa3ac03e6cc1e2d945f6a6d6e5","impliedFormat":99},{"version":"2bb8a9327d7ce4e43caa06281b0b2ddd2ca80af1293ec6ba2f339ad4932cc206","impliedFormat":99},{"version":"127a4bd80467304fb1a51a76b30e297f428fe1494b7a14d9984cf56a02f2b331","impliedFormat":99},{"version":"1c5a9c6d973bc268522676437ea5f1b24a27f736ccd8af8e74f1bf868e8dbbd6","impliedFormat":99},{"version":"3cc5c94b876b4c63eaa676bbced5bef59ff9812617bbc4ab659fa065a32c54de","impliedFormat":99},{"version":"36a8ae68755fa991c0f1685bd83a67362436ed2a6e8c1a8f32acc7adffd6168f","impliedFormat":99},{"version":"6db5e9847f3760e045bfafeb945cabd5acbf16ad51c3d066c78acf2844aee7c8","impliedFormat":99},{"version":"6484fdf2b87d910c6b21c6bdfc9d4cbcb936e9ab9c2a4b53e6bfa340cf7bde98","impliedFormat":99},{"version":"f73229533c0e1695f9c75a191a5be44989ae92ca77342b713af856a97e52e498","impliedFormat":99},{"version":"f7f312b313319eb4c92cdd342b04f3b3912ed8ab704414c863129177b49447d2","impliedFormat":99},{"version":"165759e2ed45d7c271753ce028ad801ae857aa8fbc6ed8a977cdd5b0518d057d","impliedFormat":99},{"version":"d96984a14d656474db73039a4407ece06d5022fb0eb30571551e62c8c6f81a59","impliedFormat":99},{"version":"119ac9413c8a428219878da202375e364b37dfaf2b47a32e309aec8d77e8f197","impliedFormat":99},{"version":"b0672eaba1a8cad5e85defcae3e0325e0ad3a6ad16af7e6aba509f0de9ae9a3b","impliedFormat":99},{"version":"8980fca73ab1cfb4923c9311587f26d2b61915b3f0ae94e84d3f108e41904471","impliedFormat":99},{"version":"5a9a55d4531486b41b7fb9475041c068553719cd2b93a5745e01111b0d836cdd","impliedFormat":99},{"version":"bf4f74ad2c7b5da8e34b85852a258ca9003710785f5a3757f2523d93bbdb260a","impliedFormat":99},{"version":"cd8871a352586220b17d6a764af77726e3bcf563adc43a570bdb25f8a134deba","impliedFormat":99},{"version":"472edc7768eae3d1cdd6f5527f9faa60636d40b39f1d26c9b255ba7d0f354846","impliedFormat":99},{"version":"a9751001b01ed9ba9ed6515f720c486d353f6c6374ea528c98caf6cfb9caccab","impliedFormat":99},{"version":"e9acd11c45ef37d94f1b9388c6a8519cf8ab7eb53ad3cb8cf4184764711b33b2","impliedFormat":99},{"version":"676b88d0772615ae9afa3903de127c23316a44ac41002ff53685bbe68722f355","impliedFormat":99},{"version":"acdc1359ae838f192b6d94cf15a3e8cedb99a9561922951c64c413557756e3c1","impliedFormat":99},{"version":"fa5d8cb6eb7afb104fd94847dd8a739029cfabded225f93b6f09f5449b6794b7","impliedFormat":99},{"version":"316f1486e15cbf7896425f0a16dfe12d447dd57cfb3244b8b119c77df870858f","impliedFormat":99},{"version":"bef4cb2537c6229e68225e976c9d7d894ae9000b351f839867fa9d2928ef944d","impliedFormat":99},{"version":"30dcc2f014b6ae7c0e0337a87c70cac19cfd1ffe8982dbf28e37411105d32594","impliedFormat":99},{"version":"8bd7fd57f990ff10242a6acd6f20f4d7a0a6a2fa0494f3f4680add55b867e0ab","impliedFormat":99},{"version":"f943375bde83d32a00db5fa8ea97b66440e5b30e89a0ba4d30c88d49229f4f6d","impliedFormat":99},{"version":"4ab7081fcca46702defd0e6e59be019981d9862735cf3641cf8a676a7a260687","impliedFormat":99},{"version":"955faf3ddeba7f9f1cf0d3019e61fb7f256833312398e340c5b42fb2ad8ad126","impliedFormat":99},{"version":"061638545629f8821137f657fa83b50f1fc3ef24c2eea3f489f2207bd3fe8604","impliedFormat":99},{"version":"2d6fc83d9e8d8485bc153a64058691f7483710059c3b693f6d66282409de3941","impliedFormat":99},{"version":"30ac578e4e17562acc6b4a3bb1aaf3a82a6659ab86ebc6f885a894aa3ff69d2f","impliedFormat":99},{"version":"7ed24e31337a41691afdf0ed7c051bc60c1b232ec28d118c1df5eedbdf278379","impliedFormat":99},{"version":"d3a2f956b8949ab7504d1ff606c5db6f0fe878e4da6992d9e53994eb6a818780","impliedFormat":99},{"version":"bf9c521c79f941180501e9c62c05020fc07b2c82b364b3f00cb76f54f8aee2fa","impliedFormat":99},{"version":"9c98c8c56a0f74be89122bc0aebe42d00936b04bba2aef2bc65b3b97e34c5b96","impliedFormat":99},{"version":"528797ce38e264de1a333fbaccadb315baef5485eab44c4e0e85097c1b3c86d7","impliedFormat":99},{"version":"82abeb2110eeae7a9ec63d3d44b43b4cbce2e684132e4403d0995785fe981b09","impliedFormat":99},{"version":"af437ea71c5035e813d10b56bc72321f1375c42f88f2fe0696717132d040c6d4","impliedFormat":99},{"version":"4bdaf0ba0f4d2323b1cc4ebe39a1f78d9fa385d918f4f8d4c4747cc5f72524f6","impliedFormat":99},{"version":"4c700a8ce85d38625530a4c7e026ffc10436fe8101dc392f09b331ad2c32a9ad","impliedFormat":99},{"version":"6dbebda906deea3021cfcebf32f0fe178eb917fc2c475f1cc8c76ca4a3d7f146","impliedFormat":99},{"version":"ce48d094c10f12813adebaaf391bc1310c012fcb13fc6c88b29b83ea1b51a6c5","impliedFormat":99},{"version":"6a0c2673328ac13d382c06191bbcee6c00686c65e44e6a78f84819f896fef3b9","impliedFormat":99},{"version":"8ec352eabf812f3fc4ae851be15ef57753436976060bf8704149bec2d4bdacf4","impliedFormat":99},{"version":"25103a0bf17c0419062cf1376273b26fe5262aa34da7bd58584045a5e18b8a4c","impliedFormat":99},{"version":"c164152a56d491a212a6e93531c49f6f957e9a38b4bb732429a73cbb234f9cbb","impliedFormat":99},{"version":"e726e7fee8e3297e15aff8e1668762323588e119aae6e4698da6111628af74a3","impliedFormat":99},{"version":"1aefe473a947c1178322a3526f52a83db490c8cce9e57b07c0224688be55f264","impliedFormat":99},{"version":"dfedf320784a8ebe0f9b0dade5fbb6adb95f624a63bbe5760b8593f41992657f","impliedFormat":99},{"version":"ba56cb9be18354c664754abdb7b6f5dd262a7883d336018459e1e54f24586916","impliedFormat":99},{"version":"ed85a7aa3450739e9e0c4026e93e16b89ca83eb3fe7abc8527ad6dfc640140a6","impliedFormat":99},{"version":"9bb3e67ae8e93957c194b32acbd8580cf17a9df8ba44625568190bfc16e8c15a","impliedFormat":99},{"version":"4f6dc8c84a068552e39ce66235ebe650d43863b42dcb7835cff33df1b1ce6e51","impliedFormat":99},{"version":"1381f2919bf6a8b2d891ada612c23784e17cae6300db12fbb7900e9381ecf4de","impliedFormat":99},{"version":"05bbf247a54330ced6a6a821412224bdae0869f0cab0b8d4d5e49f1a6f4577a6","impliedFormat":99},{"version":"8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","impliedFormat":99},{"version":"092944a8c05f9b96579161e88c6f211d5304a76bd2c47f8d4c30053269146bc8","impliedFormat":99},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"10073cdcf56982064c5337787cc59b79586131e1b28c106ede5bff362f912b70","impliedFormat":99},{"version":"72950913f4900b680f44d8cab6dd1ea0311698fc1eefb014eb9cdfc37ac4a734","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"4e741b9c88e80c9e4cedf07b5a698e8e3a3bd73cf649f664d6dd3f868c05c2f3","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"ff0a83c9a0489a627e264ffcb63f2264b935b20a502afa3a018848139e3d8575","impliedFormat":99},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"971f12a5fc236419ced0b7b9f23a53c1758233713f565635bbf4b85e2b23f55a","impliedFormat":99},{"version":"76de3321ce519928f1ff7d7a30391c0dc7374af20f81d9167919f038895b5cb0","impliedFormat":99},{"version":"094b9210da23b8711709b0535c59841186267bf6b83c1609aa9b515f830ab274","impliedFormat":99},{"version":"fbfbb4e99c6259ff5ccc4a5a62b3b63c0c8cae6e84737786c4a4c761c9a9de91","impliedFormat":99},{"version":"604887bbd5b0a93234ce882543a465f008636185c52e0f0353330e2bc38b03b6","impliedFormat":99},{"version":"32bf912173e8a9533631f9e9d8dc90a2ac7b52c2355611ddd886beab24dfd182","impliedFormat":99},{"version":"82695324abf7f3278b6d9f0582f4a544e8f7055c8cbe1065ab5cbacde1719c4c","impliedFormat":99},{"version":"43bba542e50e19241ec64bc13cfc0d9273e6198f36563cecad1f4e4b78ad47f3","impliedFormat":99},{"version":"b8cb3b69c0e8114f758bb8ef8efeef1cc80f8911bfd21126def73d2174ce479e","impliedFormat":99},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"ee9636a7d8dc2c2c3a74924205ede5ab3437100f1f9d4379098b4972987e0ac6","impliedFormat":1},{"version":"71b110829b8f5e7653352a132544ece2b9a10e93ba1c77453187673bd46f13ee","impliedFormat":1},{"version":"7b0537621a997a853ead2b46a4d85e654beeb96b9d034ea09bf3387348521d40","impliedFormat":1},{"version":"1223780c318ef42fd33ac772996335ed92d57cf7c0fc73178acab5e154971aab","impliedFormat":1},{"version":"0d04cbe88c8a25c2debd2eef03ec5674563e23ca9323fa82ede3577822653bd2","impliedFormat":1},{"version":"aaa70439f135c3fa0a34313de49e94cae3db954c8b8d6af0d56a46c998c2923f","impliedFormat":1},{"version":"2cee3ea4c39a53326148e6e78109affd48fa69eae386871c1f440315a6120f40","impliedFormat":1},{"version":"daf07c1ca8ccfb21ad958833546a4f414c418fe096dcebdbb90b02e12aa5c3a2","impliedFormat":1},{"version":"89ac5224feeb2de76fc52fc2a91c5f6448a98dbe4e8d726ecb1730fa64cd2d30","impliedFormat":1},{"version":"3d59c264069a6af79288388633738630aa72e853e450e43f151ee092216d263d","impliedFormat":1},{"version":"acf00cfabe8c4de18bea655754ea39c4d04140257556bbf283255b695d00e36f","impliedFormat":1},{"version":"39b70d5f131fcfdeba404ee63aba25f26d8376a73bacd8275fb5a9f06219ac77","impliedFormat":1},{"version":"cdae26c737cf4534eeec210e42eab2d5f0c3855240d8dde3be4aee9194e4e781","impliedFormat":1},{"version":"5aa0c50083d0d9a423a46afaef78c7f42420759cfa038ad40e8b9e6cafc38831","impliedFormat":1},{"version":"10d6a49a99a593678ba4ea6073d53d005adfc383df24a9e93f86bf47de6ed857","impliedFormat":1},{"version":"1b7ea32849a7982047c2e5d372300a4c92338683864c9ab0f5bbd1acadae83a3","impliedFormat":1},{"version":"224083e6fcec1d300229da3d1dafc678c642863996cbfed7290df20954435a55","impliedFormat":1},{"version":"4248ac3167b1a1ce199fda9307abc314b3132527aeb94ec30dbcfe4c6a417b1b","impliedFormat":1},{"version":"c1606128c2ac5c6a3cc2cc24c4582a437141a8ed6542d7f5cbb7623835939831","impliedFormat":1},{"version":"ca055d26105248f745ea6259b4c498ebeed18c9b772e7f2b3a16f50226ff9078","impliedFormat":1},{"version":"ea6b2badb951d6dfa24bb7d7eb733327e5f9a15fc994d6dc1c54b2c7a83b6a0b","impliedFormat":1},{"version":"03fdf8dba650d830388b9985750d770dd435f95634717f41cea814863a9ac98b","impliedFormat":1},{"version":"6fd08e3ef1568cd0dc735c9015f6765e25143a4a0331d004a29c51b50eec402a","impliedFormat":1},{"version":"2e988cd4d24edac4936449630581c79686c8adac10357eb0cdb410c24f47c7f0","impliedFormat":1},{"version":"b813f62a37886ed986b0f6f8c5bf323b3fcae32c1952b71d75741e74ea9353cf","impliedFormat":1},{"version":"44a1a722038365972b1b52841e1132785bf5d75839dbc6cc1339f2d36f8507a1","impliedFormat":1},{"version":"83fe1053701101ac6d25364696fea50d2ceb2f81d1456bc11e682a20aaeac52e","impliedFormat":1},{"version":"4f228cb2089a5a135a1a8cefe612d5aebcef8258f7dbe3b7c4dad4e26a81ec08","impliedFormat":1},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fd8a5aefd8c3feb3936ca66f5aa89dff7bf6e6537b4158dbd0f6e0d65ed3b9e","impliedFormat":1},{"version":"a18642ddf216f162052a16cba0944892c4c4c977d3306a87cb673d46abbb0cbf","impliedFormat":1},{"version":"41c41c6e90133bb2a14f7561f29944771886e5535945b2b372e2f6ed6987746e","impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":1},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e4af494f7a14b226bbe732e9c130d8811f8c7025911d7c58dd97121a85519715","impliedFormat":1},{"version":"cbb1c5ba5dbabe42c19ca31b83e48fec95895484fe1d1a8fb649b69ea224c5b8","impliedFormat":99},{"version":"b34b5f6b506abb206b1ea73c6a332b9ee9c8c98be0f6d17cdbda9430ecc1efab","impliedFormat":99},{"version":"75d4c746c3d16af0df61e7b0afe9606475a23335d9f34fcc525d388c21e9058b","impliedFormat":99},{"version":"fa959bf357232201c32566f45d97e70538c75a093c940af594865d12f31d4912","impliedFormat":99},{"version":"d2c52abd76259fc39a30dfae70a2e5ce77fd23144457a7ff1b64b03de6e3aec7","impliedFormat":99},{"version":"e6233e1c976265e85aa8ad76c3881febe6264cb06ae3136f0257e1eab4a6cc5a","impliedFormat":99},{"version":"f73e2335e568014e279927321770da6fe26facd4ac96cdc22a56687f1ecbb58e","impliedFormat":99},{"version":"317878f156f976d487e21fd1d58ad0461ee0a09185d5b0a43eedf2a56eb7e4ea","impliedFormat":99},{"version":"324ac98294dab54fbd580c7d0e707d94506d7b2c3d5efe981a8495f02cf9ad96","impliedFormat":99},{"version":"9ec72eb493ff209b470467e24264116b6a8616484bca438091433a545dfba17e","impliedFormat":99},{"version":"d6ee22aba183d5fc0c7b8617f77ee82ecadc2c14359cc51271c135e23f6ed51f","impliedFormat":99},{"version":"49747416f08b3ba50500a215e7a55d75268b84e31e896a40313c8053e8dec908","impliedFormat":99},{"version":"81e634f1c5e1ca309e7e3dc69e2732eea932ef07b8b34517d452e5a3e9a36fa3","impliedFormat":99},{"version":"34f39f75f2b5aa9c84a9f8157abbf8322e6831430e402badeaf58dd284f9b9a6","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"891694d3694abd66f0b8872997b85fd8e52bc51632ce0f8128c96962b443189f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"971a2c327ff166c770c5fb35699575ba2d13bba1f6d2757309c9be4b30036c8e","impliedFormat":99},{"version":"4f45e8effab83434a78d17123b01124259fbd1e335732135c213955d85222234","impliedFormat":99},{"version":"7bd51996fb7717941cbe094b05adc0d80b9503b350a77b789bbb0fc786f28053","impliedFormat":99},{"version":"b62006bbc815fe8190c7aee262aad6bff993e3f9ade70d7057dfceab6de79d2f","impliedFormat":99},{"version":"13497c0d73306e27f70634c424cd2f3b472187164f36140b504b3756b0ff476d","impliedFormat":99},{"version":"bf7a2d0f6d9e72d59044079d61000c38da50328ccdff28c47528a1a139c610ec","impliedFormat":99},{"version":"04471dc55f802c29791cc75edda8c4dd2a121f71c2401059da61eff83099e8ab","impliedFormat":99},{"version":"120a80aa556732f684db3ed61aeff1d6671e1655bd6cba0aa88b22b88ac9a6b1","affectsGlobalScope":true,"impliedFormat":99},{"version":"e58c0b5226aff07b63be6ac6e1bec9d55bc3d2bda3b11b9b68cccea8c24ae839","affectsGlobalScope":true,"impliedFormat":99},{"version":"a23a08b626aa4d4a1924957bd8c4d38a7ffc032e21407bbd2c97413e1d8c3dbd","impliedFormat":99},{"version":"5a88655bf852c8cc007d6bc874ab61d1d63fba97063020458177173c454e9b4a","impliedFormat":99},{"version":"7e4dfae2da12ec71ffd9f55f4641a6e05610ce0d6784838659490e259e4eb13c","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"13573a613314e40482386fe9c7934f9d86f3e06f19b840466c75391fb833b99b","impliedFormat":99},{"version":"ed09d42b14a604190e8c9fc972d18ea47d5c03c6c4a0003c9620dca915a1973d","affectsGlobalScope":true,"impliedFormat":99}],"root":[609,610,1521,1522,[1525,1530],1532,[1777,1779],[1781,1838],[1844,1856],[1858,1861],[1864,1870],[1873,1878],[1882,1884],[1950,1964],1966,1967,[2033,2035],[2038,2052],[2078,2081],[2274,2278],[2304,2308],[2310,2312],[2315,2323],[2340,2351],2355,2356,[2397,2423],[2426,2467],[2472,2477],[2520,2536],[2538,2584],[2630,2703]],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"jsx":2,"module":102,"noErrorTruncation":true,"outDir":"./dist","removeComments":true,"rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[2468,1],[2469,2],[2471,3],[2470,1],[2358,4],[2359,5],[2360,6],[2361,7],[1200,8],[3195,9],[3193,5],[3194,10],[3196,11],[3191,12],[3189,5],[3192,13],[3190,14],[1534,5],[1535,5],[1537,15],[1536,5],[1538,16],[1539,17],[1542,18],[1540,5],[1541,19],[1668,20],[1674,21],[1658,22],[1675,23],[1651,24],[1667,25],[1659,4],[1660,4],[1661,26],[1662,26],[1664,27],[1666,28],[1671,29],[1669,30],[1670,26],[1682,31],[1676,32],[1672,26],[1652,33],[1657,34],[1665,35],[1673,35],[1654,36],[1655,37],[1656,30],[1663,35],[1678,5],[1677,5],[1679,5],[1680,5],[1681,38],[1653,5],[342,5],[329,5],[66,5],[318,39],[319,39],[320,5],[321,4],[331,40],[322,39],[323,41],[324,5],[325,5],[326,39],[327,39],[328,39],[330,42],[338,43],[340,5],[337,5],[344,44],[341,5],[339,5],[335,45],[336,46],[343,47],[345,48],[332,5],[334,49],[333,50],[272,5],[275,51],[271,5],[1261,5],[273,5],[274,5],[348,52],[349,52],[350,52],[351,52],[352,52],[353,52],[354,52],[347,53],[355,52],[369,54],[356,52],[346,5],[357,52],[358,52],[359,52],[360,52],[361,52],[362,52],[363,52],[364,52],[365,52],[366,52],[367,52],[368,52],[377,55],[375,56],[374,5],[373,5],[376,57],[417,58],[67,5],[68,5],[69,5],[1243,59],[71,60],[1249,61],[1248,62],[261,63],[262,60],[397,5],[291,5],[292,5],[398,64],[263,5],[399,5],[400,65],[70,5],[265,66],[266,67],[264,68],[267,66],[268,5],[270,69],[282,70],[283,5],[288,71],[284,5],[285,5],[286,5],[287,5],[289,5],[290,72],[296,73],[299,74],[297,5],[298,5],[317,75],[300,5],[301,5],[1292,76],[281,77],[279,78],[277,79],[278,80],[280,5],[308,81],[302,5],[311,82],[304,83],[309,84],[307,85],[310,86],[305,87],[306,88],[294,89],[313,90],[295,91],[315,92],[316,93],[303,5],[312,5],[269,5],[276,94],[314,95],[383,96],[378,5],[384,97],[379,98],[380,99],[381,100],[382,101],[385,102],[390,103],[388,104],[389,104],[396,105],[386,5],[387,106],[391,103],[393,107],[395,108],[394,109],[409,110],[402,111],[403,112],[404,112],[405,113],[406,113],[407,112],[408,112],[401,114],[411,115],[410,116],[413,117],[412,118],[414,119],[370,120],[372,121],[293,5],[371,89],[1780,89],[415,122],[392,123],[416,124],[418,125],[1214,126],[1234,127],[1235,128],[1236,5],[1237,129],[1238,130],[1721,5],[1722,131],[1247,132],[1240,133],[1244,134],[1252,135],[1250,4],[1251,136],[1241,137],[1253,5],[1255,138],[1256,139],[1257,140],[1246,141],[1242,142],[1266,143],[1254,144],[1281,145],[1239,146],[1282,147],[1279,148],[1280,4],[1304,149],[1229,150],[1225,151],[1227,152],[1278,153],[1220,154],[1268,155],[1267,5],[1228,156],[1275,157],[1232,158],[1276,5],[1277,159],[1230,160],[1231,161],[1226,162],[1224,163],[1219,5],[1272,164],[1285,165],[1283,4],[1215,4],[1271,166],[1216,46],[1217,128],[1218,167],[1222,168],[1221,169],[1284,170],[1223,171],[1260,172],[1258,138],[1259,173],[1269,46],[1270,174],[1273,175],[1288,176],[1289,177],[1286,178],[1287,179],[1290,180],[1291,181],[1293,182],[1265,183],[1262,184],[1263,39],[1264,173],[1295,185],[1294,186],[1301,187],[1233,4],[1297,188],[1296,4],[1299,189],[1298,5],[1300,190],[1245,191],[1274,192],[1303,193],[1302,4],[539,194],[540,195],[554,196],[542,197],[541,198],[536,199],[537,5],[538,5],[553,200],[544,201],[545,201],[546,201],[547,201],[549,202],[548,201],[550,203],[551,204],[543,5],[552,205],[2424,4],[2353,206],[2352,207],[2354,208],[1370,209],[1373,210],[1371,5],[1372,5],[1361,5],[1362,211],[1377,212],[1374,4],[1375,213],[1376,209],[1378,214],[896,5],[897,5],[900,215],[922,216],[901,5],[902,5],[903,4],[905,5],[904,5],[923,5],[906,5],[907,217],[908,5],[909,4],[910,5],[911,218],[913,219],[914,5],[916,220],[917,219],[918,221],[924,222],[919,218],[920,5],[925,223],[930,224],[939,225],[921,5],[912,218],[929,226],[898,5],[915,227],[927,228],[928,5],[926,5],[931,229],[936,230],[932,4],[933,4],[934,4],[935,4],[899,5],[937,5],[938,231],[2593,232],[2591,233],[2585,4],[2586,5],[2590,234],[2587,235],[2592,236],[2589,237],[2588,238],[2280,239],[2279,240],[2295,5],[2281,5],[2282,5],[2296,241],[2283,4],[2293,242],[2294,5],[2298,243],[2297,5],[2299,4],[2300,244],[2302,245],[2303,246],[2284,247],[2288,248],[2285,5],[2286,5],[2287,5],[2292,249],[2301,5],[2289,95],[2290,5],[2291,5],[2064,250],[2067,251],[2066,252],[2065,253],[2063,254],[2059,255],[2062,256],[2061,257],[2060,258],[2058,254],[2073,259],[2072,260],[2071,261],[2070,262],[2069,263],[2068,264],[2169,265],[2170,266],[2171,267],[2164,5],[2165,268],[2166,269],[2167,270],[2168,271],[1734,272],[1737,273],[1743,274],[1746,275],[1767,276],[1745,277],[1726,5],[1727,278],[1728,279],[1731,5],[1729,5],[1730,5],[1768,280],[1733,272],[1732,5],[1769,281],[1736,273],[1735,5],[1773,282],[1770,283],[1740,284],[1742,285],[1739,286],[1741,287],[1738,284],[1771,288],[1744,272],[1772,289],[1757,290],[1759,291],[1761,292],[1760,293],[1754,294],[1747,295],[1766,296],[1763,297],[1765,298],[1750,299],[1752,300],[1749,297],[1753,5],[1764,301],[1751,5],[1762,5],[1748,5],[1755,302],[1756,5],[1758,303],[2251,304],[2250,305],[2252,306],[2244,5],[2249,307],[2246,308],[2248,308],[2247,308],[2245,308],[2082,270],[2083,309],[2084,309],[2085,310],[2095,5],[2087,270],[2096,270],[2088,5],[2089,270],[2091,311],[2098,5],[2092,312],[2093,270],[2094,5],[2090,270],[2113,313],[2112,314],[2101,315],[2097,5],[2100,316],[2099,5],[2102,270],[2106,270],[2103,270],[2104,270],[2105,270],[2110,5],[2111,270],[2107,5],[2108,5],[2109,5],[2161,317],[2162,318],[2160,319],[2163,320],[2187,321],[2188,322],[2186,323],[2191,324],[2190,325],[2189,326],[2193,5],[2194,327],[2192,328],[2199,5],[2200,329],[2198,330],[2197,331],[2174,332],[2185,333],[2176,334],[2181,335],[2182,335],[2180,336],[2179,337],[2177,338],[2178,339],[2184,5],[2175,335],[2172,340],[2173,334],[2183,335],[2116,341],[2127,342],[2115,343],[2128,5],[2117,344],[2118,345],[2125,343],[2126,346],[2124,347],[2119,345],[2120,345],[2121,345],[2122,345],[2123,348],[2129,349],[2114,350],[2202,351],[2204,352],[2214,353],[2210,354],[2207,355],[2209,355],[2206,356],[2205,357],[2201,357],[2208,358],[2215,359],[2213,360],[2211,361],[2212,362],[2203,363],[2147,364],[2158,365],[2136,366],[2140,367],[2137,368],[2141,368],[2142,368],[2138,5],[2139,5],[2143,369],[2148,370],[2149,371],[2086,5],[2153,372],[2157,373],[2156,374],[2130,375],[2150,376],[2151,372],[2154,377],[2155,378],[2159,379],[2152,5],[2131,380],[2144,381],[2145,382],[2132,270],[2134,383],[2135,384],[2133,5],[2146,385],[2254,386],[2243,387],[2253,388],[2242,389],[2223,390],[2216,5],[2217,270],[2220,391],[2221,392],[2218,270],[2225,393],[2230,394],[2231,394],[2233,395],[2219,396],[2232,397],[2224,398],[2238,399],[2229,400],[2227,401],[2226,402],[2228,403],[2234,404],[2235,404],[2236,405],[2237,404],[2222,406],[2240,407],[2239,408],[2241,409],[2262,410],[2257,5],[2258,411],[2259,5],[2261,5],[2260,5],[2255,5],[2256,412],[1905,413],[1906,413],[1908,414],[1909,413],[1910,413],[1949,415],[1911,413],[1912,413],[1913,413],[1914,413],[1915,413],[1916,413],[1917,413],[1918,413],[1919,413],[1921,416],[1887,417],[1922,413],[1923,413],[1947,418],[1945,419],[1944,5],[1943,5],[1946,420],[1948,413],[1349,5],[1872,421],[1871,422],[2054,423],[1533,5],[1879,424],[534,425],[3251,426],[555,427],[533,428],[556,429],[1340,428],[3249,5],[3183,5],[530,430],[535,431],[2030,432],[531,5],[2384,433],[2364,434],[2366,435],[2365,434],[2368,436],[2370,437],[2371,438],[2372,439],[2373,437],[2374,438],[2375,437],[2376,440],[2377,438],[2378,437],[2379,441],[2380,434],[2381,434],[2382,442],[2369,443],[2383,444],[2367,444],[2309,5],[1881,445],[1202,446],[1203,447],[1201,448],[1204,449],[1205,450],[1206,451],[1207,452],[1208,453],[1209,454],[1210,455],[1211,456],[1212,457],[1213,458],[568,459],[561,460],[565,461],[563,462],[566,463],[564,464],[567,465],[562,5],[560,466],[559,467],[1880,5],[2425,468],[473,469],[474,469],[475,470],[421,471],[476,472],[477,473],[478,474],[419,5],[479,475],[480,476],[481,477],[482,478],[483,479],[484,480],[485,480],[486,481],[487,482],[488,483],[489,484],[422,5],[420,5],[490,485],[491,486],[492,487],[526,488],[493,489],[494,5],[495,490],[496,491],[497,492],[498,339],[499,493],[500,494],[501,495],[502,496],[503,497],[504,497],[505,498],[506,5],[507,499],[508,500],[510,501],[509,502],[511,503],[512,504],[513,505],[514,506],[515,507],[516,508],[517,509],[518,510],[519,511],[520,512],[521,513],[522,514],[523,515],[423,5],[424,516],[425,5],[426,5],[469,517],[470,518],[471,5],[472,503],[524,519],[525,520],[1901,521],[1888,522],[1895,523],[1891,524],[1889,525],[1892,526],[1896,527],[1897,523],[1894,528],[1893,529],[1898,530],[1899,531],[1900,532],[1890,533],[2196,534],[2195,535],[1198,536],[1197,537],[1843,538],[1839,5],[1840,5],[1842,539],[1841,5],[1907,5],[528,5],[529,5],[1902,5],[1904,540],[1920,413],[2053,541],[2339,542],[593,543],[594,544],[570,545],[573,546],[591,543],[592,543],[582,543],[581,547],[579,543],[574,543],[587,543],[585,543],[589,543],[569,543],[586,543],[590,543],[575,543],[576,543],[588,543],[571,543],[577,543],[578,543],[580,543],[584,543],[595,548],[583,543],[572,543],[608,549],[607,5],[602,548],[604,550],[603,548],[596,548],[597,548],[599,548],[601,548],[605,550],[606,550],[598,550],[600,550],[527,551],[532,552],[2363,522],[1421,553],[1412,5],[1413,5],[1414,5],[1415,5],[1416,5],[1417,5],[1418,5],[1419,5],[1420,5],[3144,554],[1337,554],[3261,555],[3238,556],[3236,5],[3237,5],[2704,5],[2715,557],[2710,558],[2713,559],[3252,560],[3243,5],[3246,561],[3245,562],[3257,562],[3244,563],[3260,5],[2712,564],[2714,564],[2706,565],[2709,566],[3239,565],[2711,567],[2705,5],[3250,5],[1968,5],[1986,568],[1979,569],[1970,570],[1980,571],[1978,572],[1971,5],[1981,573],[1982,574],[1983,5],[1984,575],[1974,576],[1972,577],[1969,5],[1975,5],[1985,5],[1977,578],[1976,579],[1973,5],[427,5],[1543,5],[1559,580],[1623,581],[1624,582],[1622,583],[1625,5],[1630,584],[1626,5],[1627,5],[1628,5],[1629,5],[1636,585],[1647,586],[1637,587],[1635,588],[1639,589],[1633,590],[1640,591],[1634,592],[1641,593],[1606,5],[1643,594],[1632,595],[1642,587],[1644,596],[1631,597],[1646,598],[1593,5],[1594,5],[1597,599],[1595,5],[1562,5],[1596,5],[1650,600],[1561,601],[1544,5],[1550,602],[1563,603],[1586,604],[1600,605],[1621,606],[1601,5],[1555,607],[1602,608],[1603,609],[1604,5],[1605,5],[1557,610],[1608,611],[1609,612],[1546,5],[1554,613],[1610,5],[1599,614],[1611,5],[1620,5],[1592,615],[1612,5],[1549,616],[1613,5],[1614,5],[1615,5],[1617,617],[1616,618],[1618,619],[1607,620],[1598,621],[1619,622],[1558,623],[1587,5],[1551,5],[1588,5],[1591,624],[1556,625],[1552,626],[1553,5],[1589,613],[1590,627],[1545,5],[1645,628],[1560,629],[1649,630],[1648,631],[2056,632],[2057,633],[1322,634],[1323,634],[1324,634],[1330,635],[1325,634],[1326,634],[1327,634],[1328,634],[1329,634],[1313,636],[1312,5],[1331,637],[1319,5],[1315,638],[1306,5],[1305,5],[1307,5],[1308,634],[1309,639],[1321,640],[1310,634],[1311,634],[1316,641],[1317,642],[1318,634],[1314,5],[1320,5],[1382,5],[1384,643],[1503,644],[1507,644],[1506,644],[1504,644],[1505,644],[1508,644],[1385,644],[1397,644],[1386,644],[1399,644],[1401,644],[1394,644],[1395,644],[1396,644],[1400,644],[1402,644],[1387,644],[1398,644],[1388,644],[1390,645],[1391,644],[1392,644],[1393,644],[1409,644],[1408,644],[1511,646],[1403,644],[1405,644],[1404,644],[1406,644],[1407,644],[1510,644],[1509,644],[1410,644],[1422,647],[1423,647],[1425,644],[1471,644],[1470,644],[1491,644],[1426,647],[1468,644],[1472,644],[1427,644],[1428,644],[1429,647],[1473,644],[1467,647],[1424,647],[1474,644],[1430,647],[1475,644],[1431,647],[1455,644],[1432,644],[1476,644],[1433,644],[1465,647],[1435,644],[1436,644],[1477,648],[1438,644],[1440,644],[1441,644],[1447,644],[1448,644],[1449,644],[1442,647],[1479,644],[1466,647],[1478,647],[1443,644],[1444,644],[1480,644],[1445,644],[1437,647],[1481,644],[1464,644],[1482,644],[1446,647],[1450,644],[1451,644],[1469,647],[1483,644],[1484,644],[1463,649],[1439,644],[1485,647],[1486,644],[1487,644],[1488,644],[1489,647],[1452,644],[1490,644],[1454,647],[1456,644],[1453,647],[1434,644],[1457,644],[1460,644],[1458,644],[1459,644],[1411,644],[1493,644],[1492,644],[1494,644],[1501,644],[1495,644],[1496,644],[1498,644],[1499,644],[1497,644],[1502,644],[1500,644],[1519,650],[1517,651],[1518,652],[1516,653],[1515,644],[1514,654],[1381,5],[1383,5],[1379,5],[1512,5],[1513,655],[1389,643],[1380,5],[2362,5],[611,5],[1547,5],[1548,656],[1364,5],[1363,5],[1369,657],[1365,658],[1368,659],[1367,660],[1366,5],[1903,5],[1580,5],[2329,661],[2326,5],[2328,662],[2327,663],[2336,661],[2335,661],[2337,664],[2334,665],[2332,661],[2333,661],[2330,666],[2331,661],[1332,5],[1334,667],[1333,667],[1335,668],[1341,5],[1348,669],[1336,5],[1342,670],[1339,671],[1338,672],[1346,673],[1343,674],[1344,675],[1345,676],[1347,677],[3188,5],[2018,5],[2008,678],[1989,679],[2019,5],[1990,5],[2021,680],[2022,5],[2023,5],[2014,5],[1995,681],[1991,682],[1992,682],[1993,682],[2029,683],[2007,684],[1994,685],[1997,686],[2024,687],[1988,679],[1998,688],[1999,688],[2001,689],[2000,688],[2010,5],[2025,5],[2002,688],[1987,5],[2020,5],[2009,5],[2011,690],[2012,691],[2013,692],[2003,693],[2026,687],[2015,5],[1996,679],[2004,5],[2027,694],[2006,695],[2028,696],[2005,697],[2016,698],[2017,699],[3268,700],[3270,701],[3269,702],[3267,703],[3266,5],[2077,704],[2076,705],[2075,706],[2074,707],[2037,708],[2036,5],[2537,5],[2716,5],[2727,709],[3165,710],[3163,711],[3161,712],[3162,713],[3169,714],[3168,715],[3166,716],[3167,717],[2717,5],[2718,5],[3019,718],[3026,719],[3034,720],[3030,721],[3002,5],[3160,722],[3028,723],[3029,5],[3164,724],[3027,725],[3018,726],[3036,727],[3035,728],[2969,729],[2960,730],[2726,5],[3006,731],[3003,5],[3007,732],[3170,733],[3008,734],[3004,5],[3005,5],[3011,735],[3013,736],[3012,735],[3010,5],[3038,737],[2748,738],[2746,5],[2753,739],[3037,5],[2752,740],[2754,741],[2743,742],[2742,5],[2750,743],[3039,744],[3040,745],[2749,746],[3041,745],[3042,747],[2751,748],[3139,749],[3047,750],[3048,744],[3043,5],[3044,751],[3046,752],[3045,753],[2747,754],[3134,755],[3050,756],[3049,757],[2983,758],[3051,759],[2792,760],[2791,761],[2789,762],[2974,763],[2788,764],[2755,765],[2820,766],[2790,5],[2787,5],[2799,767],[2798,768],[2793,5],[2797,5],[2795,5],[2796,5],[2794,769],[3054,770],[3052,771],[3053,772],[2721,773],[2720,5],[3147,774],[2719,5],[2722,775],[3056,776],[3058,777],[3055,776],[2725,778],[2723,779],[2724,779],[3057,780],[3059,781],[3061,782],[3063,783],[3143,784],[3065,785],[3067,786],[3069,787],[3071,788],[3060,789],[3062,790],[3142,789],[3064,789],[3066,789],[3068,791],[3070,789],[3072,792],[3074,793],[2829,794],[3076,789],[3078,795],[3080,791],[3082,796],[3140,789],[3084,789],[3087,797],[3089,798],[3091,799],[3093,793],[3073,800],[3075,801],[3077,802],[2830,803],[3079,804],[3081,805],[3083,806],[3141,807],[3085,808],[3088,809],[3090,810],[3092,811],[3094,812],[3095,5],[3096,813],[3148,814],[2992,815],[3153,816],[2999,817],[3021,818],[3022,818],[3020,5],[3023,819],[2997,5],[3014,818],[3015,818],[2998,820],[3017,821],[3016,5],[3000,822],[3155,823],[3157,5],[3152,824],[2994,825],[3154,826],[3156,5],[2993,818],[3128,827],[3150,5],[3097,828],[3149,5],[3151,5],[2873,5],[2996,827],[2761,829],[2762,728],[3098,830],[2995,831],[3099,832],[3033,833],[3031,5],[3032,834],[3171,835],[3177,836],[3101,765],[3102,837],[3100,838],[2855,839],[3103,840],[3025,841],[3024,5],[3135,5],[3138,842],[3136,5],[3137,843],[3159,5],[2734,844],[2733,5],[3104,845],[2732,846],[2731,5],[3106,847],[3107,848],[3111,849],[3105,848],[3108,847],[2756,850],[2784,851],[2782,852],[2783,853],[2984,854],[2961,855],[2982,856],[3001,857],[2985,5],[3112,709],[2991,5],[2978,858],[2759,766],[2975,859],[2822,860],[2823,860],[3113,861],[2838,862],[2839,863],[2840,864],[2841,757],[2776,865],[3132,866],[2844,867],[2842,5],[2843,868],[2845,757],[2846,757],[2772,869],[2847,870],[2848,871],[2849,757],[3114,872],[2757,873],[2850,757],[2777,874],[2780,875],[2781,876],[2779,877],[2778,878],[2851,757],[2852,757],[2853,757],[2854,757],[2821,5],[2857,879],[2858,863],[3115,880],[2763,771],[2773,881],[2760,5],[2771,882],[2859,883],[2860,757],[2861,884],[2862,885],[2837,886],[2826,5],[2827,5],[2831,887],[2828,888],[2825,889],[2835,890],[2832,891],[2833,892],[2834,5],[2836,893],[2824,5],[3117,894],[3116,5],[2863,757],[2864,757],[2764,895],[2865,757],[2866,757],[2774,896],[2867,757],[2767,897],[2765,898],[2868,757],[2869,757],[2870,757],[2871,757],[2766,895],[2872,757],[2874,899],[2768,900],[2769,901],[2786,902],[2875,757],[2876,757],[2758,903],[2877,757],[2878,757],[2879,757],[2882,904],[2880,905],[2881,906],[2963,907],[2770,908],[2964,757],[2965,757],[2966,909],[2967,757],[3118,757],[2968,862],[2744,910],[2745,911],[2741,911],[2740,911],[2739,912],[2736,913],[2737,911],[2735,5],[2973,914],[2729,5],[2730,915],[2728,5],[2976,916],[2990,854],[2962,917],[2884,918],[2885,918],[2886,918],[2883,919],[2889,920],[2891,921],[2910,922],[2892,923],[2893,924],[2971,925],[2894,920],[2896,926],[2899,927],[2900,928],[2901,927],[2904,929],[2905,930],[2906,931],[2907,932],[2908,930],[2909,928],[2911,933],[2912,933],[2913,933],[2914,933],[2915,931],[2916,934],[2917,928],[2918,935],[2919,931],[2920,930],[2921,932],[2922,930],[2923,932],[2924,928],[2925,936],[2926,926],[2927,937],[2928,923],[2888,938],[2931,939],[2806,940],[2929,941],[2930,920],[2932,942],[2937,935],[2934,943],[2935,944],[2936,924],[2938,945],[2939,946],[2941,947],[2942,947],[2943,942],[2944,920],[2945,948],[2946,918],[2947,932],[2972,949],[2970,950],[2948,923],[2949,923],[2957,951],[2950,952],[2954,951],[2955,953],[2953,954],[2956,924],[2958,955],[2959,924],[2785,956],[3119,957],[3109,958],[3110,959],[2738,5],[2987,852],[2988,960],[2986,5],[3120,5],[3121,958],[3122,961],[3123,962],[2989,963],[3086,964],[2812,965],[2811,5],[2933,966],[2902,967],[2890,967],[2903,967],[2819,968],[2952,969],[2887,967],[2898,970],[2818,971],[2814,972],[2895,967],[2805,973],[2810,974],[2951,968],[2809,5],[2801,975],[2813,967],[2897,976],[2808,967],[2940,977],[2817,978],[2816,5],[2815,5],[2807,967],[2800,967],[2803,979],[2804,980],[2802,5],[3133,5],[3172,5],[2980,981],[2979,852],[2981,982],[3009,983],[2775,984],[3145,985],[3146,986],[2856,987],[3173,988],[3175,989],[3131,5],[3158,5],[2977,5],[3174,990],[3129,991],[3124,992],[3125,5],[3126,993],[3127,5],[3176,994],[3130,852],[557,199],[2325,995],[2324,5],[2338,996],[1965,5],[3206,5],[1684,997],[1700,998],[1702,999],[1701,1000],[1685,522],[1699,1001],[1697,1002],[1698,1003],[1696,1004],[1689,1005],[1690,1006],[1692,1007],[1693,1008],[1691,1009],[1694,1010],[1703,1011],[1695,1012],[1687,1013],[1683,1014],[1688,1015],[1686,997],[1565,1016],[1582,1017],[1584,1018],[1583,1019],[1566,522],[1581,1020],[1578,1021],[1579,1022],[1577,1004],[1570,1023],[1571,1024],[1573,1025],[1574,1026],[1572,1027],[1575,1028],[1585,1029],[1576,1030],[1568,1031],[1564,1014],[1569,1032],[1567,1016],[644,1033],[613,1034],[623,1034],[614,1034],[624,1034],[615,1034],[616,1034],[631,1034],[630,1034],[632,1034],[633,1034],[625,1034],[617,1034],[626,1034],[618,1034],[627,1034],[619,1034],[621,1034],[629,1035],[622,1034],[628,1035],[634,1035],[620,1034],[635,1034],[640,1034],[641,1034],[636,1034],[612,5],[642,5],[638,1034],[637,1034],[639,1034],[643,1034],[1531,1036],[736,5],[858,1037],[737,1038],[738,1039],[877,1040],[878,1041],[879,1042],[880,1043],[881,1044],[882,1045],[870,1046],[865,1047],[866,1048],[867,1049],[869,1044],[868,1050],[864,1046],[871,1047],[873,1051],[872,1052],[863,1044],[862,1053],[876,1046],[859,1047],[860,1054],[861,1055],[875,1044],[874,1056],[739,1047],[734,1057],[855,1058],[735,1059],[857,1060],[856,1061],[762,1062],[759,1063],[819,1064],[797,1065],[776,1066],[704,1067],[1523,1068],[895,1069],[841,1070],[884,1071],[883,1038],[661,1072],[670,1073],[674,1074],[783,1075],[694,1076],[665,1077],[676,1078],[773,1076],[753,1076],[788,1079],[852,1076],[647,1080],[691,1080],[660,1081],[648,1080],[721,1076],[699,1082],[700,1083],[669,1084],[678,1085],[679,1080],[680,1086],[682,1087],[712,1088],[745,1076],[847,1076],[649,1076],[728,1089],[662,1090],[671,1080],[673,1091],[713,1080],[714,1092],[715,1093],[716,1093],[706,1094],[709,1095],[666,1096],[683,1076],[849,1076],[650,1076],[684,1076],[685,1097],[686,1076],[646,1076],[725,1098],[688,1099],[792,1100],[790,1076],[791,1101],[793,1102],[689,1076],[846,1076],[851,1076],[720,1103],[672,1072],[690,1076],[722,1104],[723,1105],[687,1076],[703,1076],[891,1106],[853,1107],[645,5],[754,1076],[724,1076],[774,1076],[692,1108],[693,1109],[717,1076],[782,1110],[775,1076],[780,1111],[781,1112],[667,1113],[820,1076],[729,1114],[664,1076],[696,1115],[659,1116],[730,1093],[663,1090],[675,1080],[718,1117],[651,1080],[695,1076],[702,1076],[711,1118],[698,1119],[707,1076],[697,1120],[652,1093],[710,1076],[850,1076],[848,1076],[668,1113],[726,1121],[727,1076],[681,1076],[708,1076],[821,1122],[719,1076],[677,1076],[701,1123],[757,1124],[779,1125],[764,5],[746,1126],[743,1127],[833,1128],[798,1129],[767,1130],[822,1131],[761,1132],[836,1133],[766,1134],[784,1135],[799,1136],[824,1137],[839,1138],[796,1139],[763,1140],[771,1141],[760,1142],[795,1143],[894,1144],[834,1145],[823,1146],[755,1147],[832,1148],[885,1149],[886,1149],[890,1150],[889,1151],[740,1152],[888,1149],[887,1149],[786,1153],[789,1154],[831,1155],[830,1156],[654,5],[787,1157],[770,1158],[828,1159],[653,5],[758,1160],[794,1161],[835,1162],[657,5],[769,1163],[826,1164],[777,1165],[765,1166],[827,1167],[785,1168],[825,1169],[752,1170],[778,1171],[829,1172],[655,5],[768,1173],[732,1174],[854,1175],[733,1176],[837,1177],[844,1178],[845,1179],[843,1180],[811,1181],[741,1182],[812,1183],[842,1184],[748,1185],[750,1186],[800,1187],[804,1188],[751,1189],[749,1189],[803,1190],[744,1191],[805,1192],[806,1193],[807,1194],[815,1195],[813,1196],[808,1197],[809,1198],[810,1199],[816,1200],[814,1201],[747,1202],[802,1203],[817,1204],[818,1205],[801,1206],[756,1207],[742,1057],[705,1208],[892,1209],[893,5],[838,1210],[840,1061],[731,5],[772,5],[656,5],[658,1211],[1031,5],[1153,1212],[1032,1213],[1033,1214],[1172,1215],[1173,1216],[1174,1217],[1175,1218],[1176,1219],[1177,1220],[1165,1221],[1160,1222],[1161,1223],[1162,1224],[1164,1219],[1163,1225],[1159,1221],[1166,1222],[1168,1226],[1167,1227],[1158,1219],[1157,1228],[1171,1221],[1154,1222],[1155,1229],[1156,1230],[1170,1219],[1169,1231],[1034,1222],[1029,1232],[1150,1233],[1030,1234],[1152,1235],[1151,1236],[1057,1237],[1054,1238],[1114,1239],[1092,1240],[1071,1241],[999,1242],[1190,1243],[1136,1244],[1179,1245],[1178,1213],[956,1246],[965,1247],[969,1248],[1078,1249],[989,1250],[960,1251],[971,1252],[1068,1250],[1048,1250],[1083,1253],[1147,1250],[942,1254],[986,1254],[955,1255],[943,1254],[1016,1250],[994,1256],[995,1257],[964,1258],[973,1259],[974,1254],[975,1260],[977,1261],[1007,1262],[1040,1250],[1142,1250],[944,1250],[1023,1263],[957,1264],[966,1254],[968,1265],[1008,1254],[1009,1266],[1010,1267],[1011,1267],[1001,1268],[1004,1269],[961,1270],[978,1250],[1144,1250],[945,1250],[979,1250],[980,1271],[981,1250],[941,1250],[1020,1272],[983,1273],[1087,1274],[1085,1250],[1086,1275],[1088,1276],[984,1250],[1141,1250],[1146,1250],[1015,1277],[967,1246],[985,1250],[1017,1278],[1018,1279],[982,1250],[998,1250],[1186,1280],[1148,1281],[940,5],[1049,1250],[1019,1250],[1069,1250],[987,1282],[988,1283],[1012,1250],[1077,1284],[1070,1250],[1075,1285],[1076,1286],[962,1287],[1115,1250],[1024,1288],[959,1250],[991,1289],[954,1290],[1025,1267],[958,1264],[970,1254],[1013,1291],[946,1254],[990,1250],[997,1250],[1006,1292],[993,1293],[1002,1250],[992,1294],[947,1267],[1005,1250],[1145,1250],[1143,1250],[963,1287],[1021,1295],[1022,1250],[976,1250],[1003,1250],[1116,1296],[1014,1250],[972,1250],[996,1297],[1052,1298],[1074,1299],[1059,5],[1041,1300],[1038,1301],[1128,1302],[1093,1303],[1062,1304],[1117,1305],[1056,1306],[1131,1307],[1061,1308],[1079,1309],[1094,1310],[1119,1311],[1134,1312],[1091,1313],[1058,1314],[1066,1315],[1055,1316],[1090,1317],[1189,1318],[1129,1319],[1118,1320],[1050,1321],[1127,1322],[1180,1323],[1181,1323],[1185,1324],[1184,1325],[1035,1326],[1183,1323],[1182,1323],[1081,1327],[1084,1328],[1126,1329],[1125,1330],[949,5],[1082,1331],[1065,1332],[1123,1333],[948,5],[1053,1334],[1089,1335],[1130,1336],[952,5],[1064,1337],[1121,1338],[1072,1339],[1060,1340],[1122,1341],[1080,1342],[1120,1343],[1047,1344],[1073,1345],[1124,1346],[950,5],[1063,1347],[1027,1348],[1149,1349],[1028,1350],[1132,1351],[1139,1352],[1140,1353],[1138,1354],[1106,1355],[1036,1356],[1107,1357],[1137,1358],[1043,1359],[1045,1360],[1095,1361],[1099,1362],[1046,1363],[1044,1363],[1098,1364],[1039,1365],[1100,1366],[1101,1367],[1102,1368],[1110,1369],[1108,1370],[1103,1371],[1104,1372],[1105,1373],[1111,1374],[1109,1375],[1042,1376],[1097,1377],[1112,1378],[1113,1379],[1096,1380],[1051,1381],[1037,1232],[1000,1382],[1187,1383],[1188,5],[1133,1384],[1135,1236],[1026,5],[1067,5],[951,5],[953,1385],[1462,1386],[1461,5],[3229,5],[3231,1387],[3230,5],[2479,5],[2480,5],[2481,5],[2482,5],[2483,5],[2485,1388],[2486,5],[2487,5],[2489,5],[2488,1388],[2490,1388],[2491,1388],[2492,5],[2493,5],[2494,1388],[2495,5],[2519,1389],[2496,5],[2497,1388],[2498,5],[2500,1390],[2499,1388],[2502,1391],[2501,1388],[2503,5],[2504,5],[2505,5],[2506,5],[2478,5],[2508,1388],[2507,5],[2509,5],[2510,5],[2511,1388],[2512,5],[2513,5],[2514,5],[2516,5],[2515,5],[2484,5],[2517,1388],[2518,5],[2357,5],[2388,1392],[2385,1393],[2391,1394],[2392,1395],[2386,1396],[2389,1397],[2390,1398],[2387,5],[2393,5],[2396,1399],[2394,1400],[2395,4],[1725,1401],[1710,1402],[1711,1403],[1712,1402],[1713,1404],[1714,1402],[1718,1405],[1715,1406],[1716,5],[1709,1407],[1707,1408],[1719,5],[1708,1409],[1720,5],[1723,1410],[1717,1411],[1705,1412],[1704,5],[1706,5],[1724,5],[1524,1413],[2272,1414],[1776,1415],[1775,270],[1774,1416],[2268,1417],[2270,1418],[2269,1417],[2267,5],[2266,1419],[2271,5],[2263,1420],[2273,5],[2264,270],[2265,270],[1638,5],[1862,5],[1863,1421],[1199,537],[1196,1422],[1193,424],[1195,1423],[1194,5],[1192,5],[1940,1424],[1938,1425],[1939,1426],[1927,1427],[1928,1425],[1935,1428],[1926,1429],[1931,1430],[1941,5],[1932,1431],[1937,1432],[3199,1433],[1942,1434],[1925,1435],[1933,1436],[1934,1437],[1929,1438],[1936,1424],[1930,1439],[1191,1440],[1885,5],[1886,1441],[2055,1442],[65,5],[3185,1443],[3184,1444],[260,1445],[233,5],[211,1446],[209,1446],[124,1447],[75,1448],[74,1449],[210,1450],[195,1451],[117,1452],[73,1453],[72,1454],[259,1449],[224,1455],[223,1455],[135,1456],[231,1447],[232,1447],[234,1457],[235,1447],[236,1454],[237,1447],[208,1447],[238,1447],[239,1458],[240,1447],[241,1455],[242,1459],[243,1447],[244,1447],[245,1447],[246,1447],[247,1455],[248,1447],[249,1447],[250,1447],[251,1447],[252,1460],[253,1447],[254,1447],[255,1447],[256,1447],[257,1447],[77,1454],[78,1454],[79,1454],[80,1454],[81,1454],[82,1454],[83,1454],[84,1447],[86,1461],[87,1454],[85,1454],[88,1454],[89,1454],[90,1454],[91,1454],[92,1454],[93,1454],[94,1447],[95,1454],[96,1454],[97,1454],[98,1454],[99,1454],[100,1447],[101,1454],[102,1454],[103,1454],[104,1454],[105,1454],[106,1454],[107,1447],[109,1462],[108,1454],[110,1454],[111,1454],[112,1454],[113,1454],[114,1460],[115,1447],[116,1447],[130,1463],[118,1464],[119,1454],[120,1454],[121,1447],[122,1454],[123,1454],[125,1465],[126,1454],[127,1454],[128,1454],[129,1454],[131,1454],[132,1454],[133,1454],[134,1454],[136,1466],[137,1454],[138,1454],[139,1454],[140,1447],[141,1454],[142,1467],[143,1467],[144,1467],[145,1447],[146,1454],[147,1454],[148,1454],[153,1454],[149,1454],[150,1447],[151,1454],[152,1447],[154,1454],[155,1454],[156,1454],[157,1454],[158,1454],[159,1454],[160,1447],[161,1454],[162,1454],[163,1454],[164,1454],[165,1454],[166,1454],[167,1454],[168,1454],[169,1454],[170,1454],[171,1454],[172,1454],[173,1454],[174,1454],[175,1454],[176,1454],[177,1468],[178,1454],[179,1454],[180,1454],[181,1454],[182,1454],[183,1454],[184,1447],[185,1447],[186,1447],[187,1447],[188,1447],[189,1454],[190,1454],[191,1454],[192,1454],[258,1447],[194,1469],[217,1470],[212,1470],[203,1471],[201,1472],[215,1473],[204,1474],[218,1475],[213,1476],[214,1473],[216,1477],[202,5],[207,5],[199,1478],[200,1479],[197,5],[198,1480],[196,1454],[205,1481],[76,1482],[225,5],[226,5],[227,5],[228,5],[229,5],[230,5],[219,5],[222,1455],[221,5],[220,1483],[193,1484],[206,1485],[1520,5],[3219,1486],[3200,5],[3220,1487],[3202,1488],[3227,1489],[3221,5],[3223,1490],[3224,1490],[3225,1491],[3222,5],[3226,1492],[3205,1493],[3203,5],[3204,1494],[3218,1495],[3201,5],[3216,1496],[3207,1497],[3208,1498],[3209,1498],[3210,1497],[3217,1499],[3211,1498],[3212,1496],[3213,1497],[3214,1498],[3215,1497],[2031,522],[558,1500],[1354,1501],[1353,489],[1355,1502],[1350,1503],[1357,1504],[1352,1505],[1360,1506],[1359,1507],[1356,1508],[1358,1509],[1351,489],[1924,5],[2598,1510],[2625,1511],[2604,1512],[2627,5],[2602,1513],[2600,5],[2601,1514],[2594,5],[2629,1515],[2605,1516],[2606,1516],[2607,1516],[2608,1516],[2609,1516],[2610,1516],[2611,1516],[2612,1516],[2614,1516],[2615,1516],[2616,1516],[2617,1516],[2623,1516],[2624,1516],[2618,1516],[2620,1516],[2619,1516],[2613,1516],[2622,1516],[2621,1516],[2603,1517],[2597,1518],[2595,1519],[2596,5],[2599,1520],[2626,1521],[2628,1522],[3197,1523],[2032,5],[3253,5],[2707,5],[2708,1524],[1857,5],[63,5],[64,5],[11,5],[13,5],[12,5],[2,5],[14,5],[15,5],[16,5],[17,5],[18,5],[19,5],[20,5],[21,5],[3,5],[22,5],[23,5],[4,5],[24,5],[28,5],[25,5],[26,5],[27,5],[29,5],[30,5],[31,5],[5,5],[32,5],[33,5],[34,5],[35,5],[6,5],[39,5],[36,5],[37,5],[38,5],[40,5],[7,5],[41,5],[46,5],[47,5],[42,5],[43,5],[44,5],[45,5],[8,5],[51,5],[48,5],[49,5],[50,5],[52,5],[9,5],[53,5],[54,5],[55,5],[57,5],[56,5],[58,5],[59,5],[10,5],[60,5],[61,5],[1,5],[62,5],[2313,5],[2314,1525],[445,1526],[457,1527],[443,1528],[458,1440],[467,1529],[434,1530],[435,1531],[433,1532],[466,424],[461,1533],[465,1534],[437,1535],[454,1536],[436,1537],[464,1538],[431,1539],[432,1533],[438,1540],[439,5],[444,1541],[442,1540],[429,1542],[468,1543],[459,1544],[448,1545],[447,1540],[449,1546],[452,1547],[446,1548],[450,1549],[462,424],[440,1550],[441,1551],[453,1552],[430,1440],[456,1553],[455,1540],[451,1554],[460,5],[428,5],[463,1555],[3255,1556],[3241,1557],[3242,1556],[3240,5],[3181,1558],[3235,1559],[3187,1560],[3182,1558],[3180,5],[3186,1561],[3233,5],[3228,1562],[3232,1563],[3198,1564],[3234,1565],[3254,1566],[3247,1567],[3256,1568],[3179,1569],[3262,1570],[3264,1571],[3258,1572],[3265,1573],[3263,1574],[3248,1575],[3259,1576],[3271,1577],[3272,1578],[3178,1579],[2356,1580],[2582,1581],[2584,1582],[2630,1583],[2398,1584],[2407,1585],[2399,1584],[2400,1584],[2401,1584],[2402,1584],[2403,1584],[2404,1586],[2405,1587],[2406,1588],[1851,1589],[610,1590],[2410,1591],[2414,1592],[2417,1593],[2420,1594],[2427,1595],[2429,1596],[2431,1597],[2433,1598],[2435,1599],[2438,1600],[2442,1601],[2444,1602],[2563,1603],[2449,1604],[2451,1605],[2452,1606],[2455,1607],[2457,1608],[2459,1609],[2461,1610],[2462,1598],[2465,1611],[2466,1612],[2475,1613],[2476,1614],[2521,1615],[2524,1616],[2527,1617],[2528,1618],[2531,1619],[2536,1620],[2539,1621],[2540,1622],[2543,1623],[2548,1624],[2551,1625],[2553,1626],[2557,1627],[2559,1628],[2562,1629],[2321,1630],[2320,1631],[1853,1632],[2408,1633],[1868,1634],[2415,1635],[1522,1636],[2421,1636],[1848,1637],[2319,1638],[1847,1639],[1525,1640],[2544,1641],[2344,1642],[2436,1643],[2439,1644],[1532,1645],[1777,1646],[1855,1647],[2445,1648],[1961,1649],[2348,1642],[1849,1635],[2453,1645],[2034,1650],[1963,1645],[2040,1635],[1856,1651],[2554,1652],[2463,1653],[1859,1654],[2045,1655],[2467,1656],[2446,1657],[1959,1658],[2477,1659],[2305,1660],[2525,1649],[2340,1661],[2529,1662],[1844,1663],[2304,1664],[2522,1636],[1860,1665],[2546,1666],[2549,1651],[2411,1667],[2555,1668],[1861,1669],[2560,1670],[1954,1671],[1955,1671],[1950,1672],[1951,1672],[2631,1673],[1952,1673],[2632,1674],[1956,1675],[1957,1671],[609,5],[2583,1676],[2564,1677],[2322,1678],[2323,1679],[2565,1680],[2351,1681],[2423,1682],[2317,1683],[2566,1684],[2426,1685],[2533,1686],[2567,1687],[2355,1688],[2472,1689],[1865,1690],[1866,1691],[1867,1692],[1869,1693],[1870,1694],[1873,1695],[1874,1696],[1876,1697],[1846,1698],[1877,1699],[1779,1700],[1878,1701],[1882,1702],[1782,1703],[1883,1704],[1884,1705],[1958,1706],[1852,1707],[2568,1708],[1960,1709],[1962,1710],[1781,1711],[1964,1712],[1967,1713],[2033,1714],[2035,1715],[2038,1716],[2039,1717],[2041,1718],[1864,1719],[2042,1720],[2043,1721],[2044,1722],[2046,1723],[2047,1724],[1785,1725],[2048,1726],[2049,1727],[2050,1728],[2051,1729],[2052,1730],[2078,1731],[2079,1732],[2080,1733],[1966,1734],[2081,1735],[2274,1736],[2275,1737],[2276,1738],[2277,1739],[2278,1740],[2306,1741],[2307,1742],[1526,1743],[1527,1744],[1838,1745],[2633,1746],[2634,1036],[2635,1036],[2636,1036],[2637,1036],[2638,1036],[2639,1036],[2640,1036],[2641,1036],[2642,1036],[2643,1036],[2644,1747],[2645,1036],[2646,1036],[2647,5],[2648,1036],[2649,1036],[2650,1036],[2651,1036],[2652,1036],[2653,1036],[2654,1036],[2655,1036],[2656,1036],[2657,1036],[2658,1036],[2659,1036],[2660,1036],[2661,1748],[2662,1036],[2663,1036],[2664,1036],[2665,1036],[2666,1036],[2667,1036],[2668,1036],[2669,1036],[2670,1036],[2671,1036],[2672,1036],[2673,1036],[2674,1749],[2675,1036],[2676,1036],[2677,1036],[2678,1036],[2679,1036],[2680,1036],[2681,1036],[2682,1036],[2683,1036],[2684,1036],[2685,1036],[2686,1036],[2687,1036],[2688,1036],[2689,1036],[2690,1036],[2691,1036],[2692,1036],[2693,1036],[2694,1036],[2695,1036],[2696,1036],[2697,1036],[2698,1036],[2699,1036],[2700,1036],[1790,1750],[1791,1751],[1789,1752],[1792,1753],[1793,1753],[1794,1754],[1788,1755],[1795,1756],[1796,1753],[1797,1753],[1798,1757],[1783,1758],[1799,1753],[1801,1759],[1802,1760],[1803,1761],[1804,1753],[1805,1762],[1806,1761],[1787,1763],[1807,1743],[1808,1764],[1809,1744],[1529,1765],[1811,1766],[1812,1767],[1813,1753],[1810,1768],[1814,1743],[1815,1744],[1816,1756],[1817,1761],[1818,1753],[1819,1769],[1820,1753],[1800,1770],[1822,1771],[1823,1765],[1825,1772],[1824,1773],[1826,1761],[1827,1753],[1530,1774],[1828,1775],[1829,1776],[1831,1777],[1832,1778],[1830,1765],[1833,1753],[1834,1779],[1835,1780],[1528,1781],[1836,1744],[1837,1782],[2409,1783],[2413,1784],[2416,1785],[2343,1786],[2422,1787],[2428,1788],[2569,1789],[2430,1790],[2316,1791],[2311,1792],[2397,1793],[2347,1794],[2570,1795],[2437,1796],[2441,1797],[2580,1798],[2447,1799],[2450,1800],[2434,1801],[2454,1802],[2573,1803],[2456,1804],[2575,1805],[2458,1806],[2460,1807],[2576,1808],[2464,1809],[2443,1810],[2473,1811],[2474,1812],[2448,1813],[2520,1814],[2349,1815],[2526,1816],[2341,1817],[2577,1818],[2530,1819],[2538,1820],[2578,1821],[2535,1822],[2419,1823],[2523,1824],[2542,1825],[2579,1826],[2547,1827],[2550,1828],[2552,1829],[2556,1830],[2342,1831],[2558,1832],[2561,1833],[1850,1834],[1821,5],[2308,1835],[2318,1836],[2545,1837],[2312,5],[2310,1838],[2345,5],[1786,1839],[1854,1840],[2440,1841],[2571,1842],[2581,1843],[2346,1844],[2532,1845],[2350,1846],[2572,1847],[1875,1848],[1845,1849],[2418,1850],[1784,5],[2412,1851],[1953,5],[2315,1852],[2432,1853],[1778,5],[2534,1854],[2541,1855],[2574,5],[1858,1856],[1521,1857],[2701,1858],[2702,1859],[2703,1860]],"semanticDiagnosticsPerFile":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272],"version":"6.0.2"} \ No newline at end of file From 6a63e814a5ab501d59772c39cf810580a8174a03 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 20:58:38 +0000 Subject: [PATCH 135/156] chore: version v2.7.2 --- cli/package.json | 2 +- docs/static/archived-versions.json | 4 ++-- e2e/package.json | 2 +- i18n/package.json | 2 +- machine-learning/pyproject.toml | 2 +- machine-learning/uv.lock | 2 +- mobile/android/fastlane/Fastfile | 4 ++-- mobile/ios/Runner/Info.plist | 2 +- mobile/openapi/README.md | 2 +- mobile/pubspec.yaml | 2 +- open-api/immich-openapi-specs.json | 2 +- open-api/typescript-sdk/package.json | 2 +- open-api/typescript-sdk/src/fetch-client.ts | 2 +- package.json | 2 +- server/package.json | 2 +- web/package.json | 2 +- 16 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cli/package.json b/cli/package.json index f7d81da5e6..7b987a55b9 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@immich/cli", - "version": "2.7.1", + "version": "2.7.2", "description": "Command Line Interface (CLI) for Immich", "type": "module", "exports": "./dist/index.js", diff --git a/docs/static/archived-versions.json b/docs/static/archived-versions.json index fb85bee8b8..b268e958fa 100644 --- a/docs/static/archived-versions.json +++ b/docs/static/archived-versions.json @@ -1,7 +1,7 @@ [ { - "label": "v2.7.1", - "url": "https://docs.v2.7.1.archive.immich.app" + "label": "v2.7.2", + "url": "https://docs.v2.7.2.archive.immich.app" }, { "label": "v2.6.3", diff --git a/e2e/package.json b/e2e/package.json index 81476e1cc4..add6e0b6d3 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "immich-e2e", - "version": "2.7.1", + "version": "2.7.2", "description": "", "main": "index.js", "type": "module", diff --git a/i18n/package.json b/i18n/package.json index 13829ae953..c218dc0409 100644 --- a/i18n/package.json +++ b/i18n/package.json @@ -1,6 +1,6 @@ { "name": "immich-i18n", - "version": "2.7.1", + "version": "2.7.2", "private": true, "scripts": { "format": "prettier --cache --check .", diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index ae289c47e2..7b89f9d28b 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "immich-ml" -version = "2.7.1" +version = "2.7.2" description = "" authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }] requires-python = ">=3.11,<4.0" diff --git a/machine-learning/uv.lock b/machine-learning/uv.lock index 406b304a72..ab3bbd5130 100644 --- a/machine-learning/uv.lock +++ b/machine-learning/uv.lock @@ -898,7 +898,7 @@ wheels = [ [[package]] name = "immich-ml" -version = "2.7.1" +version = "2.7.2" source = { editable = "." } dependencies = [ { name = "aiocache" }, diff --git a/mobile/android/fastlane/Fastfile b/mobile/android/fastlane/Fastfile index 53100f2ca7..b79b7fc4bf 100644 --- a/mobile/android/fastlane/Fastfile +++ b/mobile/android/fastlane/Fastfile @@ -35,8 +35,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 3042, - "android.injected.version.name" => "2.7.1", + "android.injected.version.code" => 3043, + "android.injected.version.name" => "2.7.2", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') diff --git a/mobile/ios/Runner/Info.plist b/mobile/ios/Runner/Info.plist index 50dc1b4958..9400e3b5a3 100644 --- a/mobile/ios/Runner/Info.plist +++ b/mobile/ios/Runner/Info.plist @@ -80,7 +80,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.7.1 + 2.7.2 CFBundleSignature ???? CFBundleURLTypes diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 503f6c566f..8f620ff2c0 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -3,7 +3,7 @@ Immich API This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 2.7.1 +- API version: 2.7.2 - Generator version: 7.8.0 - Build package: org.openapitools.codegen.languages.DartClientCodegen diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 29dc770106..1c4d70dbb0 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -2,7 +2,7 @@ name: immich_mobile description: Immich - selfhosted backup media file on mobile phone publish_to: 'none' -version: 2.7.1+3042 +version: 2.7.2+3043 environment: sdk: '>=3.8.0 <4.0.0' diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 01f852c812..8198a75ae2 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -15225,7 +15225,7 @@ "info": { "title": "Immich", "description": "Immich API", - "version": "2.7.1", + "version": "2.7.2", "contact": {} }, "tags": [ diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 7dc24983e1..570b312f26 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@immich/sdk", - "version": "2.7.1", + "version": "2.7.2", "description": "Auto-generated TypeScript SDK for the Immich API", "type": "module", "main": "./build/index.js", diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index 04c9df3dfa..ec97f33041 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -1,6 +1,6 @@ /** * Immich - * 2.7.1 + * 2.7.2 * DO NOT MODIFY - This file has been generated using oazapfts. * See https://www.npmjs.com/package/oazapfts */ diff --git a/package.json b/package.json index bf22de0da9..1e958dc5d6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "immich-monorepo", - "version": "2.7.1", + "version": "2.7.2", "description": "Monorepo for Immich", "private": true, "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be", diff --git a/server/package.json b/server/package.json index 6cb8b0a227..99e58a0e2c 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "immich", - "version": "2.7.1", + "version": "2.7.2", "description": "", "author": "", "private": true, diff --git a/web/package.json b/web/package.json index a817b149c4..e03a0f943f 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "immich-web", - "version": "2.7.1", + "version": "2.7.2", "license": "GNU Affero General Public License version 3", "type": "module", "scripts": { From 64766c8c06dd1825542f084f970728dfe26e0d4b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 17:32:54 +0200 Subject: [PATCH 136/156] chore(deps): update github-actions (#27560) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-mobile.yml | 2 +- .github/workflows/cli.yml | 2 +- .github/workflows/close-duplicates.yml | 2 +- .github/workflows/codeql-analysis.yml | 6 +++--- .github/workflows/docker.yml | 4 ++-- .github/workflows/preview-label.yaml | 6 +++--- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build-mobile.yml b/.github/workflows/build-mobile.yml index 7c106415d8..0b10c681a1 100644 --- a/.github/workflows/build-mobile.yml +++ b/.github/workflows/build-mobile.yml @@ -210,7 +210,7 @@ jobs: working-directory: ./mobile - name: Setup Ruby - uses: ruby/setup-ruby@c515ec17f69368147deb311832da000dd229d338 # v1.297.0 + uses: ruby/setup-ruby@3ff19f5e2baf30647122352b96108b1fbe250c64 # v1.299.0 with: ruby-version: '3.3' bundler-cache: true diff --git a/.github/workflows/cli.yml b/.github/workflows/cli.yml index 9d08d3f816..13e71491a6 100644 --- a/.github/workflows/cli.yml +++ b/.github/workflows/cli.yml @@ -89,7 +89,7 @@ jobs: uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0 + uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0 if: ${{ !github.event.pull_request.head.repo.fork }} with: registry: ghcr.io diff --git a/.github/workflows/close-duplicates.yml b/.github/workflows/close-duplicates.yml index b73ba5e634..839e5b3ceb 100644 --- a/.github/workflows/close-duplicates.yml +++ b/.github/workflows/close-duplicates.yml @@ -35,7 +35,7 @@ jobs: needs: [get_body, should_run] if: ${{ needs.should_run.outputs.should_run == 'true' }} container: - image: ghcr.io/immich-app/mdq:main@sha256:df7188ba88abb0800d73cc97d3633280f0c0c3d4c441d678225067bf154150fb + image: ghcr.io/immich-app/mdq:main@sha256:557cca601891b8b7d78b940071d35aaf7aaeb9b327d19b22cf282118edbc5272 outputs: checked: ${{ steps.get_checkbox.outputs.checked }} steps: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index adeacbf271..2378b032b6 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -57,7 +57,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 + uses: github/codeql-action/init@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -70,7 +70,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 + uses: github/codeql-action/autobuild@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -83,6 +83,6 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 + uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1 with: category: '/language:${{matrix.language}}' diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index d5c327b9e7..84509103be 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -60,7 +60,7 @@ jobs: suffix: ['', '-cuda', '-rocm', '-openvino', '-armnn', '-rknn'] steps: - name: Login to GitHub Container Registry - uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0 + uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -90,7 +90,7 @@ jobs: suffix: [''] steps: - name: Login to GitHub Container Registry - uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0 + uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0 with: registry: ghcr.io username: ${{ github.repository_owner }} diff --git a/.github/workflows/preview-label.yaml b/.github/workflows/preview-label.yaml index 43c971c31b..c63ef17f20 100644 --- a/.github/workflows/preview-label.yaml +++ b/.github/workflows/preview-label.yaml @@ -19,7 +19,7 @@ jobs: app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - - uses: mshick/add-pr-comment@ffd016c7e151d97d69d21a843022fd4cd5b96fe5 # v3.9.0 + - uses: mshick/add-pr-comment@64b8e914979889d746c99dea15a76e77ef64580a # v3.10.0 with: github-token: ${{ steps.token.outputs.token }} message-id: 'preview-status' @@ -48,14 +48,14 @@ jobs: name: 'preview' }) - - uses: mshick/add-pr-comment@ffd016c7e151d97d69d21a843022fd4cd5b96fe5 # v3.9.0 + - uses: mshick/add-pr-comment@64b8e914979889d746c99dea15a76e77ef64580a # v3.10.0 if: ${{ github.event.pull_request.head.repo.fork }} with: github-token: ${{ steps.token.outputs.token }} message-id: 'preview-status' message: 'PRs from forks cannot have preview environments.' - - uses: mshick/add-pr-comment@ffd016c7e151d97d69d21a843022fd4cd5b96fe5 # v3.9.0 + - uses: mshick/add-pr-comment@64b8e914979889d746c99dea15a76e77ef64580a # v3.10.0 if: ${{ !github.event.pull_request.head.repo.fork }} with: github-token: ${{ steps.token.outputs.token }} From 6a361dae72c5ac8dcc2234732ac1d14f2b7e6df5 Mon Sep 17 00:00:00 2001 From: Zack Pollard Date: Wed, 8 Apr 2026 19:15:38 +0100 Subject: [PATCH 137/156] fix(server): use randomized cron for version check scheduling (#27626) Also removes unnecessary rate limit --- server/src/enum.ts | 1 + server/src/services/api.service.ts | 9 ------ server/src/services/version.service.spec.ts | 32 +++++++++++-------- server/src/services/version.service.ts | 22 ++++++------- server/test/medium.factory.ts | 5 +++ .../specs/services/version.service.spec.ts | 3 +- 6 files changed, 37 insertions(+), 35 deletions(-) diff --git a/server/src/enum.ts b/server/src/enum.ts index 1277a39036..133d9b2f79 100644 --- a/server/src/enum.ts +++ b/server/src/enum.ts @@ -848,6 +848,7 @@ export enum AssetVisibility { export enum CronJob { LibraryScan = 'LibraryScan', NightlyJobs = 'NightlyJobs', + VersionCheck = 'VersionCheck', } export enum ApiTag { diff --git a/server/src/services/api.service.ts b/server/src/services/api.service.ts index 1071c75fc7..7dd2eb0d4e 100644 --- a/server/src/services/api.service.ts +++ b/server/src/services/api.service.ts @@ -1,14 +1,11 @@ import { Injectable, NotAcceptableException } from '@nestjs/common'; -import { Interval } from '@nestjs/schedule'; import { NextFunction, Request, Response } from 'express'; import { readFileSync } from 'node:fs'; import sanitizeHtml from 'sanitize-html'; -import { ONE_HOUR } from 'src/constants'; import { ConfigRepository } from 'src/repositories/config.repository'; import { LoggingRepository } from 'src/repositories/logging.repository'; import { AuthService } from 'src/services/auth.service'; import { SharedLinkService } from 'src/services/shared-link.service'; -import { VersionService } from 'src/services/version.service'; import { OpenGraphTags } from 'src/utils/misc'; export const render = (index: string, meta: OpenGraphTags) => { @@ -40,18 +37,12 @@ export class ApiService { constructor( private authService: AuthService, private sharedLinkService: SharedLinkService, - private versionService: VersionService, private configRepository: ConfigRepository, private logger: LoggingRepository, ) { this.logger.setContext(ApiService.name); } - @Interval(ONE_HOUR.as('milliseconds')) - async onVersionCheck() { - await this.versionService.handleQueueVersionCheck(); - } - ssr(excludePaths: string[]) { const { resourcePaths } = this.configRepository.getEnv(); diff --git a/server/src/services/version.service.spec.ts b/server/src/services/version.service.spec.ts index c43d64104c..122d65d32c 100644 --- a/server/src/services/version.service.spec.ts +++ b/server/src/services/version.service.spec.ts @@ -2,7 +2,7 @@ import { DateTime } from 'luxon'; import { SemVer } from 'semver'; import { defaults } from 'src/config'; import { serverVersion } from 'src/constants'; -import { JobName, JobStatus, SystemMetadataKey } from 'src/enum'; +import { CronJob, JobName, JobStatus, SystemMetadataKey } from 'src/enum'; import { VersionService } from 'src/services/version.service'; import { factory } from 'test/small.factory'; import { newTestService, ServiceMocks } from 'test/utils'; @@ -18,6 +18,8 @@ describe(VersionService.name, () => { beforeEach(() => { ({ sut, mocks } = newTestService(VersionService)); + mocks.cron.create.mockResolvedValue(); + mocks.cron.update.mockResolvedValue(); }); it('should work', () => { @@ -44,6 +46,20 @@ describe(VersionService.name, () => { await expect(sut.onBootstrap()).resolves.toBeUndefined(); expect(mocks.versionHistory.create).not.toHaveBeenCalled(); }); + + it('should create a version check cron job', async () => { + mocks.versionHistory.getLatest.mockResolvedValue({ + id: 'version-1', + createdAt: new Date(), + version: serverVersion.toString(), + }); + await sut.onBootstrap(); + expect(mocks.cron.create).toHaveBeenCalledWith( + expect.objectContaining({ + name: CronJob.VersionCheck, + }), + ); + }); }); describe('getVersion', () => { @@ -72,25 +88,13 @@ describe(VersionService.name, () => { }); describe('handVersionCheck', () => { - it('should not run if the last check was < 60 minutes ago', async () => { - mocks.systemMetadata.get.mockResolvedValue({ - checkedAt: DateTime.utc().minus({ minutes: 5 }).toISO(), - releaseVersion: '1.0.0', - }); - await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Skipped); - }); - it('should not run if version check is disabled', async () => { mocks.systemMetadata.get.mockResolvedValue({ newVersionCheck: { enabled: false } }); await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Skipped); }); - it('should run if it has been > 60 minutes', async () => { + it('should run and notify if a new version is available', async () => { mocks.serverInfo.getLatestRelease.mockResolvedValue(mockVersionResponse('v100.0.0')); - mocks.systemMetadata.get.mockResolvedValue({ - checkedAt: DateTime.utc().minus({ minutes: 65 }).toISO(), - releaseVersion: '1.0.0', - }); await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Success); expect(mocks.systemMetadata.set).toHaveBeenCalled(); expect(mocks.logger.log).toHaveBeenCalled(); diff --git a/server/src/services/version.service.ts b/server/src/services/version.service.ts index 5e2f268796..75ad93d4a3 100644 --- a/server/src/services/version.service.ts +++ b/server/src/services/version.service.ts @@ -4,10 +4,11 @@ import semver, { SemVer } from 'semver'; import { serverVersion } from 'src/constants'; import { OnEvent, OnJob } from 'src/decorators'; import { ReleaseNotification, ServerVersionResponseDto } from 'src/dtos/server.dto'; -import { DatabaseLock, JobName, JobStatus, QueueName, SystemMetadataKey } from 'src/enum'; +import { CronJob, DatabaseLock, JobName, JobStatus, QueueName, SystemMetadataKey } from 'src/enum'; import { ArgOf } from 'src/repositories/event.repository'; import { BaseService } from 'src/services/base.service'; import { VersionCheckMetadata } from 'src/types'; +import { handlePromiseError } from 'src/utils/misc'; const asNotification = ({ checkedAt, releaseVersion }: VersionCheckMetadata): ReleaseNotification => { return { @@ -24,6 +25,15 @@ export class VersionService extends BaseService { async onBootstrap(): Promise { await this.handleVersionCheck(); + const randomMinute = Math.floor(Math.random() * 60); + const expression = `${randomMinute} * * * *`; + this.logger.debug(`Scheduling version check for cron ${expression}`); + this.cronRepository.create({ + name: CronJob.VersionCheck, + expression, + onTick: () => handlePromiseError(this.handleQueueVersionCheck(), this.logger), + }); + await this.databaseRepository.withLock(DatabaseLock.VersionHistory, async () => { const previous = await this.versionRepository.getLatest(); const current = serverVersion.toString(); @@ -76,16 +86,6 @@ export class VersionService extends BaseService { return JobStatus.Skipped; } - const versionCheck = await this.systemMetadataRepository.get(SystemMetadataKey.VersionCheckState); - if (versionCheck?.checkedAt) { - const lastUpdate = DateTime.fromISO(versionCheck.checkedAt); - const elapsedTime = DateTime.now().diff(lastUpdate).as('minutes'); - // check once per hour (max) - if (elapsedTime < 60) { - return JobStatus.Skipped; - } - } - const { version: releaseVersion, published_at: publishedAt } = await this.serverInfoRepository.getLatestRelease(); const metadata: VersionCheckMetadata = { checkedAt: DateTime.utc().toISO(), releaseVersion }; diff --git a/server/test/medium.factory.ts b/server/test/medium.factory.ts index 1906fc0ccb..3ac6645a6c 100644 --- a/server/test/medium.factory.ts +++ b/server/test/medium.factory.ts @@ -26,6 +26,7 @@ import { AssetEditRepository } from 'src/repositories/asset-edit.repository'; import { AssetJobRepository } from 'src/repositories/asset-job.repository'; import { AssetRepository } from 'src/repositories/asset.repository'; import { ConfigRepository } from 'src/repositories/config.repository'; +import { CronRepository } from 'src/repositories/cron.repository'; import { CryptoRepository } from 'src/repositories/crypto.repository'; import { DatabaseRepository } from 'src/repositories/database.repository'; import { EmailRepository } from 'src/repositories/email.repository'; @@ -500,6 +501,10 @@ const newMockRepository = (key: ClassConstructor) => { }); } + case CronRepository: { + return automock(CronRepository, { args: [undefined, { setContext: () => {} }], strict: false }); + } + case EmailRepository: { return automock(EmailRepository, { args: [{ setContext: () => {} }] }); } diff --git a/server/test/medium/specs/services/version.service.spec.ts b/server/test/medium/specs/services/version.service.spec.ts index 3e81429382..5492f9f75b 100644 --- a/server/test/medium/specs/services/version.service.spec.ts +++ b/server/test/medium/specs/services/version.service.spec.ts @@ -1,6 +1,7 @@ import { Kysely } from 'kysely'; import { serverVersion } from 'src/constants'; import { JobName } from 'src/enum'; +import { CronRepository } from 'src/repositories/cron.repository'; import { DatabaseRepository } from 'src/repositories/database.repository'; import { JobRepository } from 'src/repositories/job.repository'; import { LoggingRepository } from 'src/repositories/logging.repository'; @@ -16,7 +17,7 @@ const setup = (db?: Kysely) => { return newMediumService(VersionService, { database: db || defaultDatabase, real: [DatabaseRepository, VersionHistoryRepository], - mock: [LoggingRepository, JobRepository], + mock: [LoggingRepository, JobRepository, CronRepository], }); }; From 781d568f29d438be44920c7f531bf6c6bac6e2b7 Mon Sep 17 00:00:00 2001 From: Cullen Jennings Date: Wed, 8 Apr 2026 12:25:45 -0600 Subject: [PATCH 138/156] fix(docs): typo 'Start rating' to 'Star rating' (#27606) --- docs/docs/features/searching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/features/searching.md b/docs/docs/features/searching.md index 7360787127..92eb01c39d 100644 --- a/docs/docs/features/searching.md +++ b/docs/docs/features/searching.md @@ -26,7 +26,7 @@ You can search the following types of content: | Time frame | Start and end date of a specific time bucket | | Media type | Image or video or both | | Display options | In Archive, in Favorites or Not in any album | -| Start rating | User-assigned start rating | +| Star rating | User-assigned star rating | From 55ab8c65b6295c5e503294d4e9b03f1ca9633969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Erasmus?= Date: Wed, 8 Apr 2026 22:03:41 +0200 Subject: [PATCH 139/156] fix(server): avoid false restore failures on large database imports (#27420) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(server): increase restore health check timeout and reject with Error * chore: clean up --------- Co-authored-by: André Erasmus <25480506+NoBadDays@users.noreply.github.com> Co-authored-by: Jason Rasmussen --- .../src/maintenance/maintenance-health.repository.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/src/maintenance/maintenance-health.repository.ts b/server/src/maintenance/maintenance-health.repository.ts index 6eab265677..c76cc23b1c 100644 --- a/server/src/maintenance/maintenance-health.repository.ts +++ b/server/src/maintenance/maintenance-health.repository.ts @@ -36,15 +36,17 @@ export class MaintenanceHealthRepository { } }); - worker.on('exit', (code, signal) => reject(`Server health check failed, server exited with ${signal ?? code}`)); - worker.on('error', (error) => reject(`Server health check failed, process threw: ${error}`)); + worker.on('exit', (code, signal) => + reject(new Error(`Server health check failed, server exited with ${signal ?? code}`)), + ); + worker.on('error', (error) => reject(new Error(`Server health check failed, process threw: ${error}`))); setTimeout(() => { if (worker.exitCode === null) { - reject('Server health check failed, took too long to start.'); + reject(new Error('Server health check failed, took too long to start.')); worker.kill('SIGTERM'); } - }, 20_000); + }, 180_000); }); } } From 2b0f6c9202d5ee9d2c82abbeb5f21ec8c8915500 Mon Sep 17 00:00:00 2001 From: Luis Nachtigall <31982496+LeLunZ@users.noreply.github.com> Date: Wed, 8 Apr 2026 23:23:42 +0200 Subject: [PATCH 140/156] fix(mobile): improve image load cancellation handling (#27624) fix(image): improve image load cancellation handling --- .../widgets/images/image_provider.dart | 26 +++++++++++++++---- .../widgets/images/local_image_provider.dart | 8 +++--- .../widgets/images/remote_image_provider.dart | 10 ++++--- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/mobile/lib/presentation/widgets/images/image_provider.dart b/mobile/lib/presentation/widgets/images/image_provider.dart index bf29f9482f..1d87fa404e 100644 --- a/mobile/lib/presentation/widgets/images/image_provider.dart +++ b/mobile/lib/presentation/widgets/images/image_provider.dart @@ -19,6 +19,7 @@ mixin CancellableImageProviderMixin on CancellableImageProvide static final _log = Logger('CancellableImageProviderMixin'); bool isCancelled = false; + bool isFinished = false; ImageRequest? request; CancelableOperation? cachedOperation; @@ -53,13 +54,15 @@ mixin CancellableImageProviderMixin on CancellableImageProvide Stream loadRequest(ImageRequest request, ImageDecoderCallback decode, {bool evictOnError = true}) async* { if (isCancelled) { this.request = null; - PaintingBinding.instance.imageCache.evict(this); return; } try { final image = await request.load(decode); - if ((image == null && evictOnError) || isCancelled) { + if (isCancelled) { + return; + } + if (image == null && evictOnError) { PaintingBinding.instance.imageCache.evict(this); return; } else if (image == null) { @@ -67,6 +70,9 @@ mixin CancellableImageProviderMixin on CancellableImageProvide } yield image; } catch (e, stack) { + if (isCancelled) { + return; + } if (evictOnError) { PaintingBinding.instance.imageCache.evict(this); rethrow; @@ -80,20 +86,24 @@ mixin CancellableImageProviderMixin on CancellableImageProvide Future loadCodecRequest(ImageRequest request) async { if (isCancelled) { this.request = null; - PaintingBinding.instance.imageCache.evict(this); return null; } try { final codec = await request.loadCodec(); - if (codec == null || isCancelled) { + if (isCancelled) { codec?.dispose(); + return null; + } + if (codec == null) { PaintingBinding.instance.imageCache.evict(this); return null; } return codec; } catch (e) { - PaintingBinding.instance.imageCache.evict(this); + if (!isCancelled) { + PaintingBinding.instance.imageCache.evict(this); + } rethrow; } finally { this.request = null; @@ -121,6 +131,8 @@ mixin CancellableImageProviderMixin on CancellableImageProvide @override void cancel() { isCancelled = true; + final hasActiveWork = !isFinished; + final request = this.request; if (request != null) { this.request = null; @@ -132,6 +144,10 @@ mixin CancellableImageProviderMixin on CancellableImageProvide cachedOperation = null; operation.cancel(); } + + if (hasActiveWork) { + PaintingBinding.instance.imageCache.evict(this); + } } } diff --git a/mobile/lib/presentation/widgets/images/local_image_provider.dart b/mobile/lib/presentation/widgets/images/local_image_provider.dart index 1ed2c361ff..d4f829bed5 100644 --- a/mobile/lib/presentation/widgets/images/local_image_provider.dart +++ b/mobile/lib/presentation/widgets/images/local_image_provider.dart @@ -100,7 +100,6 @@ class LocalFullImageProvider extends CancellableImageProvider _animatedCodec(LocalFullImageProvider key, ImageDecoderCallback decode) async* { yield* initialImageStream(); if (isCancelled) { - PaintingBinding.instance.imageCache.evict(this); return; } @@ -143,7 +142,6 @@ class LocalFullImageProvider extends CancellableImageProvider _animatedCodec(RemoteFullImageProvider key, ImageDecoderCallback decode) async* { yield* initialImageStream(); if (isCancelled) { - PaintingBinding.instance.imageCache.evict(this); return; } @@ -142,7 +141,6 @@ class RemoteFullImageProvider extends CancellableImageProvider Date: Wed, 8 Apr 2026 20:33:11 -0400 Subject: [PATCH 141/156] fix(docs): updated docker deprecation link (#27633) new link --- docs/docs/install/requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/install/requirements.md b/docs/docs/install/requirements.md index 178cf45388..66f3033a43 100644 --- a/docs/docs/install/requirements.md +++ b/docs/docs/install/requirements.md @@ -49,7 +49,7 @@ Immich requires [**Docker**](https://docs.docker.com/get-started/get-docker/) wi The Compose plugin will be installed by both Docker Engine and Desktop by following the linked installation guides; it can also be [separately installed](https://docs.docker.com/compose/install/). :::note -Immich requires the command `docker compose`; the similarly named `docker-compose` is [deprecated](https://docs.docker.com/compose/migrate/) and is no longer supported by Immich. +Immich requires the command `docker compose`; the similarly named `docker-compose` is [deprecated](https://docs.docker.com/retired/#docker-compose-v1-replaced-by-compose-v2) and is no longer supported by Immich. ::: ### Special requirements for Windows users From 8d67c1f820aaec8d52ce8c1eb04a15ff0c4d81d9 Mon Sep 17 00:00:00 2001 From: Zack Pollard Date: Thu, 9 Apr 2026 01:56:07 +0100 Subject: [PATCH 142/156] fix(server): people search not showing for 3 or less characters (#27629) Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com> --- server/src/queries/person.repository.sql | 8 +++++++- server/src/repositories/person.repository.ts | 7 +++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/server/src/queries/person.repository.sql b/server/src/queries/person.repository.sql index f60b8859f2..318c151cca 100644 --- a/server/src/queries/person.repository.sql +++ b/server/src/queries/person.repository.sql @@ -195,13 +195,19 @@ where "asset_face"."id" = $2 -- PersonRepository.getByName +with + "similarity_threshold" as ( + select + set_config('pg_trgm.word_similarity_threshold', '0.5', true) as "thresh" + ) select "person".* from + "similarity_threshold", "person" where "person"."ownerId" = $1 - and f_unaccent ("person"."name") %>> f_unaccent ($2) + and f_unaccent ("person"."name") %> f_unaccent ($2) order by f_unaccent ("person"."name") <->>> f_unaccent ($3) limit diff --git a/server/src/repositories/person.repository.ts b/server/src/repositories/person.repository.ts index c1c21162a2..ab5fad40d1 100644 --- a/server/src/repositories/person.repository.ts +++ b/server/src/repositories/person.repository.ts @@ -310,10 +310,13 @@ export class PersonRepository { @GenerateSql({ params: [DummyValue.UUID, DummyValue.STRING, { withHidden: true }] }) getByName(userId: string, personName: string, { withHidden }: PersonNameSearchOptions) { return this.db - .selectFrom('person') + .with('similarity_threshold', (db) => + db.selectNoFrom(sql`set_config('pg_trgm.word_similarity_threshold', '0.5', true)`.as('thresh')), + ) + .selectFrom(['similarity_threshold', 'person']) .selectAll('person') .where('person.ownerId', '=', userId) - .where(() => sql`f_unaccent("person"."name") %>> f_unaccent(${personName})`) + .where(() => sql`f_unaccent("person"."name") %> f_unaccent(${personName})`) .orderBy(sql`f_unaccent("person"."name") <->>> f_unaccent(${personName})`) .limit(100) .$if(!withHidden, (qb) => qb.where('person.isHidden', '=', false)) From 5553910236ad179bac4eab6f02b54256f57ed7ec Mon Sep 17 00:00:00 2001 From: Zack Pollard Date: Thu, 9 Apr 2026 02:33:04 +0100 Subject: [PATCH 143/156] fix(web): don't cache empty search results for people search (#27632) --- web/src/lib/components/faces-page/people-search.svelte | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/web/src/lib/components/faces-page/people-search.svelte b/web/src/lib/components/faces-page/people-search.svelte index b9ceac52fe..39f2733206 100644 --- a/web/src/lib/components/faces-page/people-search.svelte +++ b/web/src/lib/components/faces-page/people-search.svelte @@ -70,7 +70,12 @@ reset(); return; } - if (!force && searchedPeople.length < maximumLengthSearchPeople && searchName.startsWith(searchWord)) { + if ( + !force && + searchedPeople.length > 0 && + searchedPeople.length < maximumLengthSearchPeople && + searchName.startsWith(searchWord) + ) { search(); return; } From b5bed023006db6d8af93e08168009340c64d97ab Mon Sep 17 00:00:00 2001 From: Luis Nachtigall <31982496+LeLunZ@users.noreply.github.com> Date: Thu, 9 Apr 2026 03:55:53 +0200 Subject: [PATCH 144/156] fix(mobile): get provider refs before async gaps in backup page (#27597) * fix(mobile): get provider refs before async gaps in backup page * fix(mobile): use previously created provider refs in start backup function --- mobile/lib/pages/backup/drift_backup.page.dart | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/mobile/lib/pages/backup/drift_backup.page.dart b/mobile/lib/pages/backup/drift_backup.page.dart index 3ba3389eea..6bdb8dd552 100644 --- a/mobile/lib/pages/backup/drift_backup.page.dart +++ b/mobile/lib/pages/backup/drift_backup.page.dart @@ -45,14 +45,17 @@ class _DriftBackupPageState extends ConsumerState { } WidgetsBinding.instance.addPostFrameCallback((_) async { - await ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id); + final backupNotifier = ref.read(driftBackupProvider.notifier); + final syncManager = ref.read(backgroundSyncProvider); - ref.read(driftBackupProvider.notifier).updateSyncing(true); - syncSuccess = await ref.read(backgroundSyncProvider).syncRemote(); - ref.read(driftBackupProvider.notifier).updateSyncing(false); + await backupNotifier.getBackupStatus(currentUser.id); + + backupNotifier.updateSyncing(true); + syncSuccess = await syncManager.syncRemote(); + backupNotifier.updateSyncing(false); if (mounted) { - await ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id); + await backupNotifier.getBackupStatus(currentUser.id); } }); } @@ -82,9 +85,9 @@ class _DriftBackupPageState extends ConsumerState { } if (syncSuccess == null) { - ref.read(driftBackupProvider.notifier).updateSyncing(true); + backupNotifier.updateSyncing(true); syncSuccess = await backupSyncManager.syncRemote(); - ref.read(driftBackupProvider.notifier).updateSyncing(false); + backupNotifier.updateSyncing(false); } await backupNotifier.getBackupStatus(currentUser.id); From 7b269d1638cad0e736f562f6cf9745c2b77a079b Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Thu, 9 Apr 2026 12:16:41 -0400 Subject: [PATCH 145/156] fix: ssr open graph tags (#27639) fix: SSR open graph tags --- pnpm-lock.yaml | 46 ------------------------- server/package.json | 2 -- server/src/services/api.service.spec.ts | 36 +++++++++++++++++++ server/src/services/api.service.ts | 4 +-- 4 files changed, 38 insertions(+), 50 deletions(-) create mode 100644 server/src/services/api.service.spec.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c26b897d41..9d37c5e09b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -553,9 +553,6 @@ importers: sanitize-filename: specifier: ^1.6.3 version: 1.6.4 - sanitize-html: - specifier: ^2.14.0 - version: 2.17.2 semver: specifier: ^7.6.2 version: 7.7.4 @@ -659,9 +656,6 @@ importers: '@types/react': specifier: ^19.0.0 version: 19.2.14 - '@types/sanitize-html': - specifier: ^2.13.0 - version: 2.16.1 '@types/semver': specifier: ^7.5.8 version: 7.7.1 @@ -5167,9 +5161,6 @@ packages: '@types/retry@0.12.2': resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} - '@types/sanitize-html@2.16.1': - resolution: {integrity: sha512-n9wjs8bCOTyN/ynwD8s/nTcTreIHB1vf31vhLMGqUPNHaweKC4/fAl4Dj+hUlCTKYgm4P3k83fmiFfzkZ6sgMA==} - '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} @@ -7971,9 +7962,6 @@ packages: webpack: optional: true - htmlparser2@10.1.0: - resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} - htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} @@ -8303,10 +8291,6 @@ packages: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} - is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -9692,9 +9676,6 @@ packages: parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} - parse-srcset@1.0.2: - resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} - parse5-htmlparser2-tree-adapter@7.1.0: resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} @@ -10892,9 +10873,6 @@ packages: sanitize-filename@1.6.4: resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} - sanitize-html@2.17.2: - resolution: {integrity: sha512-EnffJUl46VE9uvZ0XeWzObHLurClLlT12gsOk1cHyP2Ol1P0BnBnsXmShlBmWVJM+dKieQI68R0tsPY5m/B+Jg==} - sass@1.97.1: resolution: {integrity: sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==} engines: {node: '>=14.0.0'} @@ -17459,10 +17437,6 @@ snapshots: '@types/retry@0.12.2': {} - '@types/sanitize-html@2.16.1': - dependencies: - htmlparser2: 10.1.0 - '@types/sax@1.2.7': dependencies: '@types/node': 24.12.2 @@ -20865,13 +20839,6 @@ snapshots: optionalDependencies: webpack: 5.104.1 - htmlparser2@10.1.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 7.0.1 - htmlparser2@6.1.0: dependencies: domelementtype: 2.3.0 @@ -21200,8 +21167,6 @@ snapshots: dependencies: isobject: 3.0.1 - is-plain-object@5.0.0: {} - is-potential-custom-element-name@1.0.1: optional: true @@ -22933,8 +22898,6 @@ snapshots: parse-numeric-range@1.3.0: {} - parse-srcset@1.0.2: {} - parse5-htmlparser2-tree-adapter@7.1.0: dependencies: domhandler: 5.0.3 @@ -24278,15 +24241,6 @@ snapshots: dependencies: truncate-utf8-bytes: 1.0.2 - sanitize-html@2.17.2: - dependencies: - deepmerge: 4.3.1 - escape-string-regexp: 4.0.0 - htmlparser2: 10.1.0 - is-plain-object: 5.0.0 - parse-srcset: 1.0.2 - postcss: 8.5.8 - sass@1.97.1: dependencies: chokidar: 4.0.3 diff --git a/server/package.json b/server/package.json index 99e58a0e2c..2276b30468 100644 --- a/server/package.json +++ b/server/package.json @@ -110,7 +110,6 @@ "reflect-metadata": "^0.2.0", "rxjs": "^7.8.1", "sanitize-filename": "^1.6.3", - "sanitize-html": "^2.14.0", "semver": "^7.6.2", "sharp": "^0.34.5", "sirv": "^3.0.0", @@ -147,7 +146,6 @@ "@types/picomatch": "^4.0.0", "@types/pngjs": "^6.0.5", "@types/react": "^19.0.0", - "@types/sanitize-html": "^2.13.0", "@types/semver": "^7.5.8", "@types/supertest": "^7.0.0", "@types/ua-parser-js": "^0.7.36", diff --git a/server/src/services/api.service.spec.ts b/server/src/services/api.service.spec.ts new file mode 100644 index 0000000000..1152b89981 --- /dev/null +++ b/server/src/services/api.service.spec.ts @@ -0,0 +1,36 @@ +import { ApiService, render } from 'src/services/api.service'; + +describe(ApiService.name, () => { + describe('render', () => { + it('should correctly render open graph tags', () => { + const output = render('', { + title: 'title', + description: 'description', + imageUrl: 'https://demo.immich.app/api/assets/123', + }); + expect(output).toContain(''); + expect(output).toContain(''); + expect(output).toContain(''); + }); + + it('should escape html tags', () => { + expect( + render('', { + title: "Test", + description: 'description', + }), + ).toContain( + '', + ); + }); + + it('should escape quotes', () => { + expect( + render('', { + title: `0;url=https://example.com" http-equiv="refresh`, + description: 'description', + }), + ).toContain(''); + }); + }); +}); diff --git a/server/src/services/api.service.ts b/server/src/services/api.service.ts index 7dd2eb0d4e..c8e6b39b21 100644 --- a/server/src/services/api.service.ts +++ b/server/src/services/api.service.ts @@ -1,7 +1,7 @@ import { Injectable, NotAcceptableException } from '@nestjs/common'; import { NextFunction, Request, Response } from 'express'; +import { escape } from 'lodash'; import { readFileSync } from 'node:fs'; -import sanitizeHtml from 'sanitize-html'; import { ConfigRepository } from 'src/repositories/config.repository'; import { LoggingRepository } from 'src/repositories/logging.repository'; import { AuthService } from 'src/services/auth.service'; @@ -10,7 +10,7 @@ import { OpenGraphTags } from 'src/utils/misc'; export const render = (index: string, meta: OpenGraphTags) => { const [title, description, imageUrl] = [meta.title, meta.description, meta.imageUrl].map((item) => - item ? sanitizeHtml(item, { allowedTags: [] }) : '', + item ? escape(item) : '', ); const tags = ` From 3254d31cd2967ad878f9bc5fb8b25738c8fd883a Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 17:51:40 +0000 Subject: [PATCH 146/156] chore: version v2.7.3 --- cli/package.json | 2 +- docs/static/archived-versions.json | 4 ++-- e2e/package.json | 2 +- i18n/package.json | 2 +- machine-learning/pyproject.toml | 2 +- machine-learning/uv.lock | 2 +- mobile/android/fastlane/Fastfile | 4 ++-- mobile/ios/Runner/Info.plist | 2 +- mobile/openapi/README.md | 2 +- mobile/pubspec.yaml | 2 +- open-api/immich-openapi-specs.json | 2 +- open-api/typescript-sdk/package.json | 2 +- open-api/typescript-sdk/src/fetch-client.ts | 2 +- package.json | 2 +- server/package.json | 2 +- web/package.json | 2 +- 16 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cli/package.json b/cli/package.json index 7b987a55b9..4e3bd05db3 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@immich/cli", - "version": "2.7.2", + "version": "2.7.3", "description": "Command Line Interface (CLI) for Immich", "type": "module", "exports": "./dist/index.js", diff --git a/docs/static/archived-versions.json b/docs/static/archived-versions.json index b268e958fa..72e5487c9a 100644 --- a/docs/static/archived-versions.json +++ b/docs/static/archived-versions.json @@ -1,7 +1,7 @@ [ { - "label": "v2.7.2", - "url": "https://docs.v2.7.2.archive.immich.app" + "label": "v2.7.3", + "url": "https://docs.v2.7.3.archive.immich.app" }, { "label": "v2.6.3", diff --git a/e2e/package.json b/e2e/package.json index add6e0b6d3..8b03ff16ef 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "immich-e2e", - "version": "2.7.2", + "version": "2.7.3", "description": "", "main": "index.js", "type": "module", diff --git a/i18n/package.json b/i18n/package.json index c218dc0409..8de66f51b1 100644 --- a/i18n/package.json +++ b/i18n/package.json @@ -1,6 +1,6 @@ { "name": "immich-i18n", - "version": "2.7.2", + "version": "2.7.3", "private": true, "scripts": { "format": "prettier --cache --check .", diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index 7b89f9d28b..7f0de412c5 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "immich-ml" -version = "2.7.2" +version = "2.7.3" description = "" authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }] requires-python = ">=3.11,<4.0" diff --git a/machine-learning/uv.lock b/machine-learning/uv.lock index ab3bbd5130..ea8d6dd551 100644 --- a/machine-learning/uv.lock +++ b/machine-learning/uv.lock @@ -898,7 +898,7 @@ wheels = [ [[package]] name = "immich-ml" -version = "2.7.2" +version = "2.7.3" source = { editable = "." } dependencies = [ { name = "aiocache" }, diff --git a/mobile/android/fastlane/Fastfile b/mobile/android/fastlane/Fastfile index b79b7fc4bf..a8237b9482 100644 --- a/mobile/android/fastlane/Fastfile +++ b/mobile/android/fastlane/Fastfile @@ -35,8 +35,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 3043, - "android.injected.version.name" => "2.7.2", + "android.injected.version.code" => 3044, + "android.injected.version.name" => "2.7.3", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') diff --git a/mobile/ios/Runner/Info.plist b/mobile/ios/Runner/Info.plist index 9400e3b5a3..67b206750b 100644 --- a/mobile/ios/Runner/Info.plist +++ b/mobile/ios/Runner/Info.plist @@ -80,7 +80,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.7.2 + 2.7.3 CFBundleSignature ???? CFBundleURLTypes diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 8f620ff2c0..6de228aecd 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -3,7 +3,7 @@ Immich API This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 2.7.2 +- API version: 2.7.3 - Generator version: 7.8.0 - Build package: org.openapitools.codegen.languages.DartClientCodegen diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 1c4d70dbb0..a6ed0046de 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -2,7 +2,7 @@ name: immich_mobile description: Immich - selfhosted backup media file on mobile phone publish_to: 'none' -version: 2.7.2+3043 +version: 2.7.3+3044 environment: sdk: '>=3.8.0 <4.0.0' diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 8198a75ae2..975f51446b 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -15225,7 +15225,7 @@ "info": { "title": "Immich", "description": "Immich API", - "version": "2.7.2", + "version": "2.7.3", "contact": {} }, "tags": [ diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 570b312f26..2b2e258a51 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@immich/sdk", - "version": "2.7.2", + "version": "2.7.3", "description": "Auto-generated TypeScript SDK for the Immich API", "type": "module", "main": "./build/index.js", diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index ec97f33041..c2e8eeb233 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -1,6 +1,6 @@ /** * Immich - * 2.7.2 + * 2.7.3 * DO NOT MODIFY - This file has been generated using oazapfts. * See https://www.npmjs.com/package/oazapfts */ diff --git a/package.json b/package.json index 1e958dc5d6..2648dbdfcf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "immich-monorepo", - "version": "2.7.2", + "version": "2.7.3", "description": "Monorepo for Immich", "private": true, "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be", diff --git a/server/package.json b/server/package.json index 2276b30468..611cb338e3 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "immich", - "version": "2.7.2", + "version": "2.7.3", "description": "", "author": "", "private": true, diff --git a/web/package.json b/web/package.json index e03a0f943f..0641bf7b95 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "immich-web", - "version": "2.7.2", + "version": "2.7.3", "license": "GNU Affero General Public License version 3", "type": "module", "scripts": { From 26957f37ce7215408707984a37319d3b3fcb93b6 Mon Sep 17 00:00:00 2001 From: Mees Frensel <33722705+meesfrensel@users.noreply.github.com> Date: Fri, 10 Apr 2026 12:07:18 +0200 Subject: [PATCH 147/156] fix(server): hide original filename when not showing metadata (#27581) --- .../src/services/asset-media.service.spec.ts | 18 ++++++++++++++++++ server/src/services/asset-media.service.ts | 4 +++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/server/src/services/asset-media.service.spec.ts b/server/src/services/asset-media.service.spec.ts index 39a1d2f822..3dba0c6d34 100644 --- a/server/src/services/asset-media.service.spec.ts +++ b/server/src/services/asset-media.service.spec.ts @@ -692,6 +692,24 @@ describe(AssetMediaService.name, () => { ); expect(mocks.asset.getForThumbnail).toHaveBeenCalledWith(asset.id, AssetFileType.Thumbnail, true); }); + + it('should not include original filename if requested using a shared link with showExif false', async () => { + const asset = AssetFactory.from().file({ type: AssetFileType.Preview }).build(); + + mocks.access.asset.checkSharedLinkAccess.mockResolvedValue(new Set([asset.id])); + mocks.asset.getForThumbnail.mockResolvedValue({ ...asset, path: asset.files[0].path }); + + const auth = AuthFactory.from().sharedLink({ showExif: false }).build(); + + await expect(sut.viewThumbnail(auth, asset.id, { size: AssetMediaSize.PREVIEW })).resolves.toEqual( + new ImmichFileResponse({ + path: asset.files[0].path, + cacheControl: CacheControl.PrivateWithCache, + contentType: 'image/jpeg', + fileName: `${asset.id}_preview.jpg`, + }), + ); + }); }); describe('playbackVideo', () => { diff --git a/server/src/services/asset-media.service.ts b/server/src/services/asset-media.service.ts index 8b8efd19c5..ddb6f412c5 100644 --- a/server/src/services/asset-media.service.ts +++ b/server/src/services/asset-media.service.ts @@ -257,7 +257,9 @@ export class AssetMediaService extends BaseService { throw new NotFoundException('Asset media not found'); } - const fileName = `${getFileNameWithoutExtension(originalFileName)}_${size}${getFilenameExtension(path)}`; + const fileNameBase = + auth.sharedLink && !auth.sharedLink.showExif ? id : getFileNameWithoutExtension(originalFileName); + const fileName = `${fileNameBase}_${size}${getFilenameExtension(path)}`; return new ImmichFileResponse({ fileName, From d7f038ec60c6f399c3fadc9ab090d94a6b93ffcd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 10:23:42 +0000 Subject: [PATCH 148/156] chore(deps): update dependency eslint-plugin-unicorn to v64 (#27575) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Dietzler --- cli/package.json | 2 +- e2e/package.json | 2 +- pnpm-lock.yaml | 222 +++------------------- server/package.json | 2 +- server/src/repositories/ocr.repository.ts | 1 + web/package.json | 2 +- 6 files changed, 32 insertions(+), 199 deletions(-) diff --git a/cli/package.json b/cli/package.json index 4e3bd05db3..aa666691a7 100644 --- a/cli/package.json +++ b/cli/package.json @@ -28,7 +28,7 @@ "eslint": "^10.0.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-unicorn": "^63.0.0", + "eslint-plugin-unicorn": "^64.0.0", "globals": "^17.0.0", "mock-fs": "^5.2.0", "prettier": "^3.7.4", diff --git a/e2e/package.json b/e2e/package.json index 8b03ff16ef..a354ea5b64 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -40,7 +40,7 @@ "eslint": "^10.0.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-unicorn": "^63.0.0", + "eslint-plugin-unicorn": "^64.0.0", "exiftool-vendored": "^35.0.0", "globals": "^17.0.0", "luxon": "^3.4.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d37c5e09b..524c9cca26 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -87,8 +87,8 @@ importers: specifier: ^5.1.3 version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1) eslint-plugin-unicorn: - specifier: ^63.0.0 - version: 63.0.0(eslint@10.1.0(jiti@2.6.1)) + specifier: ^64.0.0 + version: 64.0.0(eslint@10.1.0(jiti@2.6.1)) globals: specifier: ^17.0.0 version: 17.4.0 @@ -241,8 +241,8 @@ importers: specifier: ^5.1.3 version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1) eslint-plugin-unicorn: - specifier: ^63.0.0 - version: 63.0.0(eslint@10.1.0(jiti@2.6.1)) + specifier: ^64.0.0 + version: 64.0.0(eslint@10.1.0(jiti@2.6.1)) exiftool-vendored: specifier: ^35.0.0 version: 35.15.1 @@ -278,7 +278,7 @@ importers: version: 6.0.2 typescript-eslint: specifier: ^8.28.0 - version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) utimes: specifier: ^5.2.1 version: 5.2.1(encoding@0.1.13) @@ -681,8 +681,8 @@ importers: specifier: ^5.1.3 version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)))(eslint@10.1.0(jiti@2.6.1))(prettier@3.8.1) eslint-plugin-unicorn: - specifier: ^63.0.0 - version: 63.0.0(eslint@10.1.0(jiti@2.6.1)) + specifier: ^64.0.0 + version: 64.0.0(eslint@10.1.0(jiti@2.6.1)) globals: specifier: ^17.0.0 version: 17.4.0 @@ -718,7 +718,7 @@ importers: version: 6.0.2 typescript-eslint: specifier: ^8.28.0 - version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) unplugin-swc: specifier: ^1.4.5 version: 1.5.9(@swc/core@1.15.18(@swc/helpers@0.5.17))(rollup@4.55.1) @@ -928,8 +928,8 @@ importers: specifier: ^3.12.4 version: 3.16.0(eslint@10.1.0(jiti@2.6.1))(svelte@5.54.1) eslint-plugin-unicorn: - specifier: ^63.0.0 - version: 63.0.0(eslint@10.1.0(jiti@2.6.1)) + specifier: ^64.0.0 + version: 64.0.0(eslint@10.1.0(jiti@2.6.1)) factory.ts: specifier: ^1.4.1 version: 1.4.2 @@ -968,7 +968,7 @@ importers: version: 6.0.2 typescript-eslint: specifier: ^8.45.0 - version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) vite: specifier: ^8.0.0 version: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) @@ -5233,14 +5233,6 @@ packages: '@types/yargs@17.0.35': resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typescript-eslint/eslint-plugin@8.57.1': - resolution: {integrity: sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.57.1 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/eslint-plugin@8.58.0': resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5249,13 +5241,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.57.1': - resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.58.0': resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5263,45 +5248,22 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.57.1': - resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.58.0': resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.57.1': - resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.58.0': resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.57.1': - resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.58.0': resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.57.1': - resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.58.0': resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5309,33 +5271,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.57.1': - resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.58.0': resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.57.1': - resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.58.0': resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.57.1': - resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.58.0': resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5343,10 +5288,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.57.1': - resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.58.0': resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6129,8 +6070,8 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.3.1: - resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} citty@0.1.6: @@ -6411,8 +6352,8 @@ packages: peerDependencies: webpack: ^5.1.0 - core-js-compat@3.47.0: - resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} core-js-pure@3.47.0: resolution: {integrity: sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==} @@ -7235,8 +7176,8 @@ packages: svelte: optional: true - eslint-plugin-unicorn@63.0.0: - resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==} + eslint-plugin-unicorn@64.0.0: + resolution: {integrity: sha512-rNZwalHh8i0UfPlhNwg5BTUO1CMdKNmjqe+TgzOTZnpKoi8VBgsW7u9qCHIdpxEzZ1uwrJrPF0uRb7l//K38gA==} engines: {node: ^20.10.0 || >=21.0.0} peerDependencies: eslint: '>=9.38.0' @@ -11755,13 +11696,6 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.57.1: - resolution: {integrity: sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - typescript-eslint@8.58.0: resolution: {integrity: sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -13438,7 +13372,7 @@ snapshots: babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5) babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5) - core-js-compat: 3.47.0 + core-js-compat: 3.49.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -15490,8 +15424,8 @@ snapshots: '@koddsson/eslint-plugin-tscompat@0.2.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@mdn/browser-compat-data': 6.1.5 - '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/type-utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) browserslist: 4.28.1 transitivePeerDependencies: - eslint @@ -17526,22 +17460,6 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.57.1 - eslint: 10.1.0(jiti@2.6.1) - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -17558,18 +17476,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': - dependencies: - '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.57.1 - debug: 4.4.3 - eslint: 10.1.0(jiti@2.6.1) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/scope-manager': 8.58.0 @@ -17582,15 +17488,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.1(typescript@6.0.2)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.2) - '@typescript-eslint/types': 8.57.1 - debug: 4.4.3 - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/project-service@8.58.0(typescript@6.0.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2) @@ -17600,36 +17497,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.57.1': - dependencies: - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/visitor-keys': 8.57.1 - '@typescript-eslint/scope-manager@8.58.0': dependencies: '@typescript-eslint/types': 8.58.0 '@typescript-eslint/visitor-keys': 8.58.0 - '@typescript-eslint/tsconfig-utils@8.57.1(typescript@6.0.2)': - dependencies: - typescript: 6.0.2 - '@typescript-eslint/tsconfig-utils@8.58.0(typescript@6.0.2)': dependencies: typescript: 6.0.2 - '@typescript-eslint/type-utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': - dependencies: - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - debug: 4.4.3 - eslint: 10.1.0(jiti@2.6.1) - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/type-utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/types': 8.58.0 @@ -17642,25 +17518,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.57.1': {} - '@typescript-eslint/types@8.58.0': {} - '@typescript-eslint/typescript-estree@8.57.1(typescript@6.0.2)': - dependencies: - '@typescript-eslint/project-service': 8.57.1(typescript@6.0.2) - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.2) - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/visitor-keys': 8.57.1 - debug: 4.4.3 - minimatch: 10.2.4 - semver: 7.7.4 - tinyglobby: 0.2.15 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2)': dependencies: '@typescript-eslint/project-service': 8.58.0(typescript@6.0.2) @@ -17676,17 +17535,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) - eslint: 10.1.0(jiti@2.6.1) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) @@ -17698,11 +17546,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.57.1': - dependencies: - '@typescript-eslint/types': 8.57.1 - eslint-visitor-keys: 5.0.1 - '@typescript-eslint/visitor-keys@8.58.0': dependencies: '@typescript-eslint/types': 8.58.0 @@ -18223,7 +18066,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) - core-js-compat: 3.47.0 + core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color @@ -18638,7 +18481,7 @@ snapshots: ci-info@3.9.0: {} - ci-info@4.3.1: {} + ci-info@4.4.0: {} citty@0.1.6: dependencies: @@ -18890,7 +18733,7 @@ snapshots: serialize-javascript: 6.0.2 webpack: 5.104.1 - core-js-compat@3.47.0: + core-js-compat@3.49.0: dependencies: browserslist: 4.28.1 @@ -19844,17 +19687,17 @@ snapshots: transitivePeerDependencies: - ts-node - eslint-plugin-unicorn@63.0.0(eslint@10.1.0(jiti@2.6.1)): + eslint-plugin-unicorn@64.0.0(eslint@10.1.0(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.28.5 '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) change-case: 5.4.4 - ci-info: 4.3.1 + ci-info: 4.4.0 clean-regexp: 1.0.0 - core-js-compat: 3.47.0 + core-js-compat: 3.49.0 eslint: 10.1.0(jiti@2.6.1) find-up-simple: 1.0.1 - globals: 16.5.0 + globals: 17.4.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 jsesc: 3.1.0 @@ -25358,17 +25201,6 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): - dependencies: - '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - eslint: 10.1.0(jiti@2.6.1) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - typescript-eslint@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): dependencies: '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) diff --git a/server/package.json b/server/package.json index 611cb338e3..6b074c6e35 100644 --- a/server/package.json +++ b/server/package.json @@ -154,7 +154,7 @@ "eslint": "^10.0.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-unicorn": "^63.0.0", + "eslint-plugin-unicorn": "^64.0.0", "globals": "^17.0.0", "mock-fs": "^5.2.0", "node-gyp": "^12.0.0", diff --git a/server/src/repositories/ocr.repository.ts b/server/src/repositories/ocr.repository.ts index 63375cf57d..916f2643ff 100644 --- a/server/src/repositories/ocr.repository.ts +++ b/server/src/repositories/ocr.repository.ts @@ -58,6 +58,7 @@ export class OcrRepository { }) upsert(assetId: string, ocrDataList: Insertable[], searchText: string) { let query = this.db.with('deleted_ocr', (db) => db.deleteFrom('asset_ocr').where('assetId', '=', assetId)); + // eslint-disable-next-line unicorn/prefer-ternary if (ocrDataList.length > 0) { (query as any) = query .with('inserted_ocr', (db) => db.insertInto('asset_ocr').values(ocrDataList)) diff --git a/web/package.json b/web/package.json index 0641bf7b95..079777e860 100644 --- a/web/package.json +++ b/web/package.json @@ -91,7 +91,7 @@ "eslint-config-prettier": "^10.1.8", "eslint-plugin-compat": "^7.0.0", "eslint-plugin-svelte": "^3.12.4", - "eslint-plugin-unicorn": "^63.0.0", + "eslint-plugin-unicorn": "^64.0.0", "factory.ts": "^1.4.1", "globals": "^17.0.0", "happy-dom": "^20.0.0", From bc400d68ac6d3bfc8ad4a51835784630ca2cdb9b Mon Sep 17 00:00:00 2001 From: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> Date: Fri, 10 Apr 2026 16:02:25 +0200 Subject: [PATCH 149/156] chore: move .tsbuildinfo file to dist folder (#27682) --- cli/tsconfig.json | 1 + server/tsconfig.build.json | 1 + server/tsconfig.json | 1 + 3 files changed, 3 insertions(+) diff --git a/cli/tsconfig.json b/cli/tsconfig.json index 780ef8ba5c..f2d8d61a5f 100644 --- a/cli/tsconfig.json +++ b/cli/tsconfig.json @@ -19,6 +19,7 @@ "paths": { "src/*": ["./src/*"], }, + "tsBuildInfoFile": "./dist/tsconfig.tsbuildinfo", "types": ["vitest/globals"] }, "exclude": ["dist", "node_modules", "vite.config.ts"] diff --git a/server/tsconfig.build.json b/server/tsconfig.build.json index b64a2f98a7..1e66615096 100644 --- a/server/tsconfig.build.json +++ b/server/tsconfig.build.json @@ -2,6 +2,7 @@ "extends": "./tsconfig.json", "compilerOptions": { "rootDir": "./src", + "tsBuildInfoFile": "./dist/tsconfig.build.tsbuildinfo", }, "exclude": ["dist", "node_modules", "upload", "test", "e2e", "**/*spec.ts"] } diff --git a/server/tsconfig.json b/server/tsconfig.json index 9d86425ab5..51d57a0dbc 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -24,6 +24,7 @@ "rootDir": ".", "jsx": "react", "types": ["vitest/globals"], + "tsBuildInfoFile": "./dist/tsconfig.tsbuildinfo", "noErrorTruncation": true }, "exclude": ["dist", "node_modules", "upload"] From d39e7da10d49bc3edafd7cf0360608f68a6cf6cc Mon Sep 17 00:00:00 2001 From: Luis Nachtigall <31982496+LeLunZ@users.noreply.github.com> Date: Fri, 10 Apr 2026 17:28:55 +0200 Subject: [PATCH 150/156] fix(mobile): fix flutter cache eviction on thumbnails (#27663) * fix: add markFinished parameter to loadRequest and loadCodecRequest methods * update loadRequest and loadCodecRequest methods to use isFinal * Apply suggestions from code review Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com> * remove redundant check * fix: ensure isFinished is set correctly during cache eviction * formatting --------- Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com> --- .../widgets/images/image_provider.dart | 30 ++++++++----------- .../widgets/images/local_image_provider.dart | 16 +++++----- .../widgets/images/remote_image_provider.dart | 13 ++++---- .../widgets/images/thumb_hash_provider.dart | 2 +- 4 files changed, 26 insertions(+), 35 deletions(-) diff --git a/mobile/lib/presentation/widgets/images/image_provider.dart b/mobile/lib/presentation/widgets/images/image_provider.dart index 1d87fa404e..47ebd37014 100644 --- a/mobile/lib/presentation/widgets/images/image_provider.dart +++ b/mobile/lib/presentation/widgets/images/image_provider.dart @@ -51,7 +51,7 @@ mixin CancellableImageProviderMixin on CancellableImageProvide return null; } - Stream loadRequest(ImageRequest request, ImageDecoderCallback decode, {bool evictOnError = true}) async* { + Stream loadRequest(ImageRequest request, ImageDecoderCallback decode, {required bool isFinal}) async* { if (isCancelled) { this.request = null; return; @@ -59,21 +59,18 @@ mixin CancellableImageProviderMixin on CancellableImageProvide try { final image = await request.load(decode); - if (isCancelled) { - return; - } - if (image == null && evictOnError) { - PaintingBinding.instance.imageCache.evict(this); - return; - } else if (image == null) { + if (isCancelled || image == null) { + image?.dispose(); return; } + isFinished = isFinal; yield image; } catch (e, stack) { if (isCancelled) { return; } - if (evictOnError) { + if (isFinal) { + isFinished = true; PaintingBinding.instance.imageCache.evict(this); rethrow; } @@ -83,7 +80,7 @@ mixin CancellableImageProviderMixin on CancellableImageProvide } } - Future loadCodecRequest(ImageRequest request) async { + Future loadCodecRequest(ImageRequest request, {required bool isFinal}) async { if (isCancelled) { this.request = null; return null; @@ -91,20 +88,19 @@ mixin CancellableImageProviderMixin on CancellableImageProvide try { final codec = await request.loadCodec(); - if (isCancelled) { + if (isCancelled || codec == null) { codec?.dispose(); return null; } - if (codec == null) { - PaintingBinding.instance.imageCache.evict(this); - return null; - } + isFinished = isFinal; return codec; } catch (e) { - if (!isCancelled) { + if (isFinal) { + isFinished = true; PaintingBinding.instance.imageCache.evict(this); + rethrow; } - rethrow; + return null; } finally { this.request = null; } diff --git a/mobile/lib/presentation/widgets/images/local_image_provider.dart b/mobile/lib/presentation/widgets/images/local_image_provider.dart index d4f829bed5..d29a1cd56d 100644 --- a/mobile/lib/presentation/widgets/images/local_image_provider.dart +++ b/mobile/lib/presentation/widgets/images/local_image_provider.dart @@ -36,7 +36,7 @@ class LocalThumbProvider extends CancellableImageProvider Stream _codec(LocalThumbProvider key, ImageDecoderCallback decode) { final request = this.request = LocalImageRequest(localId: key.id, size: key.size, assetType: key.assetType); - return loadRequest(request, decode); + return loadRequest(request, decode, isFinal: true); } @override @@ -103,16 +103,16 @@ class LocalFullImageProvider extends CancellableImageProvider _animatedCodec(LocalFullImageProvider key, ImageDecoderCallback decode) async* { @@ -139,7 +138,7 @@ class LocalFullImageProvider extends CancellableImageProvider Stream _codec(RemoteImageProvider key, ImageDecoderCallback decode) { final request = this.request = RemoteImageRequest(uri: key.url); - return loadRequest(request, decode); + return loadRequest(request, decode, isFinal: true); } @override @@ -112,10 +112,9 @@ class RemoteFullImageProvider extends CancellableImageProvider _animatedCodec(RemoteFullImageProvider key, ImageDecoderCallback decode) async* { @@ -138,7 +136,7 @@ class RemoteFullImageProvider extends CancellableImageProvider Stream _loadCodec(ThumbHashProvider key, ImageDecoderCallback decode) { final request = this.request = ThumbhashImageRequest(thumbhash: key.thumbHash); - return loadRequest(request, decode); + return loadRequest(request, decode, isFinal: true); } @override From 8a975e5ea92db29c969de9e67f733b899821d070 Mon Sep 17 00:00:00 2001 From: Luis Nachtigall <31982496+LeLunZ@users.noreply.github.com> Date: Fri, 10 Apr 2026 17:56:35 +0200 Subject: [PATCH 151/156] refactor(mobile): cleanup iOS image loading pipeline (#27672) * refactor: replace DispatchQueue + DispatchSemaphore with OperationQueue for image processing * implement RequestRegistry and UnfairLock for managing cancellable requests * implement requests registry for local and remote image processing * remove Cancellable protocol and cancel method from request registry * refactor: introduce ImageRequest base class with unified cancellation and finish helpers * refactor: add get method to RequestRegistry and streamline request removal in image processing * add guard to cancel to prevent double onCancel calls * fix duplicate code merge issue * refactor(ios): enhance finish method to return callback status * remove unfitting methods form ImageRequest.swift and fix memory issue * revert bad merge * refactor(ios): resolve cancellation issues * refactor(ios): streamline image request completion handling * add return statements * refactor(ios): simplify image request cancellation and registry handling --------- Co-authored-by: Alex --- mobile/ios/Runner/Images/ImageRequest.swift | 27 ++++++ .../ios/Runner/Images/LocalImagesImpl.swift | 54 ++++------- .../ios/Runner/Images/RemoteImagesImpl.swift | 97 +++++++++---------- 3 files changed, 91 insertions(+), 87 deletions(-) diff --git a/mobile/ios/Runner/Images/ImageRequest.swift b/mobile/ios/Runner/Images/ImageRequest.swift index 5c05bafb83..6c8bb04c70 100644 --- a/mobile/ios/Runner/Images/ImageRequest.swift +++ b/mobile/ios/Runner/Images/ImageRequest.swift @@ -1,5 +1,32 @@ import Foundation +class ImageRequest: @unchecked Sendable { + private struct State: Sendable { + var isCancelled = false + } + + let completion: @Sendable (Result<[String: Int64]?, any Error>) -> Void + private let state: Mutex + + var isCancelled: Bool { + get { + state.withLock { $0.isCancelled } + } + set { + state.withLock { $0.isCancelled = newValue } + } + } + + init(completion: @escaping @Sendable (Result<[String: Int64]?, any Error>) -> Void) { + self.state = Mutex(State()) + self.completion = completion + } + + func cancel() { + isCancelled = true + } +} + struct RequestRegistry: ~Copyable, Sendable { private let requests = Mutex<[Int64: T]>([:]) diff --git a/mobile/ios/Runner/Images/LocalImagesImpl.swift b/mobile/ios/Runner/Images/LocalImagesImpl.swift index 713a24a2dd..9c142da054 100644 --- a/mobile/ios/Runner/Images/LocalImagesImpl.swift +++ b/mobile/ios/Runner/Images/LocalImagesImpl.swift @@ -3,21 +3,6 @@ import Flutter import MobileCoreServices import Photos -class LocalImageRequest { - weak var operation: Operation? - var isCancelled = false - let callback: (Result<[String: Int64]?, any Error>) -> Void - - init(callback: @escaping (Result<[String: Int64]?, any Error>) -> Void) { - self.callback = callback - } - - func cancel() { - isCancelled = true - operation?.cancel() - } -} - class LocalImageApiImpl: LocalImageApi { private static let imageManager = PHImageManager.default() private static let fetchOptions = { @@ -36,9 +21,9 @@ class LocalImageApiImpl: LocalImageApi { return requestOptions }() - private static let registry = RequestRegistry() + private static let registry = RequestRegistry() - private static var rgbaFormat = vImage_CGImageFormat( + private static let rgbaFormat = vImage_CGImageFormat( bitsPerComponent: 8, bitsPerPixel: 32, colorSpace: CGColorSpaceCreateDeviceRGB(), @@ -67,21 +52,20 @@ class LocalImageApiImpl: LocalImageApi { } func requestImage(assetId: String, requestId: Int64, width: Int64, height: Int64, isVideo: Bool, preferEncoded: Bool, completion: @escaping (Result<[String: Int64]?, any Error>) -> Void) { - let request = LocalImageRequest(callback: completion) + let request = ImageRequest(completion: completion) let operation = BlockOperation { if request.isCancelled { - return completion(ImageProcessing.cancelledResult) + return request.completion(ImageProcessing.cancelledResult) } guard let asset = Self.requestAsset(assetId: assetId) else { Self.registry.remove(requestId: requestId) - completion(.failure(PigeonError(code: "", message: "Could not get asset data for \(assetId)", details: nil))) - return + return request.completion(.failure(PigeonError(code: "", message: "Could not get asset data for \(assetId)", details: nil))) } if request.isCancelled { - return completion(ImageProcessing.cancelledResult) + return request.completion(ImageProcessing.cancelledResult) } if preferEncoded { @@ -100,12 +84,12 @@ class LocalImageApiImpl: LocalImageApi { ) if request.isCancelled { - return completion(ImageProcessing.cancelledResult) + return request.completion(ImageProcessing.cancelledResult) } guard let data = imageData else { Self.registry.remove(requestId: requestId) - return completion(.failure(PigeonError(code: "", message: "Could not get image data for \(assetId)", details: nil))) + return request.completion(.failure(PigeonError(code: "", message: "Could not get image data for \(assetId)", details: nil))) } let length = data.count @@ -114,15 +98,14 @@ class LocalImageApiImpl: LocalImageApi { if request.isCancelled { free(pointer) - return completion(ImageProcessing.cancelledResult) + return request.completion(ImageProcessing.cancelledResult) } - request.callback(.success([ + Self.registry.remove(requestId: requestId) + return request.completion(.success([ "pointer": Int64(Int(bitPattern: pointer)), "length": Int64(length), ])) - Self.registry.remove(requestId: requestId) - return } var image: UIImage? @@ -137,17 +120,17 @@ class LocalImageApiImpl: LocalImageApi { ) if request.isCancelled { - return completion(ImageProcessing.cancelledResult) + return request.completion(ImageProcessing.cancelledResult) } guard let image = image, let cgImage = image.cgImage else { Self.registry.remove(requestId: requestId) - return completion(.failure(PigeonError(code: "", message: "Could not get pixel data for \(assetId)", details: nil))) + return request.completion(.failure(PigeonError(code: "", message: "Could not get pixel data for \(assetId)", details: nil))) } if request.isCancelled { - return completion(ImageProcessing.cancelledResult) + return request.completion(ImageProcessing.cancelledResult) } do { @@ -155,23 +138,22 @@ class LocalImageApiImpl: LocalImageApi { if request.isCancelled { buffer.free() - return completion(ImageProcessing.cancelledResult) + return request.completion(ImageProcessing.cancelledResult) } - request.callback(.success([ + Self.registry.remove(requestId: requestId) + return request.completion(.success([ "pointer": Int64(Int(bitPattern: buffer.data)), "width": Int64(buffer.width), "height": Int64(buffer.height), "rowBytes": Int64(buffer.rowBytes), ])) - Self.registry.remove(requestId: requestId) } catch { Self.registry.remove(requestId: requestId) - return completion(.failure(PigeonError(code: "", message: "Failed to convert image for \(assetId): \(error)", details: nil))) + return request.completion(.failure(PigeonError(code: "", message: "Failed to convert image for \(assetId): \(error)", details: nil))) } } - request.operation = operation Self.registry.add(requestId: requestId, request: request) ImageProcessing.queue.addOperation(operation) } diff --git a/mobile/ios/Runner/Images/RemoteImagesImpl.swift b/mobile/ios/Runner/Images/RemoteImagesImpl.swift index 37d37f597b..de1f6dec89 100644 --- a/mobile/ios/Runner/Images/RemoteImagesImpl.swift +++ b/mobile/ios/Runner/Images/RemoteImagesImpl.swift @@ -3,27 +3,24 @@ import Flutter import MobileCoreServices import Photos -class RemoteImageRequest { - weak var task: URLSessionDataTask? +final class RemoteImageRequest: ImageRequest { + var task: URLSessionDataTask? let id: Int64 - var isCancelled = false - let completion: (Result<[String: Int64]?, any Error>) -> Void - init(id: Int64, task: URLSessionDataTask, completion: @escaping (Result<[String: Int64]?, any Error>) -> Void) { + init(id: Int64, completion: @escaping @Sendable (Result<[String: Int64]?, any Error>) -> Void) { self.id = id - self.task = task - self.completion = completion + super.init(completion: completion) } - func cancel() { - isCancelled = true + override func cancel() { + super.cancel() task?.cancel() } } class RemoteImageApiImpl: NSObject, RemoteImageApi { private static let registry = RequestRegistry() - private static var rgbaFormat = vImage_CGImageFormat( + private static let rgbaFormat = vImage_CGImageFormat( bitsPerComponent: 8, bitsPerPixel: 32, colorSpace: CGColorSpaceCreateDeviceRGB(), @@ -41,62 +38,58 @@ class RemoteImageApiImpl: NSObject, RemoteImageApi { var urlRequest = URLRequest(url: URL(string: url)!) urlRequest.cachePolicy = .returnCacheDataElseLoad + let request = RemoteImageRequest(id: requestId, completion: completion) + let task = URLSessionManager.shared.session.dataTask(with: urlRequest) { data, response, error in - Self.handleCompletion(requestId: requestId, encoded: preferEncoded, data: data, response: response, error: error) + Self.handleCompletion(request: request, encoded: preferEncoded, data: data, response: response, error: error) } - let request = RemoteImageRequest(id: requestId, task: task, completion: completion) - + request.task = task Self.registry.add(requestId: requestId, request: request) - task.resume() } - private static func handleCompletion(requestId: Int64, encoded: Bool, data: Data?, response: URLResponse?, error: Error?) { - guard let request = registry.remove(requestId: requestId) else { - return - } - - if let error = error { - if request.isCancelled || (error as NSError).code == NSURLErrorCancelled { - return request.completion(ImageProcessing.cancelledResult) - } - return request.completion(.failure(error)) - } - + private static func handleCompletion(request: RemoteImageRequest, encoded: Bool, data: Data?, response: URLResponse?, error: Error?) { if request.isCancelled { return request.completion(ImageProcessing.cancelledResult) } + if let error = error { + registry.remove(requestId: request.id) + return request.completion(.failure(error)) + } + guard let data = data else { + registry.remove(requestId: request.id) return request.completion(.failure(PigeonError(code: "", message: "No data received", details: nil))) } + if encoded { + let length = data.count + let pointer = malloc(length)! + data.copyBytes(to: pointer.assumingMemoryBound(to: UInt8.self), count: length) + + if request.isCancelled { + free(pointer) + return request.completion(ImageProcessing.cancelledResult) + } + + registry.remove(requestId: request.id) + return request.completion( + .success([ + "pointer": Int64(Int(bitPattern: pointer)), + "length": Int64(length), + ])) + } + ImageProcessing.queue.addOperation { if request.isCancelled { return request.completion(ImageProcessing.cancelledResult) } - // Return raw encoded bytes when requested (for animated images) - if encoded { - let length = data.count - let pointer = malloc(length)! - data.copyBytes(to: pointer.assumingMemoryBound(to: UInt8.self), count: length) - - if request.isCancelled { - free(pointer) - return request.completion(ImageProcessing.cancelledResult) - } - - return request.completion( - .success([ - "pointer": Int64(Int(bitPattern: pointer)), - "length": Int64(length), - ])) - } - guard let imageSource = CGImageSourceCreateWithData(data as CFData, nil), let cgImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, decodeOptions) else { + registry.remove(requestId: request.id) return request.completion(.failure(PigeonError(code: "", message: "Failed to decode image for request", details: nil))) } @@ -112,14 +105,16 @@ class RemoteImageApiImpl: NSObject, RemoteImageApi { return request.completion(ImageProcessing.cancelledResult) } - request.completion( - .success([ - "pointer": Int64(Int(bitPattern: buffer.data)), - "width": Int64(buffer.width), - "height": Int64(buffer.height), - "rowBytes": Int64(buffer.rowBytes), - ])) + registry.remove(requestId: request.id) + return request.completion( + .success([ + "pointer": Int64(Int(bitPattern: buffer.data)), + "width": Int64(buffer.width), + "height": Int64(buffer.height), + "rowBytes": Int64(buffer.rowBytes), + ])) } catch { + registry.remove(requestId: request.id) return request.completion(.failure(PigeonError(code: "", message: "Failed to convert image for request: \(error)", details: nil))) } } From 6d0c6a4008d128118ced6d5de61267b4e09a26b7 Mon Sep 17 00:00:00 2001 From: shenlong <139912620+shenlong-tanwen@users.noreply.github.com> Date: Fri, 10 Apr 2026 21:59:05 +0530 Subject: [PATCH 152/156] chore: pump cronet version (#27685) Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Co-authored-by: Alex --- mobile/android/app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile/android/app/build.gradle b/mobile/android/app/build.gradle index 103cf79e4e..ecc0f8420f 100644 --- a/mobile/android/app/build.gradle +++ b/mobile/android/app/build.gradle @@ -113,8 +113,8 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "com.squareup.okhttp3:okhttp:$okhttp_version" implementation 'org.chromium.net:cronet-embedded:143.7445.0' - implementation("androidx.media3:media3-datasource-okhttp:1.9.2") - implementation("androidx.media3:media3-datasource-cronet:1.9.2") + implementation("androidx.media3:media3-datasource-okhttp:1.10.0") + implementation("androidx.media3:media3-datasource-cronet:1.10.0") implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" implementation "androidx.work:work-runtime-ktx:$work_version" implementation "androidx.concurrent:concurrent-futures:$concurrent_version" From bee49cef02ea7a2fa09628d136c4606bfde385d4 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 16:32:26 +0000 Subject: [PATCH 153/156] chore: version v2.7.4 --- cli/package.json | 2 +- docs/static/archived-versions.json | 4 ++-- e2e/package.json | 2 +- i18n/package.json | 2 +- machine-learning/pyproject.toml | 2 +- machine-learning/uv.lock | 2 +- mobile/android/fastlane/Fastfile | 4 ++-- mobile/ios/Runner/Info.plist | 2 +- mobile/openapi/README.md | 2 +- mobile/pubspec.yaml | 2 +- open-api/immich-openapi-specs.json | 2 +- open-api/typescript-sdk/package.json | 2 +- open-api/typescript-sdk/src/fetch-client.ts | 2 +- package.json | 2 +- server/package.json | 2 +- web/package.json | 2 +- 16 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cli/package.json b/cli/package.json index aa666691a7..b195a1418d 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@immich/cli", - "version": "2.7.3", + "version": "2.7.4", "description": "Command Line Interface (CLI) for Immich", "type": "module", "exports": "./dist/index.js", diff --git a/docs/static/archived-versions.json b/docs/static/archived-versions.json index 72e5487c9a..624e95c65b 100644 --- a/docs/static/archived-versions.json +++ b/docs/static/archived-versions.json @@ -1,7 +1,7 @@ [ { - "label": "v2.7.3", - "url": "https://docs.v2.7.3.archive.immich.app" + "label": "v2.7.4", + "url": "https://docs.v2.7.4.archive.immich.app" }, { "label": "v2.6.3", diff --git a/e2e/package.json b/e2e/package.json index a354ea5b64..bd83e00ed8 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "immich-e2e", - "version": "2.7.3", + "version": "2.7.4", "description": "", "main": "index.js", "type": "module", diff --git a/i18n/package.json b/i18n/package.json index 8de66f51b1..a573aaff56 100644 --- a/i18n/package.json +++ b/i18n/package.json @@ -1,6 +1,6 @@ { "name": "immich-i18n", - "version": "2.7.3", + "version": "2.7.4", "private": true, "scripts": { "format": "prettier --cache --check .", diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index 7f0de412c5..8f559589a9 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "immich-ml" -version = "2.7.3" +version = "2.7.4" description = "" authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }] requires-python = ">=3.11,<4.0" diff --git a/machine-learning/uv.lock b/machine-learning/uv.lock index ea8d6dd551..77ffd247a6 100644 --- a/machine-learning/uv.lock +++ b/machine-learning/uv.lock @@ -898,7 +898,7 @@ wheels = [ [[package]] name = "immich-ml" -version = "2.7.3" +version = "2.7.4" source = { editable = "." } dependencies = [ { name = "aiocache" }, diff --git a/mobile/android/fastlane/Fastfile b/mobile/android/fastlane/Fastfile index a8237b9482..be1a17d03d 100644 --- a/mobile/android/fastlane/Fastfile +++ b/mobile/android/fastlane/Fastfile @@ -35,8 +35,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 3044, - "android.injected.version.name" => "2.7.3", + "android.injected.version.code" => 3045, + "android.injected.version.name" => "2.7.4", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') diff --git a/mobile/ios/Runner/Info.plist b/mobile/ios/Runner/Info.plist index 67b206750b..3f3735bc16 100644 --- a/mobile/ios/Runner/Info.plist +++ b/mobile/ios/Runner/Info.plist @@ -80,7 +80,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.7.3 + 2.7.4 CFBundleSignature ???? CFBundleURLTypes diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 6de228aecd..39d9ce2510 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -3,7 +3,7 @@ Immich API This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 2.7.3 +- API version: 2.7.4 - Generator version: 7.8.0 - Build package: org.openapitools.codegen.languages.DartClientCodegen diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index a6ed0046de..7101cd91ad 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -2,7 +2,7 @@ name: immich_mobile description: Immich - selfhosted backup media file on mobile phone publish_to: 'none' -version: 2.7.3+3044 +version: 2.7.4+3045 environment: sdk: '>=3.8.0 <4.0.0' diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 975f51446b..36eb3aa17e 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -15225,7 +15225,7 @@ "info": { "title": "Immich", "description": "Immich API", - "version": "2.7.3", + "version": "2.7.4", "contact": {} }, "tags": [ diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 2b2e258a51..68f75ba52c 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@immich/sdk", - "version": "2.7.3", + "version": "2.7.4", "description": "Auto-generated TypeScript SDK for the Immich API", "type": "module", "main": "./build/index.js", diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index c2e8eeb233..be871c0309 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -1,6 +1,6 @@ /** * Immich - * 2.7.3 + * 2.7.4 * DO NOT MODIFY - This file has been generated using oazapfts. * See https://www.npmjs.com/package/oazapfts */ diff --git a/package.json b/package.json index 2648dbdfcf..9c4c09c34f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "immich-monorepo", - "version": "2.7.3", + "version": "2.7.4", "description": "Monorepo for Immich", "private": true, "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be", diff --git a/server/package.json b/server/package.json index 6b074c6e35..15852eba8a 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "immich", - "version": "2.7.3", + "version": "2.7.4", "description": "", "author": "", "private": true, diff --git a/web/package.json b/web/package.json index 079777e860..0995acc301 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "immich-web", - "version": "2.7.3", + "version": "2.7.4", "license": "GNU Affero General Public License version 3", "type": "module", "scripts": { From 352f6ecc28d5c4bf719f0e9f10119a97310e64be Mon Sep 17 00:00:00 2001 From: Zack Pollard Date: Mon, 13 Apr 2026 13:35:46 +0100 Subject: [PATCH 154/156] fix(server): add rate limit and deduplication to version check (#27747) --- server/src/enum.ts | 1 + server/src/repositories/job.repository.ts | 3 ++ server/src/services/version.service.spec.ts | 22 ++++++++++++- server/src/services/version.service.ts | 34 ++++++++++++++------- 4 files changed, 48 insertions(+), 12 deletions(-) diff --git a/server/src/enum.ts b/server/src/enum.ts index 133d9b2f79..de85d24db3 100644 --- a/server/src/enum.ts +++ b/server/src/enum.ts @@ -707,6 +707,7 @@ export enum DatabaseLock { BackupDatabase = 42, MaintenanceOperation = 621, MemoryCreation = 777, + VersionCheck = 800, } export enum MaintenanceAction { diff --git a/server/src/repositories/job.repository.ts b/server/src/repositories/job.repository.ts index b12accb68e..142d5e3252 100644 --- a/server/src/repositories/job.repository.ts +++ b/server/src/repositories/job.repository.ts @@ -233,6 +233,9 @@ export class JobRepository { case JobName.FacialRecognitionQueueAll: { return { jobId: JobName.FacialRecognitionQueueAll }; } + case JobName.VersionCheck: { + return { jobId: JobName.VersionCheck }; + } default: { return null; } diff --git a/server/src/services/version.service.spec.ts b/server/src/services/version.service.spec.ts index 122d65d32c..2fbe7292fa 100644 --- a/server/src/services/version.service.spec.ts +++ b/server/src/services/version.service.spec.ts @@ -47,7 +47,8 @@ describe(VersionService.name, () => { expect(mocks.versionHistory.create).not.toHaveBeenCalled(); }); - it('should create a version check cron job', async () => { + it('should create a version check cron job when the database lock is acquired', async () => { + mocks.database.tryLock.mockResolvedValue(true); mocks.versionHistory.getLatest.mockResolvedValue({ id: 'version-1', createdAt: new Date(), @@ -93,6 +94,25 @@ describe(VersionService.name, () => { await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Skipped); }); + it('should skip if the last check was less than 50 seconds ago', async () => { + mocks.systemMetadata.get.mockResolvedValueOnce(null).mockResolvedValueOnce({ + checkedAt: DateTime.utc().minus({ seconds: 30 }).toISO(), + releaseVersion: '1.0.0', + }); + await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Skipped); + expect(mocks.serverInfo.getLatestRelease).not.toHaveBeenCalled(); + }); + + it('should run if the last check was more than 50 seconds ago', async () => { + mocks.systemMetadata.get.mockResolvedValueOnce(null).mockResolvedValueOnce({ + checkedAt: DateTime.utc().minus({ seconds: 60 }).toISO(), + releaseVersion: '1.0.0', + }); + mocks.serverInfo.getLatestRelease.mockResolvedValue(mockVersionResponse(serverVersion.toString())); + await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Success); + expect(mocks.serverInfo.getLatestRelease).toHaveBeenCalled(); + }); + it('should run and notify if a new version is available', async () => { mocks.serverInfo.getLatestRelease.mockResolvedValue(mockVersionResponse('v100.0.0')); await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Success); diff --git a/server/src/services/version.service.ts b/server/src/services/version.service.ts index 75ad93d4a3..ce6d6d7a6f 100644 --- a/server/src/services/version.service.ts +++ b/server/src/services/version.service.ts @@ -4,7 +4,7 @@ import semver, { SemVer } from 'semver'; import { serverVersion } from 'src/constants'; import { OnEvent, OnJob } from 'src/decorators'; import { ReleaseNotification, ServerVersionResponseDto } from 'src/dtos/server.dto'; -import { CronJob, DatabaseLock, JobName, JobStatus, QueueName, SystemMetadataKey } from 'src/enum'; +import { CronJob, DatabaseLock, ImmichWorker, JobName, JobStatus, QueueName, SystemMetadataKey } from 'src/enum'; import { ArgOf } from 'src/repositories/event.repository'; import { BaseService } from 'src/services/base.service'; import { VersionCheckMetadata } from 'src/types'; @@ -21,18 +21,21 @@ const asNotification = ({ checkedAt, releaseVersion }: VersionCheckMetadata): Re @Injectable() export class VersionService extends BaseService { - @OnEvent({ name: 'AppBootstrap' }) + @OnEvent({ name: 'AppBootstrap', workers: [ImmichWorker.Microservices] }) async onBootstrap(): Promise { - await this.handleVersionCheck(); + const hasLock = await this.databaseRepository.tryLock(DatabaseLock.VersionCheck); + if (hasLock) { + await this.handleVersionCheck(); - const randomMinute = Math.floor(Math.random() * 60); - const expression = `${randomMinute} * * * *`; - this.logger.debug(`Scheduling version check for cron ${expression}`); - this.cronRepository.create({ - name: CronJob.VersionCheck, - expression, - onTick: () => handlePromiseError(this.handleQueueVersionCheck(), this.logger), - }); + const randomMinute = Math.floor(Math.random() * 60); + const expression = `${randomMinute} * * * *`; + this.logger.debug(`Scheduling version check for cron ${expression}`); + this.cronRepository.create({ + name: CronJob.VersionCheck, + expression, + onTick: () => handlePromiseError(this.handleQueueVersionCheck(), this.logger), + }); + } await this.databaseRepository.withLock(DatabaseLock.VersionHistory, async () => { const previous = await this.versionRepository.getLatest(); @@ -86,6 +89,15 @@ export class VersionService extends BaseService { return JobStatus.Skipped; } + const versionCheck = await this.systemMetadataRepository.get(SystemMetadataKey.VersionCheckState); + if (versionCheck?.checkedAt) { + const lastUpdate = DateTime.fromISO(versionCheck.checkedAt); + const elapsedTime = DateTime.now().diff(lastUpdate).as('seconds'); + if (elapsedTime < 50) { + return JobStatus.Skipped; + } + } + const { version: releaseVersion, published_at: publishedAt } = await this.serverInfoRepository.getLatestRelease(); const metadata: VersionCheckMetadata = { checkedAt: DateTime.utc().toISO(), releaseVersion }; From eada66298198a62ae74b3112150fad002dc999fc Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Mon, 13 Apr 2026 16:25:01 +0200 Subject: [PATCH 155/156] chore(web): update translations (#27589) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/da/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/de_CH/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/eo/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/hr/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/id/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/ko/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/lt/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/vi/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/yue_Hant/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/ Translation: Immich/immich Co-authored-by: Aliyss Snow Co-authored-by: Bannawat Thongbai Co-authored-by: Carlo Beltrame Co-authored-by: Dawnsink Co-authored-by: Edmundas Co-authored-by: Happy <59247878+happy2452354@users.noreply.github.com> Co-authored-by: Jeppe Nellemann Co-authored-by: Linerly Co-authored-by: Link Notig Co-authored-by: Mees Frensel Co-authored-by: Mārtiņš Bruņenieks Co-authored-by: Osama Co-authored-by: PPNplus Co-authored-by: Tim Morley Co-authored-by: UDP Co-authored-by: User 123456789 Co-authored-by: Volodymyr Sakharov Co-authored-by: Vykintas Vyšniauskas Co-authored-by: WellsTsai Co-authored-by: brainheart95 Co-authored-by: dvbthien Co-authored-by: 이찬웅 --- i18n/ar.json | 16 ++-- i18n/da.json | 5 + i18n/de_CH.json | 222 ++++++++++++++++++++++----------------------- i18n/eo.json | 33 ++++++- i18n/hr.json | 14 ++- i18n/id.json | 4 + i18n/ko.json | 2 + i18n/lt.json | 6 +- i18n/lv.json | 7 ++ i18n/nl.json | 52 +++++------ i18n/pl.json | 4 +- i18n/th.json | 44 +++++---- i18n/uk.json | 4 + i18n/vi.json | 56 ++++++------ i18n/yue_Hant.json | 2 + i18n/zh_Hans.json | 4 +- i18n/zh_Hant.json | 162 +++++++++++++++++---------------- 17 files changed, 360 insertions(+), 277 deletions(-) diff --git a/i18n/ar.json b/i18n/ar.json index c6899c61fc..fe0b9d072c 100644 --- a/i18n/ar.json +++ b/i18n/ar.json @@ -3,7 +3,7 @@ "account": "حساب", "account_settings": "إعدادات الحساب", "acknowledge": "أُدرك ذلك", - "action": "عملية", + "action": "إجراء", "action_common_update": "تحديث", "action_description": "مجموعة من الفعاليات التي ستنفذ على الأصول التي تم تصفيتها", "actions": "عمليات", @@ -61,8 +61,8 @@ "backup_onboarding_1_description": "نسخة خارج الموقع في موقع آخر.", "backup_onboarding_2_description": "نسخ محلية على أجهزة مختلفة. يشمل ذلك الملفات الرئيسية ونسخة احتياطية محلية منها.", "backup_onboarding_3_description": "إجمالي نُسخ بياناتك، بما في ذلك الملفات الأصلية. يشمل ذلك نسخةً واحدةً خارج الموقع ونسختين محليتين.", - "backup_onboarding_description": "يُنصح باتباع استراتيجية النسخ الاحتياطي 3-2-1 لحماية بياناتك. احتفظ بنسخ احتياطية من صورك/فيديوهاتك المحمّلة، بالإضافة إلى قاعدة بيانات Immich، لضمان حل نسخ احتياطي شامل.", - "backup_onboarding_footer": "لمزيد من المعلومات حول النسخ الاحتياطي لـ Immich، يرجى الرجوع إلى التعليمات .", + "backup_onboarding_description": "يُنصح باتباع استراتيجية النسخ الاحتياطي 3-2- 1 لحماية بياناتك. احتفظ بنسخ احتياطية من صورك/فيديوهاتك المحمّلة، بالإضافة إلى قاعدة بيانات Immich، لضمان حل نسخ احتياطي شامل.", + "backup_onboarding_footer": "لمزيد من المعلومات حول النسخ الاحتياطي لـ Immich، يرجى الرجوع إلى الوثائق.", "backup_onboarding_parts_title": "يتضمن النسخ الاحتياطي 3-2-1 ما يلي:", "backup_onboarding_title": "النسخ الاحتياطية", "backup_settings": "إعدادات تفريغ قاعدة البيانات", @@ -333,7 +333,7 @@ "storage_template_migration_description": "قم بتطبيق القالب الحالي {template} على المحتويات التي تم رفعها سابقًا", "storage_template_migration_info": "تغييرات النموذج الخزني ستغير جميع الصيغ الى احرف صغيرة. تغييرات النموذج ستنطبق فقط على المحتويات الجديدة. لتطبيق النموذج على المحتويات التي تم رفعها سابقًا، قم بتشغيل {job}.", "storage_template_migration_job": "وظيفة تهجير قالب التخزين", - "storage_template_more_details": "لمزيد من التفاصيل حول هذه الميزة، يرجى الرجوع إلى Storage Template وimplications", + "storage_template_more_details": "لمزيد من التفاصيل حول هذه الميزة، يرجى الرجوع إلى Storage Template و implications.", "storage_template_onboarding_description_v2": "عند التفعيل. هذه الخاصية ستقوم بالترتيب التلقائي للملفات بناء على نموذج معرف من قبل المستخدم. رجاء اطلع على التوثيق.", "storage_template_path_length": "الحد التقريبي لطول المسار: {length, number}/{limit, number}", "storage_template_settings": "قالب التخزين", @@ -372,7 +372,7 @@ "transcoding_audio_codec": "كود الصوت", "transcoding_audio_codec_description": "Opus هو الخيار ذو أعلى جودة، ولكنه يتمتع بتوافق أقل مع الأجهزة أو البرمجيات القديمة.", "transcoding_bitrate_description": "مقاطع الفيديو التي يتجاوز معدل البت أقصى قيمة أو التي لا تكون في تنسيق مقبول", - "transcoding_codecs_learn_more": "لمعرفة المزيد حول المصطلحات المستخدمة هنا، يرجى الرجوع إلى وثائق FFmpeg للH.264 codec, HEVC codec and VP9 codec.", + "transcoding_codecs_learn_more": "لمعرفة المزيد حول المصطلحات المستخدمة هنا، يرجى الرجوع إلى وثائق FFmpeg لـ H.264 codec، و HEVC codec و VP9 codec.", "transcoding_constant_quality_mode": "وضع الجودة الثابتة", "transcoding_constant_quality_mode_description": "ICQ أفضل من CQP، ولكن بعض أجهزة عتاد التسريع لا تدعم هذا الوضع. تعيين هذا الخيار يسجعل الأفضلية للوضع المحدد عند استخدام الترميز بناءً على الجودة. يتم تجاهله بواسطة NVENC لأنه لا يدعم ICQ.", "transcoding_constant_rate_factor": "عامل معدل الجودة الثابت (-crf)", @@ -2392,7 +2392,7 @@ "view_name": "عرض", "view_next_asset": "عرض المحتوى التالي", "view_previous_asset": "عرض المحتوى السابق", - "view_qr_code": "­عرض رمز الاستجابة السريعة", + "view_qr_code": "عرض رمز الاستجابة السريعة", "view_similar_photos": "عرض صور مشابهة", "view_stack": "عرض التكديس", "view_user": "عرض المستخدم", @@ -2411,14 +2411,14 @@ "welcome_to_immich": "مرحباً بك في Immich", "width": "عُرض", "wifi_name": "اسم شبكة Wi-Fi", - "workflow_delete_prompt": "هل أنت متأكد من حذف سير العمل هذا؟", + "workflow_delete_prompt": "متأكد من حذف سير العمل هذا؟", "workflow_deleted": "تم حذف سير العمل", "workflow_description": "وصف سير العمل", "workflow_info": "معلومات سير العمل", "workflow_json": "ملف JSON لسير العمل", "workflow_json_help": "قم بتعديل إعدادات سير العمل بصيغة JSON. ستتم مزامنة التغييرات مع أداة الإنشاء المرئية.", "workflow_name": "اسم سير العمل", - "workflow_navigation_prompt": "هل انت متاكد من المغادرة بدون حفظ التغييرات؟", + "workflow_navigation_prompt": "متاكد من المغادرة بدون حفظ التغييرات؟", "workflow_summary": "ملخص سير العمل", "workflow_update_success": "تم تحديث سير العمل بنجاح", "workflow_updated": "تم تحديث سير العمل", diff --git a/i18n/da.json b/i18n/da.json index ba186826fd..7628be0f4c 100644 --- a/i18n/da.json +++ b/i18n/da.json @@ -849,9 +849,12 @@ "create_link_to_share": "Opret link for at dele", "create_link_to_share_description": "Tillad alle med linket at se de(t) valgte billede(r)", "create_new": "OPRET NY", + "create_new_face": "Opret nyt ansigt", "create_new_person": "Opret ny person", "create_new_person_hint": "Tildel valgte aktiver til en ny person", "create_new_user": "Opret ny bruger", + "create_person": "Opret person", + "create_person_subtitle": "Tilføj et navn til det valgte ansigt for at oprette og tagge den nye person", "create_shared_album_page_share_add_assets": "TILFØJ ELEMENT", "create_shared_album_page_share_select_photos": "Vælg Billeder", "create_shared_link": "Opret delt link", @@ -892,6 +895,7 @@ "day": "Dag", "days": "Dage", "deduplicate_all": "Dedubliker alle", + "default_locale": "Standard sprog", "default_locale_description": "Formatér datoer og tal baseret på din browsers landestandard", "delete": "Slet", "delete_action_confirmation_message": "Er du sikker på, at du vil slette dette objekt? Denne handling vil flytte objektet til serverens papirkurv, og vil spørge dig, om du vil slette den lokalt", @@ -2213,6 +2217,7 @@ "tag": "Tag", "tag_assets": "Tag mediefiler", "tag_created": "Oprettet tag: {tag}", + "tag_face": "Tag ansigt", "tag_feature_description": "Gennemse billeder og videoer grupperet efter logiske tag-emner", "tag_not_found_question": "Kan du ikke finde et tag? Opret et nyt tag.", "tag_people": "Tag personer", diff --git a/i18n/de_CH.json b/i18n/de_CH.json index 5d25d2a142..f4fd0c59de 100644 --- a/i18n/de_CH.json +++ b/i18n/de_CH.json @@ -1,132 +1,132 @@ { "about": "Über", "account": "Konto", - "account_settings": "Konto Istelligä", - "acknowledge": "Bestätige", + "account_settings": "Konto Einstellungen", + "acknowledge": "Bestätigä", "action": "Aktion", "action_common_update": "Update", - "action_description": "Es paar Aktione, wo a de gfilterete Assets usgführt wärde sölled", - "actions": "Aktione", + "action_description": "Aktionä, wo uf de gefilterti Mediä ausgführt werdä solled", + "actions": "Aktionen", "active": "Aktiv", - "active_count": "Aktivi: {count}", + "active_count": "Aktiv: {count}", "activity": "Aktivität", - "activity_changed": "Aktivität isch {enabled, select, true {aktiviert} other {deaktiviert}}", - "add": "Hinzuefüegä", - "add_a_description": "Beschriibig hinzuefüege", - "add_a_location": "Standort hinzuefüege", - "add_a_name": "Name hinzuefüege", - "add_a_title": "Titel hinzuefüege", - "add_action": "Aktion hinzuefüege", - "add_action_description": "Aklicke um en Aktion dure zfüehre", - "add_assets": "Assets hinzufüege", - "add_birthday": "Geburtstag hinzuefüege", + "activity_changed": "Aktivität ist {enabled, select, true {aktiviert} other {deaktiviert}}", + "add": "Hinzuefüge", + "add_a_description": "Beschreibung hinzufügen", + "add_a_location": "Standort hinzuefügä", + "add_a_name": "Namä hinzefügä", + "add_a_title": "Titel hinzufeügä", + "add_action": "Aktion hinzuefügä", + "add_action_description": "Klick do zum e Aktion hinzuefüge", + "add_assets": "Mediä hinzuefüge", + "add_birthday": "Geburtstag hinzuefüge", "add_endpoint": "Endpunkt hinzuefüge", - "add_exclusion_pattern": "Uuschlussmuster hinzuefüege", - "add_filter": "Filter hinzuefüge", - "add_filter_description": "Klicke, um e Filterbedingig hinzuezfüege", - "add_location": "Standort hinzuefüege", - "add_more_users": "Meh Benutzer hinzuefüege", - "add_partner": "Partner hinzuefüege", - "add_path": "Pfad hinzuefüege", - "add_photos": "Föteli hinzuefüege", - "add_tag": "Tag hinzuefüege", - "add_to": "Hinzuefüege zu …", - "add_to_album": "Zum Album hinzuefüege", - "add_to_album_bottom_sheet_added": "Zu {album} hinzuegfüegt", - "add_to_album_bottom_sheet_already_exists": "Scho in {album}", - "add_to_album_bottom_sheet_some_local_assets": "Es hend es paar lokali Dateie nöd chöne im Album hinzuegfüegt werde", - "add_to_album_toggle": "Uuswahl umschalte für {album}", - "add_to_albums": "Zu Albe hinzuefüege", - "add_to_albums_count": "Zu Albe hinzuefüege ({count})", - "add_to_bottom_bar": "Hinzuefüege zu", - "add_to_shared_album": "Zum teilte Album hinzuefüege", - "add_upload_to_stack": "Upload zum Stack hinzuefüege", - "add_url": "URL hinzuefüege", - "add_workflow_step": "Workflow-Schritt hinzuefüege", - "added_to_archive": "Is Archiv verschobe", - "added_to_favorites": "Zu dine Favoritä hinzuegfüegt", - "added_to_favorites_count": "{count, number} zu Favorite hinzuegfüegt", + "add_exclusion_pattern": "Ausschlussmuster hinzufügen", + "add_filter": "Filter hinzufügen", + "add_filter_description": "Klicke hier um eine Filterbedingung hinzuzufügen", + "add_location": "Standort hinzufügen", + "add_more_users": "Mehr Benutzer hinzufügen", + "add_partner": "Partner hinzufügen", + "add_path": "Pfad hinzufügen", + "add_photos": "Fotos hinzufügen", + "add_tag": "Tag hinzufügen", + "add_to": "Hinzufügen zu…", + "add_to_album": "Zu Album hinzufügen", + "add_to_album_bottom_sheet_added": "Zu {album} hinzugefügt", + "add_to_album_bottom_sheet_already_exists": "Bereits in {album}", + "add_to_album_bottom_sheet_some_local_assets": "Einige lokale Dateien konnten nicht zum Album hinzugefügt werden", + "add_to_album_toggle": "Auswahl umschalten für {album}", + "add_to_albums": "Zu Alben hinzufügen", + "add_to_albums_count": "Zu Alben hinzufügen ({count})", + "add_to_bottom_bar": "Hinzufügen zu", + "add_to_shared_album": "Zu geteiltem Album hinzufügen", + "add_upload_to_stack": "Upload zum Stapel hinzufügen", + "add_url": "URL hinzufügen", + "add_workflow_step": "Workflow-Schritt hinzufügen", + "added_to_archive": "Zum Archiv hinzugefügt", + "added_to_favorites": "Zu Favoriten hinzugefügt", + "added_to_favorites_count": "{count, number} zu Favoriten hinzugefügt", "admin": { - "add_exclusion_pattern_description": "Uusschlussmuster hinzuefüge. Platzhalter, wie *, **, und ? wärded understützt. Zum all Dateie i eim Verzeichnis namens „Raw\" ignoriere, „**/Raw/**“ verwände. Zum all Dateien ignorieren, wo uf „.tif“ änded, „**/*.tif“ verwände. Zum en absolute Pfad ignoriere, „/pfad/zum/ignoriere/**“ verwände.", - "admin_user": "Admin Benutzer", - "asset_offline_description": "Die Datei vonere externe Bibliothek isch nümme uf de Festplatte und isch in Papierchorb verschobe worde. Falls die Datei innerhalb vo de Bibliothek verschoben worde isch, überprüf dini Ziitleiste uf die neui entsprechendi Datei. Zum die Datei wiederherstelle, stell bitte sicher, dass Immich uf de unde stehendi Dateipfad chan zuegriife und scann d'Bibliothek.", - "authentication_settings": "Authentifizierigs Iistellige", - "authentication_settings_description": "Passwort, OAuth und anderi Authentifizierigseinstellige verwalte", - "authentication_settings_disable_all": "Bisch sicher, dass du alli Login-Methodä wotsch deaktivierä? S Login isch denn komplett deaktiviert.", - "authentication_settings_reenable": "Bruuch ein Server-Befehl zum reaktiviere.", - "background_task_job": "Hintergrund Ufgabä", - "backup_database": "Datenbank-Dump aalege", - "backup_database_enable_description": "Datenbank-Dumps aktiviere", - "backup_keep_last_amount": "Aazahl vo de vorherige Dumps, wo bhalte werde sölle", - "backup_onboarding_1_description": "Offsite-Kopie i dä Cloud oder amene andere physische Standort.", - "backup_onboarding_2_description": "Lokali Kopie uf verschiedene Grät. Das beinhaltet d Hauptdateie und e lokali Sicherig vo dene Dateie.", - "backup_onboarding_3_description": "Total aazahl vo dine Dateikopie, inklusiv d Originaldateie. Das beinhaltet 1 Offsite-Kopie und 2 lokali Kopie.", - "backup_onboarding_description": "E 3-2-1-Backup-Strategie wird empfohle, zum dini Dateie z schütze. Du söttsch sowohl Kopie vo dine ufgeladene Fotos/Videos wie au d Immich-Datenbank bhalte, für e rundum sauberi Backup-Lösig.", - "backup_onboarding_footer": "Für meh Infos zum Backup vo Immich lueg bitte i d Dokumentation.", - "backup_onboarding_parts_title": "Es 3-2-1-Backup beinhaltet:", + "add_exclusion_pattern_description": "Ausschlussmuster hinzufügen. Platzhalter, wie *, **, und ? werden unterstützt. Um alle Dateien in einem Verzeichnis namens „Raw“ zu ignorieren, „**/Raw/**“ verwenden. Um alle Dateien zu ignorieren, die auf „.tif“ enden, „**/*.tif“ verwenden. Um einen absoluten Pfad zu ignorieren, „/pfad/zum/ignorieren/**“ verwenden.", + "admin_user": "Administrator", + "asset_offline_description": "Diese Datei einer externen Bibliothek befindet sich nicht mehr auf der Festplatte und wurde in den Papierkorb verschoben. Falls die Datei innerhalb der Bibliothek verschoben wurde, überprüfe deine Zeitleiste auf die neue entsprechende Datei. Um diese Datei wiederherzustellen, stelle bitte sicher, dass Immich auf den unten stehenden Dateipfad zugreifen kann und scanne die Bibliothek.", + "authentication_settings": "Authentifizierungseinstellungen", + "authentication_settings_description": "Passwort-, OAuth- und andere Authentifizierungseinstellungen verwalten", + "authentication_settings_disable_all": "Bist du sicher, dass du alle Loginmethoden deaktivieren willst? Die Anmeldung wird vollständig deaktiviert.", + "authentication_settings_reenable": "Nutze einen Server-Befehl zur Reaktivierung.", + "background_task_job": "Hintergrundaufgaben", + "backup_database": "Datenbanksicherung erstellen", + "backup_database_enable_description": "Datenbank regelmässig sichern", + "backup_keep_last_amount": "Anzahl der aufzubewahrenden früheren Sicherungen", + "backup_onboarding_1_description": "Offsite-Kopie in der Cloud oder an einem anderen physischen Ort.", + "backup_onboarding_2_description": "lokale Kopien auf verschiedenen Geräten. Dazu gehören die Hauptdateien und eine lokale Sicherung dieser Dateien.", + "backup_onboarding_3_description": "Kopien deiner Daten inklusive Originaldateien. Dies umfasst 1 Kopie an einem anderen Ort und 2 lokale Kopien.", + "backup_onboarding_description": "Eine 3-2-1 Sicherungsstrategie wird empfohlen, um deine Daten zu schützen. Du solltest sowohl Kopien deiner hochgeladenen Fotos/Videos als auch der Immich-Datenbank aufbewahren, um eine umfassende Sicherungslösung zu haben.", + "backup_onboarding_footer": "Weitere Informationen zum Sichern von Immich findest du in der Dokumentation.", + "backup_onboarding_parts_title": "Eine 3-2-1-Sicherung umfasst:", "backup_onboarding_title": "Backups", - "backup_settings": "Iistellige für Datenbank-Dumps", - "backup_settings_description": "Datenbank-Dump-Iistellige verwalte.", - "cleared_jobs": "Jobs glöscht für: {job}", - "config_set_by_file": "D Konfiguration isch aktuell dur e Konfigurationsdatei gsetzt", - "confirm_delete_library": "Bisch sicher, dass du d Bibliothek {library} wotsch lösche?", - "confirm_delete_library_assets": "Bisch sicher, dass du die Bibliothek wotsch lösche? Das löscht {count, plural, one {# enthaltenes Asset} other {alli # enthaltene Assets}} us Immich und chan nöd rückgängig gmacht werde. D Dateie bliibed uf em Dateträger.", - "confirm_email_below": "Zum bestätige bitte \"{email}\" une iitippe", - "confirm_reprocess_all_faces": "Bisch sicher, dass du alli Gsichter neu verarbeite wotsch? Däbii werde au benannti Persone glöscht.", - "confirm_user_password_reset": "Bisch sicher, dass du s Passwort für {user} möchtisch zruggsetze?", - "confirm_user_pin_code_reset": "Bisch sicher, dass du de PIN-Code vo {user} möchtisch zruggsetze?", - "copy_config_to_clipboard_description": "Kopier die aktuelli Systemkonfiguration als JSON-Objekt i d'Zwüschenablage", - "create_job": "Uufgabe erstelle", - "cron_expression": "Cron-Ziitagabe", - "cron_expression_description": "Setz s Scanintervall im Cron-Format. Hilf mit däm Format bütet z. B. der Crontab Guru", - "cron_expression_presets": "Vorlage für Cron-Uusdruck", - "disable_login": "Login deaktiviere", - "duplicate_detection_job_description": "Die Uufgab füehrt s maschinelle Lärne für jedi Datei us, zum Duplikat finde. Die Uufgabe berueht uf de intelligente Suechi", - "exclusion_pattern_description": "Mit Uusschlussmuster chönnd Dateie und Ordner bim Scanne vo dinere Bibliothek ignoriert wärde. Das isch nützlich, wenn du Ordner häsch, wo Dateien drin händ, wo d nöd wotsch importiere, wie z. B. RAW-Dateie.", - "export_config_as_json_description": "Lad die aktuelli Systemkonfiguration als JSON-Datei abe", - "external_libraries_page_description": "Externi Bibliothekssiite für Administratore", - "face_detection": "Gsichtserkennig", - "face_detection_description": "Die Uufgab erfasst Gsichter in Dateien dur maschinells Lerne. Bi Video wird nur d'Miniaturasicht brucht. „Aktualisiere“ verarbeitet all Dateie neu. „Zruggsetze“ setzt au no all Gsichter zrugg. „Fehlendi“ stellt nur nöd verarbeiteti Dateie in d'Warteschlange. Erfassti Gsichter wärdet zur Gsichtsidentifizierig in diWarteschlange gstellt, damit sie i bestehendi oder neui Persone z'gruppiere.", - "facial_recognition_job_description": "Die Uufgabe gruppiert im Anschluss an d'Gsichtserfassig die erfasste Gsichter zu Persone. „Zruggsetze“ gruppiert alli Gsichter neu und mit „Fehlendi“ werdet Gsichter ohni Zuordnig i d'Warteschlange gstellt.", - "failed_job_command": "Befehl {command} hät für d'Uufgabe {job} nöd funktioniert", - "force_delete_user_warning": "WARNIG: Die Aktion löscht dä Benutzer und all sini Dateie. Das chann nöd rückgängig gmacht wärde und d'Dateie chönnd nöd wiederhergstellt wärde.", + "backup_settings": "Einstellungen für Datenbanksicherung", + "backup_settings_description": "Einstellungen zur regelmässigen Sicherung der Datenbank.", + "cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}", + "config_set_by_file": "Die Konfiguration ist aktuell durch eine Konfigurationsdatei gsetzt", + "confirm_delete_library": "Bist du sicher, dass du die Bibliothek {library} löschen willst?", + "confirm_delete_library_assets": "Bist du sicher, dass du diese Bibliothek löschen willst? Dies löscht {count, plural, one {# enthaltene Datei} other {alle # enthaltenen Dateien}} aus Immich und kann nicht rückgängig gemacht werden. Die Dateien bleiben auf der Festplatte erhalten.", + "confirm_email_below": "Zum Bestätigen, tippe unten \"{email}\" ein", + "confirm_reprocess_all_faces": "Bist du sicher, dass du alle Gesichter erneut verarbeiten möchtest? Dies löscht auch alle bereits benannten Personen.", + "confirm_user_password_reset": "Bist du sicher, dass du das Passwort für {user} zurücksetzen möchtest?", + "confirm_user_pin_code_reset": "Bist du sicher, dass du den PIN-Code von {user} zurücksetzen möchtest?", + "copy_config_to_clipboard_description": "Aktuelle Systemkonfiguration als JSON-Objekt in die Zwischenablage kopieren", + "create_job": "Aufgabe erstellen", + "cron_expression": "Cron-Ausdruck", + "cron_expression_description": "Setze das Scanintervall im Cron-Format. Für mehr Informationen, siehe z. B. Crontab Guru", + "cron_expression_presets": "Vorlagen für Cron-Ausdrücke", + "disable_login": "Login deaktivieren", + "duplicate_detection_job_description": "Verwendet maschinelles Lernen auf den Dateien, um Duplikate zu finden. Baut auf der intelligenten Suche auf", + "exclusion_pattern_description": "Mit Ausschlussmustern können Dateien und Ordner beim Scannen deiner Bibliothek ignoriert werden. Dies ist nützlich, wenn du Ordner hast, die Dateien enthalten, die du nicht importieren möchtest, wie z. B. RAW-Dateien.", + "export_config_as_json_description": "Aktuelle Systemkonfiguration als JSON-Datei herunterladen", + "external_libraries_page_description": "Externe Bibliotheksseite für Administratoren", + "face_detection": "Gesichtserkennung", + "face_detection_description": "Diese Aufgabe erkennt mit maschinellem Lernen Gesichter in Dateien. Bei Videos wird nur das Vorschaubild verwendet. „Aktualisieren“ verarbeitet alle Dateien neu. „Zurücksetzen“ setzt zusätzlich alle Gesichter zurück. „Fehlende“ fügt nur nicht verarbeitete Dateien in die Warteschlange ein. Erfasste Gesichter werden zur Gesichtsidentifizierung in die Warteschlange eingefügt, um sie in bestehende oder neue Personen zu gruppieren.", + "facial_recognition_job_description": "Diese Aufgabe gruppiert im Anschluss an die Gesichtserkennung die erkannten Gesichter zu Personen. „Zurücksetzen“ gruppiert alle Gesichter neu, während „Fehlende“ Gesichter ohne Zuordnung in die Warteschlange stellt.", + "failed_job_command": "Befehl {command} ist für Aufgabe {job} fehlgeschlagen", + "force_delete_user_warning": "WARNUNG: Diese Aktion löscht sofort den Benutzer und all seine Dateien. Dies kann nicht rückgängig gemacht werden und die Dateien können nicht wiederhergestellt werden.", "image_format": "Format", - "image_format_description": "WebP erzeugt chlineri Dateie we JPEG, isch aber es bitz langsamer i de Erstellig.", - "image_fullsize_description": "Hochuflösends Bild mit glöschte Metadate, wo bim Zoome brucht wird", - "image_fullsize_enabled": "Hochuflösendi Vorschaubilder aktiviere", - "image_fullsize_enabled_description": "Generiere hochauflösende Vorschaubilder in Originalauflösung für nicht web-kompatibel Formate. Wenn \"Eingebettete Vorschau bevorzugen\" aktiviert ist, werden eingebettete Vorschaubilder direkt verwendet. Hat keinen Einfluss auf web-kompatible Formate wie JPEG.", + "image_format_description": "WebP erzeugt kleinere Dateien als JPEG, ist aber etwas langsamer in der Erstellung.", + "image_fullsize_description": "Hochauflösendes Bild mit entfernten Metadaten, das beim Zoomen verwendet wird", + "image_fullsize_enabled": "Hochauflösende Vorschaubilder aktivieren", + "image_fullsize_enabled_description": "Generiere Vorschaubilder in Originalauflösung für nicht web-kompatible Formate. Wenn \"Eingebettete Vorschau bevorzugen\" aktiviert ist, werden eingebettete Vorschaubilder direkt verwendet. Hat keinen Einfluss auf web-kompatible Formate wie JPEG.", "image_fullsize_quality_description": "Qualität der hochauflösenden Vorschaubilder von 1-100. Höher ist besser, erzeugt aber grössere Dateien.", "image_fullsize_title": "Hochauflösende Vorschaueinstellungen", "image_prefer_embedded_preview": "Eingebettete Vorschau bevorzugen", "image_prefer_embedded_preview_setting_description": "Verwende eingebettete Vorschaubilder in RAW-Fotos als Grundlage für die Bildverarbeitung, sofern diese zur Verfügung stehen. Dies kann bei einigen Bildern genauere Farben erzeugen, allerdings ist die Qualität der Vorschau kameraabhängig und das Bild kann mehr Kompressionsartefakte aufweisen.", "image_prefer_wide_gamut": "Breites Spektrum bevorzugen", - "image_prefer_wide_gamut_setting_description": "Bruuch Display P3 für Vorschaubildli. Das erhaltet d'Vitalität von Bildli mit grossem Farbruum besser. Uf alte Grät mit alte Browser chann das aber andersch uusgseh. sRGB-Bildli wärdet als sRGB bhalte zum Farbänderige vermiide.", - "image_preview_description": "Mittelgrossi Bildli ohni Metadate, bruuchts für Einzelaasichte und fürs maschinelle Lärne", - "image_preview_quality_description": "Vorschauqualität vo 1-100. Höcher isch besser, git aber grösseri Dateie und chan d'App Schwuppdizität reduziere. Z tüffi Wert chönnd s maschinelle Lärne beiträchtige.", - "image_preview_title": "Vorschauiistellige", + "image_prefer_wide_gamut_setting_description": "Display P3 (DCI-P3) für Vorschaubilder verwenden. Dadurch bleibt die Lebendigkeit von Bildern mit breiten Farbräumen besser erhalten, aber die Bilder können auf älteren Geräten mit einer älteren Browserversion etwas anders aussehen. sRGB-Bilder werden im sRGB-Format belassen, um Farbverschiebungen zu vermeiden.", + "image_preview_description": "Mittelgrosses Bild mit entfernten Metadaten, das bei der Betrachtung einer einzelnen Datei und für maschinelles Lernen verwendet wird", + "image_preview_quality_description": "Vorschauqualität von 1-100. Ein höherer Wert ist besser, erzeugt dadurch aber grössere Dateien und kann die Reaktionsfähigkeit der App beeinträchtigen. Ein niedriger Wert kann dafür aber die Qualität des maschinellen Lernens beeinträchtigen.", + "image_preview_title": "Vorschaueinstellungen", "image_progressive": "Fortlaufend", - "image_progressive_description": "Codier fortlaufendi JPEG-Bildi: Sie wärdet bim Lade aufbauend aazeiget. Das hät kei Würkig uf WebP-Bildi.", + "image_progressive_description": "JPEG-Bilder schrittweise kodieren, um ein stufenweises Laden zu ermöglichen. Dies hat keine Auswirkungen auf WebP-Bilder.", "image_quality": "Qualität", - "image_resolution": "Uuflösig", - "image_resolution_description": "Höcheri Uuflösig erhaltet meh Detail, gaht aber länger zum codiere, macht grösseri Dateie und chan d'App Schuppdizität reduziere.", - "image_settings": "Bild-Iistellige", - "image_settings_description": "Qualität und Uuflösig von erstellte Bildli verwalte", - "image_thumbnail_description": "Chlini Vorschaubildli ohni Metadate, bruuchts für Aasichte mit Gruppe vo Föteli wie i de Hauptziitachse", - "image_thumbnail_quality_description": "Vorschauqualität vo 1-100. Höcher isch besser, git aber grösseri Dateie und chan d'App Schwuppdizität reduziere.", - "image_thumbnail_title": "Iistellige für Vorschaubildli", - "import_config_from_json_description": "Systemkonfiguration importiere durs Ufelade vonere JSON-Datei", - "job_concurrency": "{job} Näbeläufigkeit", - "job_created": "Uufgab erstellt", - "job_not_concurrency_safe": "Die Uufgabe ist nöd für Paralleluusführig gmacht.", - "job_settings": "Uufgabe-Iistellige", - "job_settings_description": "Uufgabe-Näbeläufigkeit verwalte", - "jobs_over_time": "Uufgabe in ziitliche Verlauf", + "image_resolution": "Auflösung", + "image_resolution_description": "Höhere Auflösungen können mehr Details erhalten, benötigen aber mehr Zeit für die Kodierung, haben grössere Dateigrössen und können die Reaktionsfähigkeit der App beeinträchtigen.", + "image_settings": "Bildeinstellungen", + "image_settings_description": "Qualität und Auflösung der generierten Bilder verwalten", + "image_thumbnail_description": "Kleines Vorschaubild mit entfernten Metadaten, die bei der Anzeige von Sammlungen von Fotos wie der Zeitleiste verwendet wird", + "image_thumbnail_quality_description": "Qualität der Vorschaubilder von 1-100. Höher ist besser, erzeugt aber grössere Dateien und kann die Reaktionsfähigkeit der App beeinträchtigen.", + "image_thumbnail_title": "Einstellungen für Vorschaubilder", + "import_config_from_json_description": "Systemkonfiguration von hochgeladener JSON-Konfigurationsdatei importieren", + "job_concurrency": "{job} (Anzahl gleichzeitig laufende Prozesse)", + "job_created": "Aufgabe erstellt", + "job_not_concurrency_safe": "Diese Aufgabe kann nicht mehrmals parallel laufen gelassen werden.", + "job_settings": "Aufgabeneinstellungen", + "job_settings_description": "Gleichzeitige Ausführung von Aufgaben verwalten", + "jobs_over_time": "Jobs im Laufe der Zeit", "library_created": "Bibliothek erstellt: {library}", - "library_deleted": "Bibliothek glöscht", - "library_details": "Bibliotheks-Details", - "library_folder_description": "Gib en Order zum Importiere a. Dä Order mit sine Underordner wird nach Bildli und Videos durchsucht.", - "library_remove_exclusion_pattern_prompt": "Bisch sicher, dass das Uuschluss-Muster wotsch lösche?", - "library_remove_folder_prompt": "Bisch sicher, dass dä Import-Ordner wotsch lösche?", - "library_scanning": "Regelmässigi Überprüefig" + "library_deleted": "Bibliothek gelöscht", + "library_details": "Bibliotheksdetails", + "library_folder_description": "Wähle einen Ordner zum Importieren. Dieser Ordner wird inklusive Unterordnern nach Bildern und Videos durchsucht.", + "library_remove_exclusion_pattern_prompt": "Bilst du sicher, dass du dieses Ausschlussmuster entfernen möchtest?", + "library_remove_folder_prompt": "Bist du sicher, dass du diesen Import-Ordner entfernen möchtest?", + "library_scanning": "Regelmässiges Scannen" } } diff --git a/i18n/eo.json b/i18n/eo.json index 087b2dcc5e..5bc956b284 100644 --- a/i18n/eo.json +++ b/i18n/eo.json @@ -849,9 +849,12 @@ "create_link_to_share": "Krei ligilon por dividi", "create_link_to_share_description": "Permesi, ke iu ajn kun la ligilo povu vidi la elektita(j)n foto(j)n", "create_new": "KREI NOVAN", + "create_new_face": "Krei novan vizaĝon", "create_new_person": "Krei novan homon", "create_new_person_hint": "Atribui elektitajn elementojn al nova homo", "create_new_user": "Krei novan uzanton", + "create_person": "Krei homon", + "create_person_subtitle": "Aldoni nomon al la elektita vizaĝo por krei kaj etikedi novan homon", "create_shared_album_page_share_add_assets": "ALDONI ELEMENTOJN", "create_shared_album_page_share_select_photos": "Elekti fotojn", "create_shared_link": "Krei dividitan ligilon", @@ -1043,7 +1046,7 @@ "cannot_navigate_previous_asset": "Ne eblas navigi al antaŭa elemento", "cant_apply_changes": "Ne eblas apliki ŝanĝojn", "cant_change_activity": "Ne eblas {enabled, select, true {malŝalti} other {ŝalti}} tiun agon", - "cant_change_asset_favorite": "Ne eblas ŝanĝi preferaton por tiu elemento", + "cant_change_asset_favorite": "Ne eblas ŝanĝi preferon por tiu elemento", "cant_change_metadata_assets_count": "Ne eblas ŝanĝi metadatumojn de {count, plural, one {# elemento} other {# elementoj}}", "cant_get_faces": "Ne eblas trovi vizaĝojn", "cant_get_number_of_comments": "Ne eblas trovi nombron da komentoj", @@ -1074,7 +1077,18 @@ "incorrect_email_or_password": "Neĝusta retadreso aŭ pasvorto", "library_folder_already_exists": "Tiu ĉi import-vojo jam ekzistas.", "page_not_found": "Paĝo ne trovita", + "paths_validation_failed": "Evidentiĝis, ke {paths, plural, one {# vojo estas nevalida} other {# vojoj estas nevalidaj}}", + "profile_picture_transparent_pixels": "Ne eblas havi travideblaj bilderoj en profilbildo. Bonvolu zomi kaj/aŭ ŝovi la bildon al loko sen tiaj bilderoj.", + "quota_higher_than_disk_size": "Vi donis kvoton pli grandan ol la disko mem", + "something_went_wrong": "Io misis", + "unable_to_add_album_users": "Ne eblas aldoni uzantojn al la albumo", + "unable_to_add_assets_to_shared_link": "Ne eblas aldoni elementojn al la dividita ligilo", + "unable_to_add_comment": "Ne eblas aldoni komenton", "unable_to_add_exclusion_pattern": "Ne eblas aldoni skemon de ekskludo", + "unable_to_add_partners": "Ne eblas aldoni partnerojn", + "unable_to_add_remove_archive": "Ne eblas {archived, select, true {forigi elementon de} other {aldoni elementon al}} la arĥivo", + "unable_to_add_remove_favorites": "Ne eblas {favorite, select, true {aldoni elementon al} other {forigi elementon de}} preferataĵoj", + "unable_to_change_favorite": "Ne eblas ŝanĝi preferon por tiu elemento", "unable_to_create": "Ne eblis krei laborfluon", "unable_to_delete_exclusion_pattern": "Ne eblas forigi skemon de ekskludo", "unable_to_delete_workflow": "Ne eblis forigi laborfluon", @@ -1088,15 +1102,25 @@ "expand_all": "Etendi ĉiujn", "explore": "Esplori", "explorer": "Foliumilo", + "favorite": "Preferataĵo", + "favorite_action_prompt": "{count} aldonita(j) al Preferataĵoj", + "favorite_or_unfavorite_photo": "Aldoni/forigi foton al/de preferataĵoj", + "favorites": "Preferataĵoj", + "favorites_page_no_favorites": "Neniuj preferataj elementoj trovitaj", "free_up_space": "Liberigi spacon", "free_up_space_description": "Vi forigos fotojn kaj/aŭ videojn, kiuj havas savkopiojn en la servilo, por liberigi spacon en via aparato. La kopioj en la servilo restos.", "general": "Ĝeneralaj", + "home_page_favorite_err_local": "Ankoraŭ ne eblas aldoni lokajn elementojn al Preferataĵoj; ignorita(j)", + "home_page_favorite_err_partner": "Ankoraŭ ne eblas aldoni elementojn de partnero al Preferataĵoj; ignorita(j)", + "keep_favorites": "Konservi preferataĵojn", "manage_media_access_settings": "Malfermi agordaĵaron", "manage_the_app_settings": "Agordi la apon", + "map_settings_only_show_favorites": "Montri nur preferataĵojn", "missing": "Netraktitaj", "networking_subtitle": "Administri agordojn pri finpunktoj de la servilo", "no_devices": "Neniuj aprobitaj aparatoj", "no_explore_results_message": "Alŝutu pli da fotoj por esplori vian kolekton.", + "no_favorites_message": "Aldoni al Preferataĵoj por rapide retrovi viajn plej bonajn bildojn kaj videojn", "no_notifications": "Neniuj sciigoj", "no_results_description": "Provu sinonimon aŭ pli ĝeneralan ŝlosilvorton", "notification_permission_dialog_content": "Por ŝalti sciigojn, iru al Agordoj kaj elektu 'permesi'.", @@ -1106,10 +1130,14 @@ "notification_toggle_setting_description": "Ŝalti sciigojn per retmesaĝo", "notifications": "Sciigoj", "notifications_setting_description": "Administri sciigojn", + "only_favorites": "Nur preferataĵoj", "preferences_settings_subtitle": "Administri agordojn pri la apo", "purchase_settings_server_activated": "La administranto respondecas pri la ŝlosilo de aŭtentikeco por la servilo", "rating_clear": "Forviŝi pritakson", "refresh": "Denove", + "remove_from_favorites": "Forigi el preferataĵoj", + "removed_from_favorites": "Forigita(j) el preferataĵoj", + "removed_from_favorites_count": "{count, plural, other {Forigis #}} el Preferataĵoj", "rescan": "Reanalizi", "reset": "Restartigi", "reset_sqlite_clear_app_data": "Forviŝi datumojn", @@ -1127,7 +1155,10 @@ "setting_notifications_subtitle": "Redakti viajn preferojn pri sciigoj", "start_date": "Komenca dato", "start_date_before_end_date": "Komenca dato devas esti antaŭ fina dato", + "to_favorite": "Aldoni al preferataĵoj", "trigger_description": "Evento, kiu ekfunkciigas la laborfluon", + "unfavorite": "Forigi el preferataĵoj", + "unfavorite_action_prompt": "{count} forigita(j) el Preferataĵoj", "untitled_workflow": "Sentitola laborfluo", "upload_concurrency": "Nombro da samtempaj alŝutoj", "user_pin_code_settings_description": "Administri vian PIN-kodon", diff --git a/i18n/hr.json b/i18n/hr.json index 5b8f19d174..0ed46addf9 100644 --- a/i18n/hr.json +++ b/i18n/hr.json @@ -845,9 +845,12 @@ "create_link_to_share": "Izradite vezu za dijeljenje", "create_link_to_share_description": "Dopusti svakome s vezom da vidi odabrane fotografije", "create_new": "KREIRAJ NOVO", + "create_new_face": "Stvori novo lice", "create_new_person": "Stvorite novu osobu", "create_new_person_hint": "Dodijelite odabrane stavke novoj osobi", "create_new_user": "Kreiraj novog korisnika", + "create_person": "Stvori novu osobu", + "create_person_subtitle": "Dodaj ime odabranom licu kako bi stvorio i tagirao novu osobu", "create_shared_album_page_share_add_assets": "DODAJ STAVKE", "create_shared_album_page_share_select_photos": "Odaberi fotografije", "create_shared_link": "Kreiraj dijeljeni link", @@ -922,6 +925,7 @@ "deselect_all": "Poništi odabir svih", "details": "Detalji", "direction": "Smjer", + "disable": "Onesposobi", "disabled": "Onemogućeno", "disallow_edits": "Zabrani izmjene", "discord": "Discord", @@ -947,6 +951,7 @@ "download_include_embedded_motion_videos": "Ugrađeni videozapisi", "download_include_embedded_motion_videos_description": "Uključite videozapise ugrađene u fotografije s pokretom kao zasebnu datoteku", "download_notfound": "Preuzimanje nije pronađeno", + "download_original": "Preuzmi original", "download_paused": "Preuzimanje pauzirano", "download_settings": "Preuzmi", "download_settings_description": "Upravljajte postavkama vezanim uz preuzimanje stavki", @@ -956,10 +961,11 @@ "download_waiting_to_retry": "Čeka se ponovni pokušaj", "downloading": "Preuzimanje", "downloading_asset_filename": "Preuzimanje stavke {filename}", + "downloading_from_icloud": "Preuzmi s iCloud", "downloading_media": "Preuzimanje medija", "drop_files_to_upload": "Ispustite datoteke bilo gdje za prijenos", "duplicates": "Duplikati", - "duplicates_description": "Razriješite svaku grupu tako da naznačite koji su duplikati, ako ih ima", + "duplicates_description": "Razriješite svaku grupu tako da naznačite koji su duplikati, ako ih ima.", "duration": "Trajanje", "edit": "Izmjena", "edit_album": "Uredi album", @@ -987,6 +993,12 @@ "editor": "Urednik", "editor_close_without_save_prompt": "Promjene neće biti spremljene", "editor_close_without_save_title": "Zatvoriti uređivač?", + "editor_confirm_reset_all_changes": "Jeste li sigurni da želite resetirati sve opcije?", + "editor_discard_edits_confirm": "Odbaci izmjene", + "editor_discard_edits_prompt": "Imate nesačuvane izmjene. Jeste li sigurni da ih želite odbaciti?", + "editor_discard_edits_title": "Odbaci izmjene?", + "editor_rotate_left": "Rotiraj 90° u suprotnom smjeru kazaljke na satu", + "editor_rotate_right": "Rotiraj 90° u smjeru kazaljke na satu", "email": "E-pošta", "email_notifications": "Obavijesti putem e-maila", "empty_folder": "Ova mapa je prazna", diff --git a/i18n/id.json b/i18n/id.json index a6f0b649b9..f2d34116cb 100644 --- a/i18n/id.json +++ b/i18n/id.json @@ -849,9 +849,12 @@ "create_link_to_share": "Buat tautan untuk dibagikan", "create_link_to_share_description": "Biarkan siapa pun dengan tautan melihat foto yang dipilih", "create_new": "BUAT BARU", + "create_new_face": "Buat wajah baru", "create_new_person": "Buat orang baru", "create_new_person_hint": "Tetapkan aset yang dipilih ke orang yang baru", "create_new_user": "Buat pengguna baru", + "create_person": "Buat orang", + "create_person_subtitle": "Tambahkan nama pada wajah yang dipilih untuk membuat dan menandai orang baru", "create_shared_album_page_share_add_assets": "TAMBAHKAN ASET", "create_shared_album_page_share_select_photos": "Pilih Foto", "create_shared_link": "Buat tautan bersama", @@ -2214,6 +2217,7 @@ "tag": "Tag", "tag_assets": "Tag aset", "tag_created": "Tag yang dibuat: {tag}", + "tag_face": "Tandai wajah", "tag_feature_description": "Menjelajahi foto dan video yang dikelompokkan berdasarkan topik tag yang logis", "tag_not_found_question": "Tidak dapat menemukan tag? Buat tag baru.", "tag_people": "Beri Tag Orang", diff --git a/i18n/ko.json b/i18n/ko.json index 7114316134..fff2c3d10a 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -1934,6 +1934,7 @@ "search_by_filename": "파일명 또는 확장자로 검색", "search_by_filename_example": "예: IMG_1234.JPG 또는 PNG", "search_by_ocr": "OCR로 검색", + "search_by_ocr_example": "라떼", "search_camera_lens_model": "렌즈 모델 검색...", "search_camera_make": "카메라 제조사 검색...", "search_camera_model": "카메라 모델명 검색...", @@ -1997,6 +1998,7 @@ "select_all_in": "{group}의 모든 항목 선택", "select_avatar_color": "아바타 색상 선택", "select_count": "{count, plural, one {# 선택중} other {# 선택중}}", + "select_cutoff_date": "유지 기간 설정", "select_face": "얼굴 선택", "select_featured_photo": "대표 사진 선택", "select_from_computer": "컴퓨터에서 선택", diff --git a/i18n/lt.json b/i18n/lt.json index b686c37b83..b686e2526d 100644 --- a/i18n/lt.json +++ b/i18n/lt.json @@ -1215,7 +1215,7 @@ "file_name_text": "Failo pavadinimas", "file_name_with_value": "Failo pavadinimas: {file_name}", "file_size": "Failo dydis", - "filename": "Failopavadinimas", + "filename": "Failo pavadinimas", "filetype": "Failo tipas", "filter": "Filtras", "filter_description": "Tikslinių elementų filtravimo sąlygos", @@ -1390,8 +1390,8 @@ "licenses": "Licencijos", "light": "Šviesi", "light_theme": "Perjungti į šviesią temą", - "like": "Kaip", - "like_deleted": "Kaip ištrintas", + "like": "Patinka", + "like_deleted": "Patinka panaikintas", "link_motion_video": "Susieti judesio vaizdo įrašą", "link_to_docs": "Daugiau informacijos rasite dokumentacijoje.", "link_to_oauth": "Susieti su OAuth", diff --git a/i18n/lv.json b/i18n/lv.json index 8ad03da2b8..0c7776efe7 100644 --- a/i18n/lv.json +++ b/i18n/lv.json @@ -713,9 +713,11 @@ "create_link": "Izveidot saiti", "create_link_to_share": "Izveidot kopīgošanas saiti", "create_new": "IZVEIDOT JAUNU", + "create_new_face": "Izveidot jaunu seju", "create_new_person": "Izveidot jaunu personu", "create_new_person_hint": "Piesaistīt izvēlētos failus jaunai personai", "create_new_user": "Izveidot jaunu lietotāju", + "create_person": "Izveidot personu", "create_shared_album_page_share_add_assets": "PIEVIENOT AKTĪVUS", "create_shared_album_page_share_select_photos": "Fotoattēlu Izvēle", "create_user": "Izveidot lietotāju", @@ -879,6 +881,7 @@ "failed_to_update_notification_status": "Neizdevās mainīt paziņojuma statusu", "incorrect_email_or_password": "Nepareizs e-pasts vai parole", "library_folder_already_exists": "Šis importa ceļš jau pastāv.", + "page_not_found": "Lapa nav atrasta", "profile_picture_transparent_pixels": "Profila attēlos nevar būt caurspīdīgi pikseļi. Lūdzu, palielini un/vai pārvieto attēlu.", "quota_higher_than_disk_size": "Tu esi iestatījis kvotu, kas pārsniedz diska izmēru", "something_went_wrong": "Kaut kas nogāja greizi", @@ -1295,6 +1298,7 @@ "only_favorites": "Tikai izlase", "open": "Atvērt", "open_calendar": "Atvērt kalendāru", + "open_in_browser": "Atvērt pārlūkprogrammā", "open_in_map_view": "Atvērt kartes skatā", "open_in_openstreetmap": "Atvērt OpenStreetMap", "open_the_search_filters": "Atvērt meklēšanas filtrus", @@ -1455,6 +1459,7 @@ "reset_people_visibility": "Atiestatīt personu redzamību", "reset_pin_code": "Atiestatīt PIN kodu", "reset_sqlite": "Atiestatīt SQLite datubāzi", + "reset_sqlite_clear_app_data": "Notīrīt datus", "reset_to_default": "Atiestatīt noklusējuma iestatījumus", "resolve_duplicates": "Atrisināt dublēšanās gadījumus", "resolved_all_duplicates": "Visi dublikāti ir atrisināti", @@ -1705,6 +1710,7 @@ "sync_local": "Sinhronizēt lokāli", "sync_status": "Sinhronizācijas statuss", "sync_status_subtitle": "Skatīt un pārvaldīt sinhronizācijas sistēmu", + "tag_face": "Atzīmēt seju", "text_recognition": "Teksta atpazīšana", "theme": "Dizains", "theme_setting_asset_list_storage_indicator_title": "Rādīt krātuves indikatoru uz attēliem režga skatā", @@ -1833,6 +1839,7 @@ "viewer_remove_from_stack": "Noņemt no Steka", "viewer_stack_use_as_main_asset": "Izmantot kā Galveno Aktīvu", "viewer_unstack": "At-Stekot", + "visibility": "Redzamība", "visual": "Vizuāli", "visual_builder": "Vizuālais veidotājs", "waiting": "Gaida", diff --git a/i18n/nl.json b/i18n/nl.json index 951638d470..c584fc4b86 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -544,7 +544,7 @@ "appears_in": "Komt voor in", "apply_count": "Toepassen ({count, number})", "archive": "Archief", - "archive_action_prompt": "{count} item(s) toegevoegd aan het archief", + "archive_action_prompt": "{count, plural, one {# item} other {# items}} toegevoegd aan het archief", "archive_or_unarchive_photo": "Foto archiveren of uit het archief halen", "archive_page_no_archived_assets": "Geen gearchiveerde items gevonden", "archive_page_title": "Archief ({count})", @@ -593,20 +593,20 @@ "assets_cannot_be_added_to_album_count": "{count, plural, one {# item} other {# items}} konden niet aan album toegevoegd worden", "assets_cannot_be_added_to_albums": "{count, plural, one {Item kan} other {Items kunnen}} niet toegevoegd worden aan de albums", "assets_count": "{count, plural, one {# item} other {# items}}", - "assets_deleted_permanently": "{count} item(s) permanent verwijderd", - "assets_deleted_permanently_from_server": "{count} item(s) permanent verwijderd van de Immich server", + "assets_deleted_permanently": "{count, plural, one {# item} other {# items}} permanent verwijderd", + "assets_deleted_permanently_from_server": "{count, plural, one {# item} other {# items}} permanent verwijderd van de Immich server", "assets_downloaded_failed": "{count, plural, one {# bestand gedownload - {error} bestand mislukt} other {# bestanden gedownload - {error} bestanden mislukt}}", "assets_downloaded_successfully": "{count, plural, one {# bestand succesvol gedownload} other {# bestanden succesvol gedownload}}", "assets_moved_to_trash_count": "{count, plural, one {# item} other {# items}} verplaatst naar prullenbak", "assets_permanently_deleted_count": "{count, plural, one {# item} other {# items}} permanent verwijderd", "assets_removed_count": "{count, plural, one {# item} other {# items}} verwijderd", - "assets_removed_permanently_from_device": "{count} item(s) permanent verwijderd van je apparaat", + "assets_removed_permanently_from_device": "{count, plural, one {# item} other {# items}} permanent verwijderd van je apparaat", "assets_restore_confirmation": "Weet je zeker dat je alle verwijderde items wilt herstellen? Je kunt deze actie niet ongedaan maken! Offline items kunnen op deze manier niet worden hersteld.", "assets_restored_count": "{count, plural, one {# item} other {# items}} hersteld", - "assets_restored_successfully": "{count} item(s) succesvol hersteld", - "assets_trashed": "{count} item(s) naar de prullenbak verplaatst", + "assets_restored_successfully": "{count, plural, one {# item} other {# items}} succesvol hersteld", + "assets_trashed": "{count, plural, one {# item} other {# items}} naar de prullenbak verplaatst", "assets_trashed_count": "{count, plural, one {# item} other {# items}} naar prullenbak verplaatst", - "assets_trashed_from_server": "{count} item(s) naar de prullenbak verplaatst op de Immich server", + "assets_trashed_from_server": "{count, plural, one {# item} other {# items}} naar de prullenbak verplaatst op de Immich server", "assets_were_part_of_album_count": "{count, plural, one {Item was} other {Items waren}} al onderdeel van het album", "assets_were_part_of_albums_count": "{count, plural, one {Item is} other {Items zijn}} al onderdeel van de albums", "authorized_devices": "Geautoriseerde apparaten", @@ -876,7 +876,7 @@ "current_server_address": "Huidig serveradres", "custom_date": "Aangepaste datum", "custom_locale": "Aangepaste landinstelling", - "custom_locale_description": "Formatteer datums, tijden en getallen op basis van de geselecteerde taal en de regio", + "custom_locale_description": "Formatteer datums, tijden, en getallen op basis van de geselecteerde taal en regio", "custom_url": "Aangepaste URL", "cutoff_date_description": "Bewaar foto's van de laatste…", "cutoff_day": "{count, plural, one {dag} other {dagen}}", @@ -896,10 +896,10 @@ "days": "Dagen", "deduplicate_all": "Alles dedupliceren", "default_locale": "Standaard landinstelling", - "default_locale_description": "Formatteer datums en getallen op basis van de taalinstellingen van uw browser", + "default_locale_description": "Formatteer datums en getallen op basis van de taalinstellingen van je browser", "delete": "Verwijderen", "delete_action_confirmation_message": "Weet je zeker dat je dit item wilt verwijderen? Deze actie zorgt ervoor dat het item naar de prullenbak van de server wordt verplaatst en je wordt gevraagd of je deze ook lokaal wilt verwijderen", - "delete_action_prompt": "{count} item(s) verwijderd", + "delete_action_prompt": "{count} verwijderd", "delete_album": "Album verwijderen", "delete_api_key_prompt": "Weet je zeker dat je deze API-sleutel wilt verwijderen?", "delete_dialog_alert": "Deze items zullen permanent verwijderd worden van Immich en je apparaat", @@ -913,12 +913,12 @@ "delete_key": "Verwijder key", "delete_library": "Verwijder bibliotheek", "delete_link": "Verwijder link", - "delete_local_action_prompt": "{count} item(s) lokaal verwijderd", + "delete_local_action_prompt": "{count} lokaal verwijderd", "delete_local_dialog_ok_backed_up_only": "Verwijder alleen met back-up", "delete_local_dialog_ok_force": "Toch verwijderen", "delete_others": "Andere verwijderen", "delete_permanently": "Permanent verwijderen", - "delete_permanently_action_prompt": "{count} item(s) permanent verwijderd", + "delete_permanently_action_prompt": "{count} permanent verwijderd", "delete_shared_link": "Verwijder gedeelde link", "delete_shared_link_dialog_title": "Verwijder gedeelde link", "delete_tag": "Tag verwijderen", @@ -948,7 +948,7 @@ "documentation": "Documentatie", "done": "Klaar", "download": "Downloaden", - "download_action_prompt": "{count} item(s) aan het downloaden", + "download_action_prompt": "{count, plural, one {# item} other {# items}} aan het downloaden", "download_canceled": "Download geannuleerd", "download_complete": "Download voltooid", "download_enqueue": "Download in wachtrij", @@ -980,7 +980,7 @@ "edit_birthday": "Wijzig verjaardag", "edit_date": "Datum bewerken", "edit_date_and_time": "Datum en tijd bewerken", - "edit_date_and_time_action_prompt": "Datum en tijd bijgewerkt van {count} item(s)", + "edit_date_and_time_action_prompt": "Datum en tijd bijgewerkt van {count, plural, one {# item} other {# items}}", "edit_date_and_time_by_offset": "Wijzigen datum door verschuiving", "edit_date_and_time_by_offset_interval": "Nieuw datuminterval: {from}-{to}", "edit_description": "Beschrijving bewerken", @@ -990,7 +990,7 @@ "edit_key": "Key bewerken", "edit_link": "Link bewerken", "edit_location": "Locatie bewerken", - "edit_location_action_prompt": "Locatie bijgewerkt van {count} item(s)", + "edit_location_action_prompt": "Locatie bijgewerkt van {count, plural, one {# item} other {# items}}", "edit_location_dialog_title": "Locatie", "edit_name": "Naam bewerken", "edit_people": "Mensen bewerken", @@ -1203,7 +1203,7 @@ "failed_to_load_assets": "Kan items niet laden", "failed_to_load_folder": "Laden van map mislukt", "favorite": "Favoriet", - "favorite_action_prompt": "{count} item(s) toegevoegd aan je favorieten", + "favorite_action_prompt": "{count, plural, one {# item} other {# items}} toegevoegd aan je favorieten", "favorite_or_unfavorite_photo": "Foto markeren als of verwijderen uit favorieten", "favorites": "Favorieten", "favorites_page_no_favorites": "Geen favoriete items gevonden", @@ -1389,7 +1389,7 @@ "library_page_sort_title": "Albumtitel", "licenses": "Licenties", "light": "Licht", - "light_theme": "Wissel naar lichte thema", + "light_theme": "Wissel naar licht thema", "like": "Vind ik leuk", "like_deleted": "Like verwijderd", "link_motion_video": "Koppel bewegende video", @@ -1551,7 +1551,7 @@ "move_off_locked_folder": "Verplaats uit vergrendelde map", "move_to": "Verplaatsen naar", "move_to_device_trash": "Naar prullenbak van apparaat", - "move_to_lock_folder_action_prompt": "{count} item(s) toegevoegd aan de vergrendelde map", + "move_to_lock_folder_action_prompt": "{count, plural, one {# item} other {# items}} toegevoegd aan de vergrendelde map", "move_to_locked_folder": "Verplaats naar vergrendelde map", "move_to_locked_folder_confirmation": "Deze foto’s en video’s worden uit alle albums verwijderd en zijn alleen te bekijken in de vergrendelde map", "move_up": "Naar boven verplaatsen", @@ -1854,9 +1854,9 @@ "remove_custom_date_range": "Aangepast datumbereik verwijderen", "remove_deleted_assets": "Verwijder offline bestanden", "remove_from_album": "Verwijderen uit album", - "remove_from_album_action_prompt": "{count} item(s) verwijderd uit het album", + "remove_from_album_action_prompt": "{count, plural, one {# item} other {# items}} verwijderd uit het album", "remove_from_favorites": "Verwijderen uit favorieten", - "remove_from_lock_folder_action_prompt": "{count} item(s) verwijderd uit de vergrendelde map", + "remove_from_lock_folder_action_prompt": "{count, plural, one {# item} other {# items}} verwijderd uit de vergrendelde map", "remove_from_locked_folder": "Verwijder uit de vergrendelde map", "remove_from_locked_folder_confirmation": "Weet je zeker dat je deze foto's en video's uit de vergrendelde map wilt verplaatsen? Ze zijn dan weer zichtbaar in je bibliotheek.", "remove_from_shared_link": "Verwijderen uit gedeelde link", @@ -1899,7 +1899,7 @@ "resolved_all_duplicates": "Alle duplicaten opgelost", "restore": "Herstellen", "restore_all": "Herstel alle", - "restore_trash_action_prompt": "{count} item(s) teruggehaald uit de prullenbak", + "restore_trash_action_prompt": "{count, plural, one {# item} other {# items}} teruggehaald uit de prullenbak", "restore_user": "Gebruiker herstellen", "restored_asset": "Item hersteld", "resume": "Hervatten", @@ -2067,9 +2067,9 @@ "settings_saved": "Instellingen opgeslagen", "setup_pin_code": "Stel een pincode in", "share": "Delen", - "share_action_prompt": "{count} item(s) gedeeld", + "share_action_prompt": "{count, plural, one {# item} other {# items}} gedeeld", "share_add_photos": "Foto's toevoegen", - "share_assets_selected": "{count} item(s) geselecteerd", + "share_assets_selected": "{count, plural, one {# item} other {# items}} geselecteerd", "share_dialog_preparing": "Voorbereiden...", "share_link": "Link delen", "shared": "Gedeeld", @@ -2177,7 +2177,7 @@ "sort_title": "Titel", "source": "Bron", "stack": "Stapel", - "stack_action_prompt": "{count} item(s) gestapeld", + "stack_action_prompt": "{count} items gestapeld", "stack_duplicates": "Stapel duplicaten", "stack_select_one_photo": "Selecteer één primaire foto voor de stapel", "stack_selected_photos": "Geselecteerde foto's stapelen", @@ -2264,7 +2264,7 @@ "total": "Totaal", "total_usage": "Totaal gebruik", "trash": "Prullenbak", - "trash_action_prompt": "{count} item(s) verplaatst naar de prullenbak", + "trash_action_prompt": "{count, plural, one {# item} other {# items}} verplaatst naar de prullenbak", "trash_all": "Verplaats alle naar prullenbak", "trash_count": "{count, number} naar prullenbak", "trash_delete_asset": "Items naar prullenbak verplaatsen of verwijderen", @@ -2314,7 +2314,7 @@ "unselect_all_duplicates": "Deselecteer alle duplicaten", "unselect_all_in": "Deselecteer alles in {group}", "unstack": "Ontstapelen", - "unstack_action_prompt": "{count} item(s) ontstapeld", + "unstack_action_prompt": "{count} items ontstapeld", "unstacked_assets_count": "{count, plural, one {# item} other {# items}} ontstapeld", "unsupported_field_type": "Veldtype niet ondersteund", "unsupported_file_type": "Bestand {file} kan niet worden geüpload omdat het bestandstype {type} niet wordt ondersteund.", diff --git a/i18n/pl.json b/i18n/pl.json index 0f45c82e4a..98cd5296bc 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -1009,8 +1009,8 @@ "editor_edits_applied_success": "Zmiany zostały pomyślnie zastosowane", "editor_flip_horizontal": "Odwróć poziomo", "editor_flip_vertical": "Odwróć pionowo", - "editor_handle_corner": "{corner, select, top_left {Top-left} top_right {Top-right} bottom_left {Bottom-left} bottom_right {Bottom-right} other {A}} uchwyt narożny", - "editor_handle_edge": "{edge, select, top {Top} bottom {Bottom} left {Left} right {Right} other {An}} uchwyt krawędziowy", + "editor_handle_corner": "{corner, select, top_left {Górny lewy} top_right {Górny prawy} bottom_left {Dolny lewy} bottom_right {Dolny prawy} other {Jakiś}} uchwyt narożny", + "editor_handle_edge": "{edge, select, top {Górny} bottom {Dolny} left {Lewy} right {Prawy} other {Jakiś}} uchwyt krawędziowy", "editor_orientation": "Orientacja", "editor_reset_all_changes": "Zresetuj zmiany", "editor_rotate_left": "Obróć o 90° przeciwnie do ruchu wskazówek zegara", diff --git a/i18n/th.json b/i18n/th.json index d8d34d024a..f0f70638fd 100644 --- a/i18n/th.json +++ b/i18n/th.json @@ -5,6 +5,7 @@ "acknowledge": "รับทราบ", "action": "ดำเนินการ", "action_common_update": "อัปเดต", + "action_description": "ชุดการดำเนินการที่จะปฏิบัติกับรายการที่ผ่านการกรอง", "actions": "การดำเนินการ", "active": "กำลังทำงาน", "active_count": "กำลังทำงาน: {count}", @@ -16,11 +17,13 @@ "add_a_name": "เพิ่มชื่อ", "add_a_title": "เพิ่มหัวข้อ", "add_action": "เพิ่มการดำเนินการ", + "add_action_description": "คลิกเพื่อเพิ่มการดำเนินการ", "add_assets": "เพิ่มสื่อ", "add_birthday": "เพิ่มวันเกิด", "add_endpoint": "เพิ่มปลายทาง", "add_exclusion_pattern": "เพิ่มข้อยกเว้น", "add_filter": "เพิ่มตัวกรอง", + "add_filter_description": "คลิกเพื่อเพิ่มการกรอง", "add_location": "เพิ่มตำแหน่ง", "add_more_users": "เพิ่มผู้ใช้งาน", "add_partner": "เพิ่มคู่หู", @@ -32,12 +35,14 @@ "add_to_album_bottom_sheet_added": "เพิ่มไปยัง {album} แล้ว", "add_to_album_bottom_sheet_already_exists": "อยู่ใน {album} อยู่แล้ว", "add_to_album_bottom_sheet_some_local_assets": "ไฟล์บางส่วนไม่สามารถเพิ่มไปยังอัลบั้มได้", + "add_to_album_toggle": "สลับการเลือกสำหรับ {album}", "add_to_albums": "เพิ่มเข้าในอัลบั้ม", "add_to_albums_count": "เพิ่มไปยังอัลบั้ม ({count})", "add_to_bottom_bar": "เพิ่มไปยัง", "add_to_shared_album": "เพิ่มไปยังอัลบั้มที่แชร์", "add_upload_to_stack": "เพิ่มที่อัปโหลดเข้า stack", "add_url": "เพิ่ม URL", + "add_workflow_step": "เพิ่มขั้นตอนการทำงาน", "added_to_archive": "เพิ่มไปยังที่จัดเก็บถาวร", "added_to_favorites": "เพิ่มเข้ารายการโปรดแล้ว", "added_to_favorites_count": "เพิ่ม {count, number} รูปเข้ารายการโปรดแล้ว", @@ -70,6 +75,7 @@ "confirm_reprocess_all_faces": "คุณแน่ใจว่าคุณต้องการประมวลผลใบหน้าทั้งหมดใหม่? ชื่อคนจะถูกลบไปด้วย", "confirm_user_password_reset": "คุณแน่ใจว่าต้องการรีเซ็ตรหัสผ่านของ {user} หรือไม่?", "confirm_user_pin_code_reset": "คุณแน่ใจหรือไม่ว่าต้องการรีเซ็ตรหัส PIN ของ {user}", + "copy_config_to_clipboard_description": "คัดลอกการตั้งค่าระบบปัจจุบันในรูปแบบ JSON ไปยังคลิปบอร์ด", "create_job": "สร้างงาน", "cron_expression": "รูปแบบ cron", "cron_expression_description": "ตั้งช่วงเวลาในการสแกนโดยใช้รูปแบบ cron สำหรับข้อมูลเพิ่มเติมกรุณาอิง Crontab Guru", @@ -77,6 +83,7 @@ "disable_login": "ปิดการล็อกอิน", "duplicate_detection_job_description": "ใช้ machine learning กับสี่อเพื่อตรวจจับรูปภาพที่คล้ายกัน โดยใช้การค้นหาอัจฉริยะ", "exclusion_pattern_description": "ข้อยกเว้นสามารถละเว้นไฟล์และโฟลเดอร์ขณะสแกนคลังภาพของคุณ มีประโยชน์เมื่อโฟลเดอร์มีไฟล์ที่ไม่อยากนำเข้า เช่นไฟล์ RAW", + "export_config_as_json_description": "ดาวน์โหลดการตั้งค่าระบบปัจจุบันไปยังไฟล์ในรูปแบบ JSON", "external_libraries_page_description": "หน้าต่างคลังแอดมินภายนอก", "face_detection": "การตรวจจับใบหน้า", "face_detection_description": "ตรวจจับใบหน้าในสี่อโดยใช้ machine learning วิดีโอจะใช้ภาพตัวอย่างจากวิดีโอเท่านั้น \"ทั้งหมด\" จะประมวลผลสี่อทั้งหมด \"ขาดหาย\" จะประมวลผลสี่อที่ยังไม่ได้ประมวลผล ใบหน้าที่ถูกตรวจจับแล้วจะถูกเข้าคิวประมวลผลการจดจำใบหน้า เพิ่มเข้าไปในกลุ่มที่มีอยู่แล้วหรือคนใหม่", @@ -97,6 +104,8 @@ "image_preview_description": "ภาพขนาดปานกลางที่ถูกลบข้อมูลเมตา ใช้สำหรับการดูแอสเซ็ตเดี่ยวและสำหรับการเรียนรู้ของเครื่อง (Machine Learning)", "image_preview_quality_description": "คุณภาพการแสดงตัวอย่างตั้งแต่ 1-100 ยิ่งสูงยิ่งดี แต่จะทำให้ไฟล์มีขนาดใหญ่ขึ้นและอาจทำให้แอปตอบสนองช้าลง การตั้งค่าต่ำอาจส่งผลต่อคุณภาพ Machine Learning", "image_preview_title": "ตั้งค่าพรีวิว", + "image_progressive": "รูปภาพแบบโปรเกรสซีฟ", + "image_progressive_description": "เข้ารหัสรูปภาพ JPEG แบบโปรเกรสซีฟเพื่อให้แสดงผลแบบค่อยๆ ชัดขึ้นขณะโหลด ทั้งนี้จะไม่มีผลกับรูปภาพ WebP", "image_quality": "คุณภาพ", "image_resolution": "ความละเอียด", "image_resolution_description": "ความละเอียดสูกว่าสามารถเก็บรายละเอียดได้มากกว่าแต่ใช้เวลา encode นานกว่า ไฟล์ใหญ่กว่า และลดความตอบสนองของแอป", @@ -105,6 +114,7 @@ "image_thumbnail_description": "รูปขนาดย่อที่มีการลบข้อมูลเมตาด้าต้า ใช้เมื่อดูภาพถ่ายในกลุ่ม เช่น ในไทม์ไลน์หลัก", "image_thumbnail_quality_description": "คุณภาพของภาพขนาดย่อตั้งแต่ 1-100 ยิ่งสูงยิ่งดี แต่จะทำให้ไฟล์มีขนาดใหญ่ขึ้นและอาจทำให้แอปตอบสนองช้าลง", "image_thumbnail_title": "ตั้งค่า Thumbnail", + "import_config_from_json_description": "นำเข้าการตั้งค่าระบบโดยการอัปโหลดไฟล์คอนฟิก JSON", "job_concurrency": "{job} งานพร้อมกัน", "job_created": "สร้างงานเรียบร้อย", "job_not_concurrency_safe": "งานนี้ทำงานพร้อมกันแบบปลอดภัยไม่ได้", @@ -510,10 +520,10 @@ "always_keep_photos_hint": "\"เพิ่มพื้นที่ว่าง\" จะเก็บรูปภาพทั้งหมดบนอุปกรณ์นี้", "always_keep_videos_hint": "\"เพิ่มพื้นที่ว่าง\" จะเก็บวิดีโอทั้งหมดบนอุปกรณ์นี้", "anti_clockwise": "ทวนเข็มนาฬิกา", - "api_key": "API key", + "api_key": "คีย์ API", "api_key_description": "ค่านี้จะแสดงเพียงครั้งเดียว โปรดคัดลอกก่อนปิดหน้าต่าง", - "api_key_empty": "ชื่อ API Key ของคุณไม่ควรว่างเปล่า", - "api_keys": "API Key", + "api_key_empty": "ชื่อคีย์ API ของคุณไม่ควรว่างเปล่า", + "api_keys": "คีย์ API", "app_architecture_variant": "รูปแบบ (สถาปัตยกรรม)", "app_bar_signout_dialog_content": "คุณแน่ใจว่าอยากออกจากระบบ", "app_bar_signout_dialog_ok": "ใช่", @@ -867,7 +877,7 @@ "delete": "ลบออก", "delete_action_prompt": "ลบ {count} รายการแล้ว", "delete_album": "ลบอัลบั้ม", - "delete_api_key_prompt": "คุณต้องการลบ API คีย์ นี้ใช่ไหม ?", + "delete_api_key_prompt": "คุณต้องการลบคีย์ API นี้หรือไม่?", "delete_dialog_alert": "รายการดังกล่าวจะถูกลบจาก Immich และเครื่องอย่างถาวร", "delete_dialog_alert_local": "รายการดังกล่าวจะถูกลบจากเครื่องคุณอย่างถาวร แต่จะยังคงอยู่บนเซิร์ฟเวอร์ Immich", "delete_dialog_alert_local_non_backed_up": "รายการบางตัวไม่ได้ถูกสำรองบน Immich และจะถูกลบจากเครื่องคุณอย่างถาวร", @@ -1062,7 +1072,7 @@ "unable_to_connect": "ไม่สามารถเชื่อมต่อได้", "unable_to_copy_to_clipboard": "ไม่สามารถคัดลอกไปยังคลิปบอร์ดได้ ตรวจสอบให้แน่ใจว่าคุณเข้าถึงหน้าผ่านทาง https", "unable_to_create_admin_account": "ไม่สามารถสร้างบัญชีผู้ดูแลระบบได้", - "unable_to_create_api_key": "ไม่สามารถสร้าง API คีย์ ได้", + "unable_to_create_api_key": "ไม่สามารถสร้างคีย์ API", "unable_to_create_library": "ไม่สามารถสร้างคลังภาพได้", "unable_to_create_user": "ไม่สามารถสร้างผู้ใช้ได้", "unable_to_delete_album": "ไม่สามารถลบอัลบั้มได้", @@ -1089,7 +1099,7 @@ "unable_to_reassign_assets_new_person": "ไม่สามารถมอบหมาย ให้กับบุคคลใหม่ได้", "unable_to_refresh_user": "ไม่สามารถรีเฟรชผู้ใช้ได้", "unable_to_remove_album_users": "ไม่สามารถลบผู้ใช้ออกจากอัลบั้มได้", - "unable_to_remove_api_key": "ไม่สามารถลบ API Key ได้", + "unable_to_remove_api_key": "ไม่สามารถลบคีย์ API", "unable_to_remove_assets_from_shared_link": "ไม่สามารถลบออกจากลิงก์ที่แชร์ได้", "unable_to_remove_library": "ไม่สามารถลบคลังภาพได้", "unable_to_remove_partner": "ไม่สามารถลบคู่หูได้", @@ -1101,7 +1111,7 @@ "unable_to_restore_trash": "ไม่สามารถเรียกคืนถังขยะได้", "unable_to_restore_user": "ไม่สามารถเรียกคืนผู้ใช้ได้", "unable_to_save_album": "ไม่สามารถบันทึกอัลบั้มได้", - "unable_to_save_api_key": "ไม่สามารถบันทึก API คีย์ ได้", + "unable_to_save_api_key": "ไม่สามารถบันทึกคีย์ API", "unable_to_save_date_of_birth": "ไม่สามารถบันทึกวันเกิดได้", "unable_to_save_name": "ไม่สามารถบันทึกชื่อได้", "unable_to_save_profile": "ไม่สามารถบันทึกโปรไฟล์ได้", @@ -1195,7 +1205,7 @@ "geolocation_instruction_location": "คลิกบนสื่อที่มีพิกัด GPS เพื่อใช้ตำแหน่งนั้น หรือเลือกตำแหน่งจากแผนที่โดยตรง", "get_help": "ขอความช่วยเหลือ", "get_people_error": "ข้อผิดพลาดขณะดึงข้อมูลผู้คน", - "get_wifiname_error": "ไม่สามารถรับชื่อ Wi-Fi กรุณายืนยันการให้อนุญาตแอพ และยืนยันว่า Wi-Fi เชื่อมต่ออยู่", + "get_wifiname_error": "ไม่สามารถรับชื่อ Wi-Fi กรุณายืนยันการให้อนุญาตแอป และยืนยันว่าเชื่อมต่อกับเครือข่าย Wi-Fi อยู่", "getting_started": "เริ่มต้นใช้งาน", "go_back": "กลับ", "go_to_folder": "ไปที่โฟล์เดอร์", @@ -1430,7 +1440,7 @@ "manage_sharing_with_partners": "จัดการการแชร์กับคู่หู", "manage_the_app_settings": "จัดการการตั้งค่าแอป", "manage_your_account": "จัดการบัญชีของคุณ", - "manage_your_api_keys": "จัดการกุญแจ API ของคุณ", + "manage_your_api_keys": "จัดการคีย์ API ของคุณ", "manage_your_devices": "จัดการอุปกรณ์ของคุณ", "manage_your_oauth_connection": "จัดการการเชื่อมต่อ OAuth ของคุณ", "map": "แผนที่", @@ -1516,7 +1526,7 @@ "networking_subtitle": "ตั้งค่าปลายทางเซิร์ฟเวอร์", "never": "ไม่เคย", "new_album": "อัลบั้มใหม่", - "new_api_key": "สร้าง API คีย์ใหม่", + "new_api_key": "สร้างคีย์ API ใหม่", "new_date_range": "ช่วงวันที่ใหม่", "new_password": "รหัสผ่านใหม่", "new_person": "คนใหม่", @@ -1581,7 +1591,7 @@ "on_this_device": "บนอุปกรณ์นี้", "onboarding": "การเริ่มต้นใช้งาน", "onboarding_locale_description": "เลือกภาษาที่คุณต้องการ คุณสามารถเปลี่ยนได้ภายหลังในการตั้งค่า", - "onboarding_privacy_description": "ฟีเจอร์ (ตัวเลือก) ต่อไปนี้ต้องอาศัยบริการภายนอก และสามารถปิดใช้งานได้ตลอดเวลาในการตั้งค่าการ", + "onboarding_privacy_description": "คุณสมบัติ (ตัวเลือก) ต่อไปนี้ต้องอาศัยบริการภายนอก และสามารถปิดใช้งานได้ตลอดเวลาในการตั้งค่า", "onboarding_server_welcome_description": "มาตั้งค่าเซิร์ฟเวอร์ของคุณด้วยการตั้งค่าที่ใช้บ่อยกันเถอะ", "onboarding_theme_description": "เลือกธีมสี คุณสามารถเปลี่ยนแปลงได้ในภายหลังในการตั้งค่าของคุณ", "onboarding_user_welcome_description": "มาเริ่มต้นกันเถอะ!", @@ -1631,7 +1641,7 @@ "pattern": "รูปแบบ", "pause": "หยุด", "pause_memories": "หยุดดูความทรงจํา", - "paused": "หยุด", + "paused": "หยุดชั่วคราว", "pending": "กำลังรอ", "people": "ผู้คน", "people_edits_count": "{count, plural, one {# person} other {# people}} ถูกแก้ไข", @@ -1644,11 +1654,13 @@ "permanently_delete_assets_prompt": "คุณแน่ใจหรือไม่ว่าต้องการลบ {count, plural, one {this asset?} other {these # asset?}}อย่างถาวร การดำเนินการนี้จะลบ {count, plural, one {it from its} other {them from their}} อัลบั้มด้วย", "permanently_deleted_asset": "ลบสื่อถาวรแล้ว", "permanently_deleted_assets_count": "ลบ {count, plural, one {# asset} other {# assets}} เรียบร้อยแล้ว", + "permission": "สิทธิ์", + "permission_empty": "สิทธิ์ของคุณต้องไม่เว้นว่าง", "permission_onboarding_back": "กลับ", "permission_onboarding_continue_anyway": "ดำเนินการต่อ", "permission_onboarding_get_started": "เริ่มต้น", "permission_onboarding_go_to_settings": "ไปยังการตั้งค่า", - "permission_onboarding_permission_denied": "ไม่อนุญาต ตั้งค่าสิทธิ์เข้าถึงรูปภาพและวิดีโอเพื่อใช้งาน Immich", + "permission_onboarding_permission_denied": "สิทธิ์ถูกปฏิเสธ กรุณาให้สิทธิ์เข้าถึงรูปภาพและวิดีโอเพื่อใช้งาน Immich", "permission_onboarding_permission_granted": "ให้สิทธิ์สำเร็จ คุณพร้อมใช้งานแล้ว", "permission_onboarding_permission_limited": "สิทธ์จำกัด เพื่อให้ Immich สำรองข้อมูลและจัดการคลังภาพได้ ตั้งค่าสิทธิเข้าถึงรูปภาพและวิดีโอ", "permission_onboarding_request": "Immich จำเป็นจะต้องได้รับสิทธิ์ดูรูปภาพและวิดีโอ", @@ -1783,7 +1795,7 @@ "remove_photo_from_memory": "ลบรูปออกจากความทรงจำนี้", "remove_url": "ลบ URL", "remove_user": "ลบผู้ใช้", - "removed_api_key": "API คีย์ของ: {name} ถูกลบแล้ว", + "removed_api_key": "ลบคีย์ API แล้ว: {name}", "removed_from_archive": "ลบจากเก็บถาวรแล้ว", "removed_from_favorites": "ลบจากรายการโปรดแล้ว", "removed_from_favorites_count": "{count, plural, other {ถูกลบ#}} จากรายการโปรดแล้ว", @@ -1831,7 +1843,7 @@ "save": "บันทึก", "save_to_gallery": "บันทึกไปยังแกลเลอรี", "saved": "บันทึกแล้ว", - "saved_api_key": "บันทึก API คีย์ แล้ว", + "saved_api_key": "บันทึกคีย์ API แล้ว", "saved_profile": "แก้ไขโปรไฟล์สำเร็จ", "saved_settings": "บันทึกการตั้งค่าสำเร็จ", "say_something": "พูดอะไรสักอย่าง", @@ -2226,7 +2238,7 @@ "upload_status_duplicates": "รายการซ้ำ", "upload_status_errors": "ข้อผิดพลาด", "upload_status_uploaded": "อัปโหลดแล้ว", - "upload_success": "อัปโหลดสำเร็จ รีเฟรชหน้าเพื่อดูสื่อใหม่ที่อัปโหลดล่าสุด", + "upload_success": "อัปโหลดสำเร็จ รีเฟรชหน้าเพื่อดูสื่อที่อัปโหลดใหม่", "upload_to_immich": "อัปโหลดไปยัง Immich ({count})", "uploading": "กำลังอัปโหลด", "uploading_media": "กำลังอัปโหลดสื่อ", diff --git a/i18n/uk.json b/i18n/uk.json index c9ff3d568a..b2b0a01501 100644 --- a/i18n/uk.json +++ b/i18n/uk.json @@ -849,9 +849,12 @@ "create_link_to_share": "Створити посилання спільного доступу", "create_link_to_share_description": "Дати змогу будь-кому переглядати вибрані фото за посиланням", "create_new": "СТВОРИТИ НОВИЙ", + "create_new_face": "Створити нове обличчя", "create_new_person": "Створити нову людину", "create_new_person_hint": "Призначити вибрані елементи новій людині", "create_new_user": "Створити нового користувача", + "create_person": "Створити людину", + "create_person_subtitle": "Додайте ім'я до вибраного обличчя, щоб створити та позначити нову особу", "create_shared_album_page_share_add_assets": "ДОДАТИ ЕЛЕМЕНТИ", "create_shared_album_page_share_select_photos": "Вибрати фото", "create_shared_link": "Створити спільне посилання", @@ -2214,6 +2217,7 @@ "tag": "Тег", "tag_assets": "Додати теги", "tag_created": "Створено тег: {tag}", + "tag_face": "Тег обличчя", "tag_feature_description": "Перегляд фото та відео, згрупованих за логічними темами тегів", "tag_not_found_question": "Не вдається знайти тег? Створіть новий тег.", "tag_people": "Позначити людей", diff --git a/i18n/vi.json b/i18n/vi.json index fa37d05fb2..5c3ace5da0 100644 --- a/i18n/vi.json +++ b/i18n/vi.json @@ -537,10 +537,10 @@ "app_bar_signout_dialog_content": "Bạn có muốn đăng xuất?", "app_bar_signout_dialog_ok": "Có", "app_bar_signout_dialog_title": "Đăng xuất", - "app_download_links": "Liên kết tải app", - "app_settings": "App", - "app_stores": "Cửa hàng app", - "app_update_available": "Đã có bản cập nhật app", + "app_download_links": "Liên kết tải ứng dụng", + "app_settings": "Ứng dụng", + "app_stores": "Cửa hàng ứng dụng", + "app_update_available": "Đã có bản cập nhật ứng dụng", "appears_in": "Xuất hiện trong", "apply_count": "Áp dụng ({count, number})", "archive": "Lưu trữ", @@ -617,7 +617,7 @@ "back_close_deselect": "Quay lại, đóng, hoặc bỏ chọn", "background_backup_running_error": "Sao lưu nền hiện đang chạy, không thể bắt đầu sao lưu thủ công", "background_location_permission": "Quyền truy cập vị trí khi chạy nền", - "background_location_permission_content": "Để chuyển đổi mạng khi chạy ở chế độ nền, Immich *luôn* phải có quyền truy cập vị trí chính xác để có thể đọc tên mạng Wi-Fi", + "background_location_permission_content": "Để chuyển đổi mạng khi chạy ở chế độ nền, Immich phải *luôn* có quyền truy cập vị trí chính xác để có thể đọc tên mạng Wi-Fi", "background_options": "Tùy chọn nền", "backup": "Sao lưu", "backup_album_selection_page_albums_device": "Album trên thiết bị ({count})", @@ -637,8 +637,8 @@ "backup_background_service_in_progress_notification": "Đang sao lưu tệp của bạn…", "backup_background_service_upload_failure_notification": "Tải lên {filename} thất bại", "backup_controller_page_albums": "Album sao lưu", - "backup_controller_page_background_app_refresh_disabled_content": "Bật làm mới app trong nền tại Cài đặt > Cài đặt chung > Làm mới app trong nền để dùng sao lưu nền.", - "backup_controller_page_background_app_refresh_disabled_title": "Làm mới app trong nền bị vô hiệu hoá", + "backup_controller_page_background_app_refresh_disabled_content": "Bật làm mới ứng dụng trong nền tại Cài đặt > Cài đặt chung > Làm mới ứng dụng trong nền để dùng sao lưu nền.", + "backup_controller_page_background_app_refresh_disabled_title": "Làm mới ứng dụng trong nền bị vô hiệu hoá", "backup_controller_page_background_app_refresh_enable_button_text": "Đi tới cài đặt", "backup_controller_page_background_battery_info_link": "Hướng dẫn tôi", "backup_controller_page_background_battery_info_message": "Để có trải nghiệm sao lưu nền tốt nhất, vui lòng vô hiệu hóa bất kỳ tối ưu hóa pin nào đang hạn chế hoạt động nền của Immich.\n\nVì điều này phụ thuộc vào thiết bị, vui lòng tham khảo thông tin cần thiết của nhà sản xuất thiết bị của bạn.", @@ -647,7 +647,7 @@ "backup_controller_page_background_charging": "Chỉ khi đang sạc", "backup_controller_page_background_configure_error": "Cấu hình dịch vụ nền thất bại", "backup_controller_page_background_delay": "Trì hoãn sao lưu tệp mới: {duration}", - "backup_controller_page_background_description": "Bật dịch vụ nền để tự động sao lưu tệp mới mà không cần mở app", + "backup_controller_page_background_description": "Bật dịch vụ nền để tự động sao lưu tệp mới mà không cần mở ứng dụng", "backup_controller_page_background_is_off": "Sao lưu tự động trong nền đang tắt", "backup_controller_page_background_is_on": "Sao lưu tự động trong nền đang bật", "backup_controller_page_background_turn_off": "Tắt dịch vụ nền", @@ -657,7 +657,7 @@ "backup_controller_page_backup_selected": "Đã chọn: ", "backup_controller_page_backup_sub": "Ảnh và video đã sao lưu", "backup_controller_page_created": "Tạo vào: {date}", - "backup_controller_page_desc_backup": "Bật sao lưu khi app hoạt động để tự động sao lưu tệp mới lên máy chủ khi mở app.", + "backup_controller_page_desc_backup": "Bật sao lưu khi ứng dụng hoạt động để tự động sao lưu tệp mới lên máy chủ khi mở ứng dụng.", "backup_controller_page_excluded": "Đã bỏ qua: ", "backup_controller_page_failed": "Thất bại ({count})", "backup_controller_page_filename": "Tên tệp: {filename} [{size}]", @@ -668,12 +668,12 @@ "backup_controller_page_remainder_sub": "Số lượng ảnh và video đã chọn chưa được sao lưu", "backup_controller_page_server_storage": "Dung lượng máy chủ", "backup_controller_page_start_backup": "Bắt đầu sao lưu", - "backup_controller_page_status_off": "Sao lưu tự động khi app hoạt động đang tắt", - "backup_controller_page_status_on": "Sao lưu tự động khi app hoạt động đang bật", + "backup_controller_page_status_off": "Sao lưu tự động khi ứng dụng hoạt động đang tắt", + "backup_controller_page_status_on": "Sao lưu tự động khi ứng dụng hoạt động đang bật", "backup_controller_page_storage_format": "Đã dùng {used} của {total}", "backup_controller_page_to_backup": "Các album cần được sao lưu", "backup_controller_page_total_sub": "Tất cả ảnh và video không trùng lập từ các album được chọn", - "backup_controller_page_turn_off": "Tắt sao lưu khi app hoạt động", + "backup_controller_page_turn_off": "Tắt sao lưu khi ứng dụng hoạt động", "backup_controller_page_turn_on": "Bật sao lưu khi mở app", "backup_controller_page_uploading_file_info": "Thông tin tệp đang tải lên", "backup_err_only_album": "Không thể xóa album duy nhất", @@ -704,16 +704,16 @@ "bulk_trash_duplicates_confirmation": "Bạn có chắc muốn đưa {count, plural, one {# tệp trùng lặp} other {# tệp trùng lặp}} vào thùng rác? Điều này sẽ giữ lại ảnh chất lượng nhất của mỗi nhóm và đưa tất cả các bản trùng lặp khác vào thùng rác.", "buy": "Mua Immich", "cache_settings_clear_cache_button": "Xóa bộ nhớ đệm", - "cache_settings_clear_cache_button_title": "Xóa bộ nhớ đệm của app. Điều này sẽ ảnh hưởng đến hiệu suất của app đến khi bộ nhớ đệm được tạo lại.", + "cache_settings_clear_cache_button_title": "Xóa bộ nhớ đệm của ứng dụng. Điều này sẽ ảnh hưởng đến hiệu suất của ứng dụng đến khi bộ nhớ đệm được tạo lại.", "cache_settings_duplicated_assets_clear_button": "XÓA", - "cache_settings_duplicated_assets_subtitle": "Ảnh và video không được phép hiển thị trên app", + "cache_settings_duplicated_assets_subtitle": "Ảnh và video không được phép hiển thị trên ứng dụng", "cache_settings_duplicated_assets_title": "Tệp bị trùng ({count})", "cache_settings_statistics_album": "Ảnh thu nhỏ thư viện", "cache_settings_statistics_full": "Ảnh đầy đủ", "cache_settings_statistics_shared": "Ảnh thu nhỏ album chia sẻ", "cache_settings_statistics_thumbnail": "Ảnh thu nhỏ", "cache_settings_statistics_title": "Mức sử dụng bộ nhớ đệm", - "cache_settings_subtitle": "Kiểm soát hành vi bộ nhớ đệm của app Immich", + "cache_settings_subtitle": "Kiểm soát hành vi bộ nhớ đệm của Immich", "cache_settings_tile_subtitle": "Kiểm soát cách xử lý lưu trữ cục bộ", "cache_settings_tile_title": "Lưu trữ cục bộ", "cache_settings_title": "Cài đặt bộ nhớ đệm", @@ -999,8 +999,8 @@ "editor_discard_edits_confirm": "Bỏ thay đổi", "editor_discard_edits_prompt": "Bạn có những thay đổi chưa được lưu. Bạn có chắc chắn muốn hủy bỏ chúng không?", "editor_discard_edits_title": "Hủy thay đổi?", - "editor_edits_applied_error": "Lỗi khi áp dụng thay đổi", - "editor_edits_applied_success": "Thay đổi được áp dụng thành công", + "editor_edits_applied_error": "Không thể áp dụng chỉnh sửa", + "editor_edits_applied_success": "Chỉnh sửa được áp dụng thành công", "editor_flip_horizontal": "Lật ngang", "editor_flip_vertical": "Lật dọc", "editor_orientation": "Định hướng", @@ -1202,7 +1202,7 @@ "feature_photo_updated": "Đã cập nhật ảnh nổi bật", "features": "Tính năng", "features_in_development": "Tính năng đang được phát triển", - "features_setting_description": "Quản lý các tính năng app", + "features_setting_description": "Quản lý các tính năng ứng dụng", "file_name_or_extension": "Tên hoặc phần mở rộng tập tin", "file_name_text": "Tên tệp", "file_name_with_value": "Tên tệp: {file_name}", @@ -1280,7 +1280,7 @@ "home_page_delete_remote_err_local": "Tệp trên thiết bị trong lựa chọn xóa từ xa, bỏ qua", "home_page_favorite_err_local": "Không thể thích tệp trên thiết bị, bỏ qua", "home_page_favorite_err_partner": "Không thể thích tệp của người thân, bỏ qua", - "home_page_first_time_notice": "Nếu đây là lần đầu bạn dùng app, hãy chọn một album sao lưu để dòng thời gian có thể hiển thị ảnh và video của bạn", + "home_page_first_time_notice": "Nếu đây là lần đầu bạn dùng ứng dụng, hãy chọn một album sao lưu để dòng thời gian có thể hiển thị ảnh và video của bạn", "home_page_locked_error_local": "Không thể di chuyển tệp trên thiết bị đến thư mục Khóa, bỏ qua", "home_page_locked_error_partner": "Không thể di chuyển tệp của người thân đến thư mục Khóa, bỏ qua", "home_page_share_err_local": "Không thể chia sẻ tệp trên thiết bị qua liên kết, bỏ qua", @@ -1395,7 +1395,7 @@ "local_id": "ID cục bộ", "local_media_summary": "Mô tả phương tiện trên thiết bị", "local_network": "Mạng nội bộ", - "local_network_sheet_info": "App sẽ kết nối với máy chủ qua URL này khi sử dụng mạng Wi-Fi được chỉ định", + "local_network_sheet_info": "Ứng dụng sẽ kết nối với máy chủ qua URL này khi sử dụng mạng Wi-Fi được chỉ định", "location": "Địa điểm", "location_permission": "Quyền truy cập vị trí", "location_permission_content": "Để sử dụng tính năng tự động chuyển đổi, Immich cần có quyền vị trí chính xác để có thể đọc tên của mạng Wi-Fi hiện tại", @@ -1471,11 +1471,11 @@ "manage_geolocation": "Quản lý địa điểm", "manage_media_access_rationale": "Để có thể di chuyển tệp vào thùng rác và khôi phục chúng từ đó.", "manage_media_access_settings": "Mở cài đặt", - "manage_media_access_subtitle": "Cho phép app [Immich] quản lý và di chuyển tệp.", + "manage_media_access_subtitle": "Cho phép ứng dụng [Immich] quản lý và di chuyển tệp.", "manage_media_access_title": "Quản lý phương tiện", "manage_shared_links": "Quản lý liên kết chia sẻ", "manage_sharing_with_partners": "Quản lý chia sẻ với người thân", - "manage_the_app_settings": "Quản lý cài đặt app", + "manage_the_app_settings": "Quản lý cài đặt ứng dụng", "manage_your_account": "Quản lý tài khoản của bạn", "manage_your_api_keys": "Quản lý các khóa API của bạn", "manage_your_devices": "Quản lý các thiết bị đã đăng nhập của bạn", @@ -1490,7 +1490,7 @@ "map_marker_for_images": "Đánh dấu bản đồ cho ảnh chụp tại {city}, {country}", "map_marker_with_image": "Đánh dấu bản đồ với ảnh", "map_no_location_permission_content": "Cần quyền truy cập vị trí để hiển thị tệp từ vị trí hiện tại của bạn. Bạn có muốn cho phép ngay bây giờ không?", - "map_no_location_permission_title": "App không được phép truy cập vị trí", + "map_no_location_permission_title": "Ứng dụng không được phép truy cập vị trí", "map_settings": "Cài đặt bản đồ", "map_settings_dark_mode": "Chế độ tối", "map_settings_date_range_option_day": "Trong vòng 24 giờ qua", @@ -1746,7 +1746,7 @@ "play_transcoded_video": "Phát video đã chuyển mã", "please_auth_to_access": "Vui lòng xác thực để truy cập", "port": "Cổng", - "preferences_settings_subtitle": "Tùy chỉnh trải nghiệm app", + "preferences_settings_subtitle": "Tùy chỉnh trải nghiệm ứng dụng", "preferences_settings_title": "Cá nhân hóa", "preparing": "Đang chuẩn bị", "preset": "Mẫu có sẵn", @@ -1760,7 +1760,7 @@ "primary": "Chính", "privacy": "Bảo mật", "profile": "Hồ sơ", - "profile_drawer_app_logs": "Log", + "profile_drawer_app_logs": "Nhật ký", "profile_drawer_client_server_up_to_date": "Máy khách và máy chủ đã cập nhật", "profile_drawer_github": "GitHub", "profile_drawer_readonly_mode": "Đã bật chế độ chỉ-xem. Nhấn giữ ảnh đại diện người dùng để tắt.", @@ -2006,7 +2006,7 @@ "send_message": "Gửi tin nhắn", "send_welcome_email": "Gửi email chào mừng", "server_endpoint": "Địa chỉ máy chủ", - "server_info_box_app_version": "Phiên bản app", + "server_info_box_app_version": "Phiên bản ứng dụng", "server_info_box_server_url": "URL máy chủ", "server_offline": "Máy chủ ngoại tuyến", "server_online": "Phiên bản", @@ -2228,7 +2228,7 @@ "theme_setting_primary_color_title": "Màu chủ đạo", "theme_setting_system_primary_color_title": "Dùng màu hệ thống", "theme_setting_system_theme_switch": "Tự động (Giống thiết bị)", - "theme_setting_theme_subtitle": "Chọn cài đặt giao diện app", + "theme_setting_theme_subtitle": "Chọn cài đặt giao diện ứng dụng", "theme_setting_three_stage_loading_subtitle": "Tải ba giai đoạn có thể tăng tốc độ tải ảnh nhưng sẽ tốn dữ liệu mạng đáng kể", "theme_setting_three_stage_loading_title": "Bật tải ba giai đoạn", "then": "Tiếp theo", @@ -2276,7 +2276,7 @@ "troubleshoot": "Khắc phục sự cố", "type": "Loại", "unable_to_change_pin_code": "Thay đổi mã PIN thất bại", - "unable_to_check_version": "Không thể kiểm tra phiên bản app hoặc máy chủ", + "unable_to_check_version": "Không thể kiểm tra phiên bản ứng dụng hoặc máy chủ", "unable_to_setup_pin_code": "Thiết lập mã PIN thất bại", "unarchive": "Bỏ lưu trữ", "unarchive_action_prompt": "{count} đã bỏ khỏi Lưu trữ", diff --git a/i18n/yue_Hant.json b/i18n/yue_Hant.json index e0cf403712..19666b0af5 100644 --- a/i18n/yue_Hant.json +++ b/i18n/yue_Hant.json @@ -87,6 +87,7 @@ "external_libraries_page_description": "管理外部媒體庫嘅頁面", "face_detection": "人面偵測", "face_detection_description": "使用機器學習偵測項目中嘅臉孔。對於影片,只係會分析縮圖。「重新整理」會重新處理所有嘅項目;「重設」就會額外清除目前嘅臉孔資料;「加入排程」會將尚未處理嘅項目加入序列。完成「臉孔偵測」後,偵測到嘅臉孔將會加入「臉孔辨識」排程,並歸類到而家或者新嘅人物群組。", + "facial_recognition_job_description": "將偵測到嘅臉孔歸類為人物。此步驟會在臉孔偵測完成後執行。「重設」會重新對所有嘅臉孔進行分群;「加入排程」就會將未指派人物嘅臉孔加入序列。", "failed_job_command": "執行{job}任務嘅{command}指令失敗", "force_delete_user_warning": "警告:呢個會立即刪除用戶同埋佢所有嘅檔案。呢個係無法撤銷嘅動作,而且刪除嘅檔案將冇辦法復原。", "image_format": "格式", @@ -99,6 +100,7 @@ "image_prefer_embedded_preview": "偏向嵌入預覽", "image_prefer_embedded_preview_setting_description": "喺可用嘅時候將 RAW 相片中的內嵌預覽作為影像處理嘅輸入來源。雖然呢個設定可以令到部分相片嘅色彩更加準確,但預覽品質取決於相機,且影像可能會出現較多壓縮瑕疵。", "image_prefer_wide_gamut": "傾向廣色域", + "image_prefer_wide_gamut_setting_description": "使用 Display P3 製作縮圖:可以更好地保留廣色域影像嘅鮮豔度,但係喺舊裝置同舊版瀏覽器上,影像呈現嘅效果可能會有所唔同。sRGB 影像會保留為 sRGB,以避免色彩偏移。", "image_preview_description": "中等尺寸嘅圖片,用嚟檢視單一影像同埋機器學習", "image_preview_title": "預覽設定", "image_progressive": "逐步", diff --git a/i18n/zh_Hans.json b/i18n/zh_Hans.json index a59ec9cb9f..49dbce4035 100644 --- a/i18n/zh_Hans.json +++ b/i18n/zh_Hans.json @@ -1635,7 +1635,7 @@ "notifications": "通知", "notifications_setting_description": "管理通知", "oauth": "OAuth", - "obtainium_configurator": "Obtainium配置器", + "obtainium_configurator": "Obtainium 配置器", "obtainium_configurator_instructions": "使用 Obtainium 直接从 Immich 的 GitHub 发布页安装和更新 Android 应用。请创建一个 API 密钥并选择一个版本,以生成你的 Obtainium 配置链接", "ocr": "OCR", "official_immich_resources": "Immich官方资源", @@ -1710,7 +1710,7 @@ "permanent_deletion_warning_setting_description": "永久删除照片/视频时显示警告", "permanently_delete": "永久删除", "permanently_delete_assets_count": "永久删除{count, plural, one {个项目} other {个项目}}", - "permanently_delete_assets_prompt": "确定要永久删除 {count, plural, one {此项目吗?} other {这#个项目吗?}}这也会将{count, plural, one {其} other {它们}}从所属相簿中移除。", + "permanently_delete_assets_prompt": "确定要永久删除 {count, plural, one {此项目吗?} other {这 # 个项目吗?}}这也会将{count, plural, one {其} other {它们}}从所属相簿中移除。", "permanently_deleted_asset": "永久删除的项目", "permanently_deleted_assets_count": "已永久删除{count, plural, one {#个项目} other {#个项目}}", "permission": "权限", diff --git a/i18n/zh_Hant.json b/i18n/zh_Hant.json index 0140fe8bb8..00b9629264 100644 --- a/i18n/zh_Hant.json +++ b/i18n/zh_Hant.json @@ -54,7 +54,7 @@ "authentication_settings_description": "管理密碼、OAuth 與其他驗證設定", "authentication_settings_disable_all": "您確定要停用所有登入方式嗎?這將導致完全無法登入。", "authentication_settings_reenable": "如需重新啟用,請使用 伺服器指令。", - "background_task_job": "背景工作", + "background_task_job": "背景任務", "backup_database": "建立資料庫備份", "backup_database_enable_description": "啟用資料庫備份", "backup_keep_last_amount": "保留先前備份的數量", @@ -63,7 +63,7 @@ "backup_onboarding_3_description": "您資料的總備份份數,包括原始檔案在內。這包括 1 份異地備份與 2 份本機副本。", "backup_onboarding_description": "建議採用 3-2-1 備份策略 來保護您的資料。您應保留已上傳的相片/影片副本,以及 Immich 資料庫,以建立完整的備份方案。", "backup_onboarding_footer": "更多備份 Immich 資訊,請參考 說明文件。", - "backup_onboarding_parts_title": "遵從備份原則 3-2-1:", + "backup_onboarding_parts_title": "3-2-1 備份包含:", "backup_onboarding_title": "備份", "backup_settings": "資料庫備份設定", "backup_settings_description": "管理資料庫備份設定。", @@ -81,20 +81,20 @@ "cron_expression_description": "使用 Cron 格式設定掃描間隔。更多資訊請參閱 Crontab Guru", "cron_expression_presets": "Cron 表達式預設值", "disable_login": "停用登入", - "duplicate_detection_job_description": "依靠智慧搜尋。對項目執行機器學習來偵測相似圖片", + "duplicate_detection_job_description": "針對資產執行機器學習以偵測相似圖片。需依賴「智慧搜尋」功能", "exclusion_pattern_description": "排除模式可讓您在掃描媒體庫時忽略特定檔案與資料夾。若某些資料夾包含您不想匯入的檔案(例如 RAW 檔),此功能將非常有用。", "export_config_as_json_description": "將目前系統設定下載為 JSON 檔案", "external_libraries_page_description": "管理外部媒體庫頁面", "face_detection": "臉孔偵測", - "face_detection_description": "使用機器學習偵測項目中的臉孔。對於影片,僅會分析縮圖。「重新整理」會重新處理所有項目;「重設」則會額外清除目前的臉孔資料;「加入排程」會將尚未處理的項目加入序列。完成「臉孔偵測」後,偵測到的臉孔將加入「臉孔辨識」排程,並歸類至現有或新的人物群組。", - "facial_recognition_job_description": "將偵測到的臉孔歸類為人物。此步驟會在臉孔偵測完成後執行。「重設」會重新對所有臉孔進行分群;「加入排程」則會將尚未指派人物的臉孔加入序列。", + "face_detection_description": "使用機器學習偵測項目中的臉孔。對於影片,僅會分析縮圖。「重新整理」會重新處理所有項目;「重設」則會額外清除目前的臉孔資料;「加入排程」會將尚未處理的項目加入佇列。完成「臉孔偵測」後,偵測到的臉孔將加入「臉孔辨識」排程,並歸類至現有或新的人物群組。", + "facial_recognition_job_description": "將偵測到的臉孔歸類為人物。此步驟會在臉孔偵測完成後執行。「重設」會重新對所有臉孔進行分群;「加入排程」則會將尚未指派人物的臉孔加入佇列。", "failed_job_command": "{job} 任務的 {command} 指令執行失敗", "force_delete_user_warning": "警告:這將立即刪除使用者及其所有項目。此動作無法復原,且無法找回已刪除的檔案。", "image_format": "格式", "image_format_description": "WebP 能產生相對於 JPEG 更小的檔案,但編碼速度較慢。", "image_fullsize_description": "移除中繼資料的大尺寸影像,在放大圖片時使用", "image_fullsize_enabled": "啟用大尺寸影像產生", - "image_fullsize_enabled_description": "為非網頁友善格式產生大尺寸相片。啟用「偏好內嵌預覽」時,系統將直接使用內嵌預覽而不進行轉碼,不影響 JPEG 等網頁友善格式。", + "image_fullsize_enabled_description": "為非網頁相容格式產生大尺寸相片。啟用「偏好內嵌預覽」時,系統將直接使用內嵌預覽而不進行轉碼,不影響 JPEG 等網頁相容格式。", "image_fullsize_quality_description": "大尺寸影像品質,範圍為 1 到 100。數值越高品質越好,但檔案也會越大。", "image_fullsize_title": "大尺寸影像設定", "image_prefer_embedded_preview": "偏好內嵌預覽", @@ -104,14 +104,14 @@ "image_preview_description": "中等尺寸影像(不含中繼資料),用於檢視單一項目與機器學習", "image_preview_quality_description": "預覽品質範圍為 1 到 100。數值越高品質越好,但檔案也會更大,並可能降低應用程式的回應速度。設定過低的數值可能會影響機器學習的品質。", "image_preview_title": "預覽設定", - "image_progressive": "逐步", - "image_progressive_description": "對 JPEG 影像進行漸進式編碼,以實現漸進式載入顯示。這不會影響 WebP 影像。", + "image_progressive": "漸進式", + "image_progressive_description": "對 JPEG 影像進行漸進式編碼,以達成漸進式載入顯示。這不會影響 WebP 影像。", "image_quality": "品質", "image_resolution": "解析度", "image_resolution_description": "較高的解析度能保留更多細節,但編碼時間會更長、檔案大小會更大,並可能降低應用程式的回應速度。", "image_settings": "圖片設定", "image_settings_description": "管理產生的影像品質與解析度", - "image_thumbnail_description": "移除中繼資料的小型縮圖,以用於檢視大量相片時使用,例如主時間軸", + "image_thumbnail_description": "已移除中繼資料的小型縮圖,用於檢視多張相片(如主時間軸)", "image_thumbnail_quality_description": "縮圖品質範圍為 1 到 100。數值越高品質越好,但檔案也會更大,並可能降低應用程式的回應速度。", "image_thumbnail_title": "縮圖設定", "import_config_from_json_description": "透過上傳 JSON 設定檔匯入系統設定", @@ -160,7 +160,7 @@ "machine_learning_facial_recognition": "人臉辨識", "machine_learning_facial_recognition_description": "偵測、辨識並對圖片中的臉孔分類", "machine_learning_facial_recognition_model": "人臉辨識模型", - "machine_learning_facial_recognition_model_description": "模型順序由大至小排列。較大的模型速度較慢且佔用較多記憶體,但效果較佳。請注意,更換模型後必須對所有影像重新執行「臉孔偵測」任務。", + "machine_learning_facial_recognition_model_description": "模型順序由大至小排列。較大的模型速度較慢且佔用較多記憶體,但結果較佳。請注意,更換模型後必須對所有影像重新執行「臉孔偵測」任務。", "machine_learning_facial_recognition_setting": "啟用人臉辨識", "machine_learning_facial_recognition_setting_description": "若停用,影像將不會進行人臉辨識編碼,且「探索」頁面的「人物」區塊將不會顯示任何內容。", "machine_learning_max_detection_distance": "偵測距離上限", @@ -173,7 +173,7 @@ "machine_learning_min_recognized_faces_description": "建立新人物所需的最低已辨識臉孔數量。提高此數值可讓臉孔辨識更精確,但同時會增加臉孔未被指派給任何人物的可能性。", "machine_learning_ocr": "文字辨識(OCR)", "machine_learning_ocr_description": "使用機器學習辨識影像中的文字", - "machine_learning_ocr_enabled": "啟用OCR", + "machine_learning_ocr_enabled": "啟用 OCR", "machine_learning_ocr_enabled_description": "若停用,影像將不會進行文字辨識。", "machine_learning_ocr_max_resolution": "最大解析度", "machine_learning_ocr_max_resolution_description": "解析度高於此值的預覽影像將在保持長寬比的情況下調整大小。數值越高越準確,但處理時間更長且會佔用更多記憶體。", @@ -181,7 +181,7 @@ "machine_learning_ocr_min_detection_score_description": "文字偵測的最低信心分數,範圍為 0 - 1。較低的數值會偵測到更多文字,但可能導致誤判。", "machine_learning_ocr_min_recognition_score": "最低辨識分數", "machine_learning_ocr_min_score_recognition_description": "已偵測文字的最低辨識信心分數,範圍為 0 - 1。較低的數值會辨識出更多文字,但可能導致誤判。", - "machine_learning_ocr_model": "OCR模型", + "machine_learning_ocr_model": "OCR 模型", "machine_learning_ocr_model_description": "伺服器模型比行動裝置模型更準確,但處理時間較長且會佔用更多記憶體。", "machine_learning_settings": "機器學習設定", "machine_learning_settings_description": "管理機器學習的功能和設定", @@ -257,7 +257,7 @@ "notification_email_password_description": "用於與電子郵件伺服器驗證的密碼", "notification_email_port_description": "電子郵件伺服器的連接埠(例如 25、465 或 587)", "notification_email_secure": "SMTPS", - "notification_email_secure_description": "使用SMTPS(基於TLS的SMTP)", + "notification_email_secure_description": "使用 SMTPS(基於 TLS 的 SMTP)", "notification_email_sent_test_email_button": "傳送測試電子郵件並儲存", "notification_email_setting_description": "寄送電子郵件通知的設定", "notification_email_test_email": "傳送測試電子郵件", @@ -281,11 +281,11 @@ "oauth_role_claim_description": "根據此宣告的存在,自動授予管理員權限。該宣告的值可以是 'user' 或 'admin'。", "oauth_settings": "OAuth", "oauth_settings_description": "管理 OAuth 登入設定", - "oauth_settings_more_details": "欲瞭解此功能,請參閱 說明書。", + "oauth_settings_more_details": "若要瞭解此功能的詳細資訊,請參閱 說明文件。", "oauth_storage_label_claim": "儲存標籤宣告", - "oauth_storage_label_claim_description": "自動將使用者的儲存標籤定為此宣告之值。", + "oauth_storage_label_claim_description": "自動將使用者的儲存標籤設定為此宣告之值。", "oauth_storage_quota_claim": "儲存配額宣告", - "oauth_storage_quota_claim_description": "自動將使用者的儲存配額定為此宣告之值。", + "oauth_storage_quota_claim_description": "自動將使用者的儲存配額設定為此宣告之值。", "oauth_storage_quota_default": "預設儲存配額(GiB)", "oauth_storage_quota_default_description": "未提供宣告時所使用的配額(GiB)。", "oauth_timeout": "請求逾時", @@ -297,8 +297,8 @@ "paths_validated_successfully": "所有路徑驗證成功", "person_cleanup_job": "清理人物", "queue_details": "佇列資訊", - "queues": "任務排程", - "queues_page_description": "序列排程管理界面", + "queues": "任務佇列", + "queues_page_description": "管理員任務佇列頁面", "quota_size_gib": "配額大小(GiB)", "refreshing_all_libraries": "正在重新整理所有媒體庫", "registration": "管理者註冊", @@ -320,8 +320,8 @@ "server_welcome_message": "歡迎訊息", "server_welcome_message_description": "在登入頁面顯示的訊息。", "settings_page_description": "管理設定頁面", - "sidecar_job": "側接檔案中繼資料", - "sidecar_job_description": "從檔案系統偵測或同步側接檔案中繼資料", + "sidecar_job": "附屬檔案中繼資料", + "sidecar_job_description": "從檔案系統偵測或同步附屬檔案中繼資料", "slideshow_duration_description": "每張圖片放映的秒數", "smart_search_job_description": "對項目執行機器學習以支援智慧搜尋", "storage_template_date_time_description": "檔案的建立時間戳會用於日期與時間資訊", @@ -428,8 +428,8 @@ "user_delete_delay": "{user} 的帳號和項目會在 {delay, plural, one {# 天} other {# 天}} 後永久刪除。", "user_delete_delay_settings": "延後刪除", "user_delete_delay_settings_description": "自移除後起算的天數,逾期後將永久刪除使用者帳號與項目。使用者刪除作業會在每日午夜執行,以檢查符合刪除條件的帳號。此設定的變更將在下一次執行時生效。", - "user_delete_immediately": "{user} 的帳號與項目將 立即 排入永久刪除序列。", - "user_delete_immediately_checkbox": "立即將使用者與項目排入永久刪除序列", + "user_delete_immediately": "{user} 的帳號與項目將 立即 排入永久刪除佇列。", + "user_delete_immediately_checkbox": "立即將使用者與項目排入永久刪除佇列", "user_details": "使用者詳細資訊", "user_management": "使用者管理", "user_password_has_been_reset": "使用者密碼已重設:", @@ -493,7 +493,7 @@ "album_selected": "已選取相簿", "album_share_no_users": "看來您與所有使用者共享了這本相簿,或沒有其他使用者可供分享。", "album_summary": "相簿摘要", - "album_updated": "更新相簿時", + "album_updated": "相簿已更新", "album_updated_setting_description": "當共享相簿有新項目時用電子郵件通知我", "album_upload_assets": "從您的電腦上傳檔案並加入相簿", "album_user_left": "離開 {album}", @@ -508,11 +508,11 @@ "album_viewer_page_share_add_users": "邀請其他人", "album_with_link_access": "任何擁有連結的人皆可檢視此相簿中的相片與人物。", "albums": "相簿", - "albums_count": "{count, plural, one {{count, number} 個相簿} other {{count, number} 個相簿}}", + "albums_count": "{count, plural, one {{count, number} 本相簿} other {{count, number} 本相簿}}", "albums_default_sort_order": "預設相簿排序", "albums_default_sort_order_description": "建立新相簿時要初始化項目排序方式。", "albums_feature_description": "可共享給其他使用者的項目集合。", - "albums_on_device_count": "此裝置有 ({count}) 個相簿", + "albums_on_device_count": "此裝置有 ({count}) 本相簿", "albums_selected": "{count, plural, one {已選取 # 本相簿} other {已選取 # 本相簿}}", "all": "全部", "all_albums": "所有相簿", @@ -591,7 +591,7 @@ "assets_added_to_album_count": "已將 {count, plural, one {# 個項目} other {# 個項目}}加入至相簿", "assets_added_to_albums_count": "已將 {assetTotal, plural, other {# 個項目}} 新增至 {albumTotal, plural, other {# 本相簿}}", "assets_cannot_be_added_to_album_count": "無法將 {count, plural, one {項目} other {項目}} 加入至相簿", - "assets_cannot_be_added_to_albums": "無法將 {count, plural, other {# 個項目}} 加入任何相簿", + "assets_cannot_be_added_to_albums": "無法將 {count, plural, one {項目} other {項目}} 加入任何相簿", "assets_count": "{count, plural, one {# 個項目} other {# 個項目}}", "assets_deleted_permanently": "已永久刪除 {count} 個項目", "assets_deleted_permanently_from_server": "已從 Immich 伺服器中永久移除 {count} 個項目", @@ -608,7 +608,7 @@ "assets_trashed_count": "已將 {count, plural, one {# 個項目} other {# 個項目}}移至垃圾桶", "assets_trashed_from_server": "已從 Immich 伺服器將 {count} 個項目移至垃圾桶", "assets_were_part_of_album_count": "{count, plural, one {該項目已} other {這些項目已}}在相簿中", - "assets_were_part_of_albums_count": "{count, plural, one {個} other {個}}項目已被儲存在相簿中", + "assets_were_part_of_albums_count": "{count, plural, one {該項目已} other {這些項目已}}存在於相簿中", "authorized_devices": "已授權裝置", "automatic_endpoint_switching_subtitle": "當可用時,透過指定的 Wi-Fi 在本機連線,其他情況則使用替代連線", "automatic_endpoint_switching_title": "自動 URL 切換", @@ -622,7 +622,7 @@ "backup": "備份", "backup_album_selection_page_albums_device": "裝置上的相簿({count})", "backup_album_selection_page_albums_tap": "點一下以選取,點兩下以排除", - "backup_album_selection_page_assets_scatter": "項目可以分散在多個相簿中,因此在備份過程中可以選擇納入或排除相簿。", + "backup_album_selection_page_assets_scatter": "項目可以分散在多本相簿中,因此在備份過程中可以選擇納入或排除相簿。", "backup_album_selection_page_select_albums": "選取相簿", "backup_album_selection_page_selection_info": "選取資訊", "backup_album_selection_page_total_assets": "總不重複項目數", @@ -761,11 +761,11 @@ "city": "城市", "cleanup_confirm_description": "Immich 發現有 {count} 個項目(建立於 {date} 之前)已安全備份至伺服器。是否要從此裝置中刪除本機副本?", "cleanup_confirm_prompt_title": "從此裝置刪除?", - "cleanup_deleted_assets": "已將{count}項目移到裝置的垃圾桶裡", + "cleanup_deleted_assets": "已將 {count} 個項目移到裝置的垃圾桶裡", "cleanup_deleting": "正在移動到垃圾桶...", - "cleanup_found_assets": "找到{count}件已上傳的項目", - "cleanup_found_assets_with_size": "找到{count}件,總共({size})已上傳的項目", - "cleanup_icloud_shared_albums_excluded": "iCloud共享相簿被排除於搜尋之外", + "cleanup_found_assets": "找到 {count} 件已上傳的項目", + "cleanup_found_assets_with_size": "找到 {count} 件,總共 ({size}) 已上傳的項目", + "cleanup_icloud_shared_albums_excluded": "iCloud 共享相簿被排除於搜尋之外", "cleanup_no_assets_found": "找不到符合上述條件的項目。釋放空間功能僅能移除已備份至伺服器的項目", "cleanup_preview_title": "{count} 項需要移除的項目", "cleanup_step3_description": "掃描符合日期與儲存設定的已備份項目。", @@ -782,8 +782,8 @@ "client_cert_import": "匯入", "client_cert_import_success_msg": "已匯入用戶端憑證", "client_cert_invalid_msg": "無效的憑證檔案或密碼錯誤", - "client_cert_password_message": "請輸入此證書的密碼", - "client_cert_password_title": "證書密碼", + "client_cert_password_message": "請輸入此憑證的密碼", + "client_cert_password_title": "憑證密碼", "client_cert_remove_msg": "用戶端憑證已移除", "client_cert_subtitle": "僅支援 PKCS12 (.p12, .pfx) 格式。憑證匯入與移除僅可在登入前進行", "client_cert_title": "SSL 用戶端憑證 [實驗性]", @@ -794,7 +794,7 @@ "color": "顏色", "color_theme": "色彩主題", "command": "命令", - "command_palette_prompt": "快速尋找頁面,動作或者指令", + "command_palette_prompt": "快速搜尋頁面、動作或指令", "command_palette_to_close": "關閉", "command_palette_to_navigate": "輸入", "command_palette_to_select": "選擇", @@ -837,7 +837,7 @@ "copy_password": "複製密碼", "copy_to_clipboard": "複製到剪貼簿", "country": "國家", - "cover": "封面", + "cover": "填滿", "covers": "封面", "create": "建立", "create_album": "建立相簿", @@ -849,9 +849,12 @@ "create_link_to_share": "建立分享連結", "create_link_to_share_description": "持有連結的人皆可檢視所選項目", "create_new": "新增", + "create_new_face": "建立新臉孔", "create_new_person": "建立新人物", "create_new_person_hint": "將選取的項目指派給新的人物", "create_new_user": "建立新使用者", + "create_person": "建立人物", + "create_person_subtitle": "為所選臉孔新增名字以建立和標記新人物", "create_shared_album_page_share_add_assets": "新增項目", "create_shared_album_page_share_select_photos": "選取相片", "create_shared_link": "建立分享連結", @@ -892,7 +895,7 @@ "day": "日", "days": "日", "deduplicate_all": "刪除所有重複項目", - "default_locale": "默認語言", + "default_locale": "預設語言", "default_locale_description": "使用你的瀏覽器區域以格式日期和數字", "delete": "刪除", "delete_action_confirmation_message": "您確定要刪除此項目嗎?此動作會將該項目移至伺服器的垃圾桶,並詢問您是否要在本機同步刪除", @@ -965,7 +968,7 @@ "download_waiting_to_retry": "等待重試", "downloading": "下載中", "downloading_asset_filename": "正在下載項目 {filename}", - "downloading_from_icloud": "正從iCloud下載", + "downloading_from_icloud": "正從 iCloud 下載", "downloading_media": "正在下載媒體", "drop_files_to_upload": "將檔案拖放到任何位置以上傳", "duplicates": "重複項目", @@ -1010,8 +1013,8 @@ "editor_handle_edge": "{edge, select, top {頂部} bottom {底部} left {左側} right {右側} other {某個}} 邊緣的控制手柄", "editor_orientation": "方向", "editor_reset_all_changes": "重設變更", - "editor_rotate_left": "逆時針旋轉90度", - "editor_rotate_right": "順時針旋轉90度", + "editor_rotate_left": "逆時針旋轉 90 度", + "editor_rotate_right": "順時針旋轉 90 度", "email": "電子郵件", "email_notifications": "電子郵件通知", "empty_folder": "這個資料夾是空的", @@ -1022,7 +1025,7 @@ "enable_biometric_auth_description": "輸入您的 PIN 碼以啟用生物辨識驗證", "enabled": "已啟用", "end_date": "結束日期", - "enqueued": "已排入序列", + "enqueued": "已排入佇列", "enter_wifi_name": "輸入 Wi-Fi 名稱", "enter_your_pin_code": "輸入您的 PIN 碼", "enter_your_pin_code_subtitle": "輸入您的 PIN 碼以存取「已鎖定」資料夾", @@ -1344,11 +1347,11 @@ "ios_debug_info_processing_ran_at": "於 {dateTime} 執行處理", "items_count": "{count, plural, one {# 個項目} other {# 個項目}}", "jobs": "任務", - "json_editor": "JSON編輯器", - "json_error": "JSON錯誤", + "json_editor": "JSON 編輯器", + "json_error": "JSON 錯誤", "keep": "保留", "keep_albums": "保留相簿", - "keep_albums_count": "保留{count} {count, plural, one {個相簿} other {個相簿}}", + "keep_albums_count": "保留{count} {count, plural, one {本相簿} other {本相簿}}", "keep_all": "全部保留", "keep_description": "選擇執行釋放空間時要保留在裝置上的項目。", "keep_favorites": "保留最愛的相片", @@ -1356,7 +1359,7 @@ "keep_on_device_hint": "選擇保留在裝置上的相片", "keep_this_delete_others": "保留這個,刪除其他", "keeping": "保留:{items}", - "kept_this_deleted_others": "保留這個項目並刪除{count, plural, one {# asset} other {# assets}}", + "kept_this_deleted_others": "保留這個項目並刪除{count, plural, one {# 個項目} other {# 個項目}}", "keyboard_shortcuts": "鍵盤快捷鍵", "language": "語言", "language_no_results_subtitle": "試著調整您的搜尋詞彙", @@ -1390,7 +1393,7 @@ "like": "喜歡", "like_deleted": "已取消喜歡", "link_motion_video": "連結動態影片", - "link_to_docs": "請參閱 文案 以獲取更多信息。", + "link_to_docs": "請參閱 說明文件 以獲取更多資訊。", "link_to_oauth": "連結 OAuth", "linked_oauth_account": "已連結 OAuth 帳號", "list": "清單", @@ -1399,7 +1402,7 @@ "local": "本機", "local_asset_cast_failed": "無法投放未上傳至伺服器的項目", "local_assets": "本機項目", - "local_id": "本地ID", + "local_id": "本地 ID", "local_media_summary": "本機媒體摘要", "local_network": "本機網路", "local_network_sheet_info": "當使用指定的 Wi-Fi 網路時,應用程式將透過此網址連線至伺服器", @@ -1488,14 +1491,14 @@ "manage_your_devices": "管理已登入的裝置", "manage_your_oauth_connection": "管理您的 OAuth 連結", "map": "地圖", - "map_assets_in_bounds": "{count, plural, one {# 張相片} other {# 張相片}}", + "map_assets_in_bounds": "{count, plural, =0 {此區域沒有相片} one {# 張相片} other {# 張相片}}", "map_cannot_get_user_location": "無法取得使用者位置", "map_location_dialog_yes": "確定", "map_location_picker_page_use_location": "使用此位置", "map_location_service_disabled_content": "需要啟用定位服務才能顯示您目前位置相關的項目。要現在啟用嗎?", "map_location_service_disabled_title": "定位服務已停用", - "map_marker_for_images": "在 {city}、{country} 拍攝影像的地圖示記", - "map_marker_with_image": "帶有影像的地圖示記", + "map_marker_for_images": "在 {city}、{country} 拍攝影像的地圖標記", + "map_marker_with_image": "帶有影像的地圖標記", "map_no_location_permission_content": "需要位置權限才能顯示與您目前位置相關的項目。要現在就授予位置權限嗎?", "map_no_location_permission_title": "沒有位置權限", "map_settings": "地圖設定", @@ -1553,7 +1556,7 @@ "move_to_locked_folder_confirmation": "這些相片與影片將從所有相簿中移除,且僅能從「已鎖定」資料夾中檢視", "move_up": "向上移動", "moved_to_archive": "已封存 {count, plural, one {# 個項目} other {# 個項目}}", - "moved_to_library": "已移動 {count, plural, one {# 個項目} other {# 個項目}} 至相簿", + "moved_to_library": "已移動 {count, plural, one {# 個項目} other {# 個項目}} 至媒體庫", "moved_to_trash": "已丟進垃圾桶", "multiselect_grid_edit_date_time_err_read_only": "唯讀項目的日期無法編輯,已略過", "multiselect_grid_edit_gps_err_read_only": "唯讀項目的位置資訊無法編輯,已略過", @@ -1562,12 +1565,12 @@ "name": "名稱", "name_or_nickname": "名稱或暱稱", "name_required": "名稱是必填項", - "navigate": "導航", + "navigate": "導覽", "navigate_to_time": "跳轉至指定時間", "network_requirement_photos_upload": "使用行動網路流量備份相片", "network_requirement_videos_upload": "使用行動網路流量備份影片", "network_requirements": "網路要求", - "network_requirements_updated": "網路需求已變更,正在重設備份序列", + "network_requirements_updated": "網路需求已變更,正在重設備份佇列", "networking_settings": "網路", "networking_subtitle": "管理伺服器端點設定", "never": "永不失效", @@ -1591,7 +1594,7 @@ "no_albums_message": "建立相簿來整理相片和影片", "no_albums_with_name_yet": "看來還沒有這個名字的相簿。", "no_albums_yet": "看來您還沒有任何相簿。", - "no_archived_assets_message": "將相片與影片封存後,就不會顯示在「相片」視圖中", + "no_archived_assets_message": "將相片與影片封存後,就不會顯示在「相片」頁面中", "no_assets_message": "按這裡上傳您的第一張相片", "no_assets_to_show": "無項目展示", "no_cast_devices_found": "找不到 Google Cast 裝置", @@ -1707,7 +1710,7 @@ "permanent_deletion_warning_setting_description": "在永久刪除檔案時顯示警告", "permanently_delete": "永久刪除", "permanently_delete_assets_count": "永久刪除 {count, plural, one {檔案} other {檔案}}", - "permanently_delete_assets_prompt": "確定要永久刪除 {count, plural, other {這 # 個檔案?}}這樣{count, plural, one {它} other {它們}}也會從自己所在的相簿中消失。", + "permanently_delete_assets_prompt": "確定要永久刪除 {count, plural, one {這個檔案?} other {這 # 個檔案?}}這樣{count, plural, one {它} other {它們}}也會從自己所在的相簿中消失。", "permanently_deleted_asset": "永久刪除的檔案", "permanently_deleted_assets_count": "永久刪除的 {count, plural, one {# 個檔案} other {# 個檔案}}", "permission": "權限", @@ -1770,7 +1773,7 @@ "profile_drawer_app_logs": "紀錄", "profile_drawer_client_server_up_to_date": "用戶端與伺服器版本皆為最新", "profile_drawer_github": "GitHub", - "profile_drawer_readonly_mode": "唯讀模式已啟用。長按使用者個人圖示即可退出。", + "profile_drawer_readonly_mode": "唯讀模式已啟用。長按使用者個人圖示即可關閉。", "profile_image_of_user": "{user} 的個人資料圖片", "profile_picture_set": "已設定個人資料圖片。", "public_album": "公開相簿", @@ -1812,7 +1815,7 @@ "rate_asset": "項目評分", "rating": "評星", "rating_clear": "清除評等", - "rating_count": "{count, plural, =0 {Unrated} other {# 星}}", + "rating_count": "{count, plural, =0 {未評分} one {# 星} other {# 星}}", "rating_description": "在資訊面板中顯示 EXIF 評等", "reaction_options": "反應選項", "read_changelog": "閱覽更新紀錄", @@ -1832,15 +1835,15 @@ "recently_taken_page_title": "最近拍攝", "refresh": "重新整理", "refresh_encoded_videos": "重新整理已編碼的影片", - "refresh_faces": "重整面部資料", + "refresh_faces": "重新整理臉孔資料", "refresh_metadata": "重新整理中繼資料", "refresh_thumbnails": "重新整理縮圖", "refreshed": "重新整理完畢", "refreshes_every_file": "重新讀取所有現有與新增檔案", "refreshing_encoded_video": "正在重新整理已編碼的影片", - "refreshing_faces": "重整面部資料中", + "refreshing_faces": "正在重新整理臉孔資料", "refreshing_metadata": "正在重新整理中繼資料", - "regenerating_thumbnails": "重新產生縮圖中", + "regenerating_thumbnails": "正在重新產生縮圖", "remote": "遠端", "remote_assets": "遠端項目", "remote_media_summary": "遠端媒體摘要", @@ -1869,8 +1872,8 @@ "removed_memory": "已移除記憶", "removed_photo_from_memory": "已從記憶中移除相片", "removed_tagged_assets": "已移除 {count, plural, one {# 個檔案} other {# 個檔案}}的標籤", - "rename": "改名", - "repair": "糾正", + "rename": "重新命名", + "repair": "修復", "repair_no_results_message": "未被追蹤及遺失的檔案會顯示在這裡", "replace_with_upload": "用上傳的檔案取代", "repository": "儲存庫", @@ -1886,9 +1889,9 @@ "reset_pin_code_with_password": "您可隨時使用您的密碼來重設 PIN 碼", "reset_sqlite": "重設 SQLite 資料庫", "reset_sqlite_clear_app_data": "清除資料", - "reset_sqlite_confirmation": "確定要重設所有資料嗎?你的所有設置將被重設,且你會被登出。", - "reset_sqlite_confirmation_note": "注意:你需要在清除資料後重新開啟應用。", - "reset_sqlite_done": "資料已清除。請重啟Immich及重新登入。", + "reset_sqlite_confirmation": "確定要重設所有資料嗎?你的所有設定將被重設,且你會被登出。", + "reset_sqlite_confirmation_note": "注意:你需要在清除資料後重新開啟 App。", + "reset_sqlite_done": "資料已清除。請重啟 Immich 及重新登入。", "reset_sqlite_success": "已成功重設 SQLite 資料庫", "reset_to_default": "重設為預設值", "resolution": "解析度", @@ -1910,7 +1913,7 @@ "running": "執行中", "save": "儲存", "save_to_gallery": "儲存到相簿", - "saved": "已保存", + "saved": "已儲存", "saved_api_key": "已儲存 API 金鑰", "saved_profile": "已儲存個人資料", "saved_settings": "已儲存設定", @@ -1930,9 +1933,9 @@ "search_by_description_example": "在沙壩的健行之日", "search_by_filename": "依檔名或副檔名搜尋", "search_by_filename_example": "如 IMG_1234.JPG 或 PNG", - "search_by_ocr": "透過OCR搜尋", + "search_by_ocr": "透過 OCR 搜尋", "search_by_ocr_example": "拿鐵", - "search_camera_lens_model": "蒐索鏡頭型號...", + "search_camera_lens_model": "搜尋鏡頭型號...", "search_camera_make": "搜尋相機製造商…", "search_camera_model": "搜尋相機型號…", "search_city": "搜尋城市…", @@ -1949,7 +1952,7 @@ "search_filter_location_title": "選擇位置", "search_filter_media_type": "媒體類型", "search_filter_media_type_title": "選擇媒體類型", - "search_filter_ocr": "透過OCR搜尋", + "search_filter_ocr": "透過 OCR 搜尋", "search_filter_people_title": "選擇人物", "search_filter_star_rating": "評分", "search_filter_tags_title": "選擇標籤", @@ -1978,7 +1981,7 @@ "search_settings": "搜尋設定", "search_state": "搜尋地區…", "search_suggestion_list_smart_search_hint_1": "智慧搜尋功能預設已啟用,如要搜尋中繼資料,請使用語法 ", - "search_suggestion_list_smart_search_hint_2": "m:您的搜尋關鍵詞", + "search_suggestion_list_smart_search_hint_2": "m:您的搜尋關鍵字", "search_tags": "搜尋標籤...", "search_timezone": "搜尋時區…", "search_type": "搜尋類型", @@ -2032,7 +2035,7 @@ "set_profile_picture": "設定個人資料圖片", "set_slideshow_to_fullscreen": "以全螢幕放映幻燈片", "set_stack_primary_asset": "設定堆疊的首要項目", - "setting_image_navigation_enable_subtitle": "開啟後以觸碰屏幕左/右邊緣區域的方式切換上/下圖片。", + "setting_image_navigation_enable_subtitle": "開啟後以觸碰螢幕左/右邊緣區域的方式切換上/下圖片。", "setting_image_navigation_enable_title": "點擊切換", "setting_image_navigation_title": "圖片導引", "setting_image_viewer_help": "詳細資訊檢視器會依序載入小型縮圖、中等尺寸預覽圖(若啟用),最後載入原始相片。", @@ -2132,7 +2135,7 @@ "show_all_people": "顯示所有人物", "show_and_hide_people": "顯示與隱藏人物", "show_file_location": "顯示檔案位置", - "show_gallery": "顯示畫廊", + "show_gallery": "顯示媒體庫", "show_hidden_people": "顯示隱藏的人物", "show_in_timeline": "在時間軸中顯示", "show_in_timeline_setting_description": "在您的時間軸中顯示這位使用者的相片和影片", @@ -2149,7 +2152,7 @@ "show_supporter_badge": "支持者徽章", "show_supporter_badge_description": "顯示支持者徽章", "show_text_recognition": "顯示文字辨識", - "show_text_search_menu": "顯示文字蒐索選單", + "show_text_search_menu": "顯示文字搜尋選單", "shuffle": "隨機排序", "sidebar": "側邊欄", "sidebar_display_description": "在側邊欄中顯示連結", @@ -2214,6 +2217,7 @@ "tag": "標籤", "tag_assets": "標記檔案", "tag_created": "已建立標籤:{tag}", + "tag_face": "標記臉孔", "tag_feature_description": "以邏輯標記要旨分類瀏覽相片和影片", "tag_not_found_question": "找不到標籤?建立新標籤。", "tag_people": "標籤人物", @@ -2264,11 +2268,11 @@ "trash_all": "全部丟掉", "trash_count": "丟掉 {count, number} 個檔案", "trash_delete_asset": "將檔案丟進垃圾桶 / 刪除", - "trash_emptied": "已清空回收桶", + "trash_emptied": "已清空垃圾桶", "trash_no_results_message": "垃圾桶中的相片和影片將顯示在這裡。", "trash_page_delete_all": "刪除全部", - "trash_page_empty_trash_dialog_content": "是否清空回收桶?這些項目將被從 Immich 中永久刪除", - "trash_page_info": "回收桶中項目將在 {days} 天後永久刪除", + "trash_page_empty_trash_dialog_content": "是否清空垃圾桶?這些項目將被從 Immich 中永久刪除", + "trash_page_info": "垃圾桶中項目將在 {days} 天後永久刪除", "trash_page_no_assets": "暫無已刪除項目", "trash_page_restore_all": "全部還原", "trash_page_select_assets_btn": "選擇項目", @@ -2281,7 +2285,7 @@ "trigger_person_recognized": "已辨識人物", "trigger_person_recognized_description": "偵測到人物時觸發", "trigger_type": "觸發類型", - "troubleshoot": "疑難解答", + "troubleshoot": "疑難排解", "type": "類型", "unable_to_change_pin_code": "無法變更 PIN 碼", "unable_to_check_version": "無法檢查應用程式或伺服器版本", @@ -2313,7 +2317,7 @@ "unstack_action_prompt": "{count} 個取消堆疊", "unstacked_assets_count": "已解除堆疊 {count, plural, other {# 個檔案}}", "unsupported_field_type": "不支援的欄位類型", - "unsupported_file_type": "不支持 {type} 類型的檔案,無法上傳 {file} 文件。", + "unsupported_file_type": "不支援 {type} 類型的檔案,無法上傳 {file} 檔案。", "untagged": "無標籤", "untitled_workflow": "未命名工作流程", "up_next": "下一個", @@ -2371,7 +2375,7 @@ "version_history": "版本紀錄", "version_history_item": "{date} 安裝了 {version}", "video": "影片", - "video_hover_setting": "遊標停留時播放影片縮圖", + "video_hover_setting": "游標停留時播放影片縮圖", "video_hover_setting_description": "當滑鼠停在項目上時播放影片縮圖。即使停用此功能,仍可透過將滑鼠停在播放圖示上來開始播放。", "videos": "影片", "videos_count": "{count, plural, other {# 部影片}}", From 95e57a24cb11b4bcff39b770ae2d81443434c210 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 14:27:31 +0000 Subject: [PATCH 156/156] chore: version v2.7.5 --- cli/package.json | 2 +- docs/static/archived-versions.json | 4 ++-- e2e/package.json | 2 +- i18n/package.json | 2 +- machine-learning/pyproject.toml | 2 +- machine-learning/uv.lock | 2 +- mobile/android/fastlane/Fastfile | 4 ++-- mobile/ios/Runner/Info.plist | 2 +- mobile/openapi/README.md | 2 +- mobile/pubspec.yaml | 2 +- open-api/immich-openapi-specs.json | 2 +- open-api/typescript-sdk/package.json | 2 +- open-api/typescript-sdk/src/fetch-client.ts | 2 +- package.json | 2 +- server/package.json | 2 +- web/package.json | 2 +- 16 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cli/package.json b/cli/package.json index b195a1418d..0b4954cb6a 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@immich/cli", - "version": "2.7.4", + "version": "2.7.5", "description": "Command Line Interface (CLI) for Immich", "type": "module", "exports": "./dist/index.js", diff --git a/docs/static/archived-versions.json b/docs/static/archived-versions.json index 624e95c65b..964291ad08 100644 --- a/docs/static/archived-versions.json +++ b/docs/static/archived-versions.json @@ -1,7 +1,7 @@ [ { - "label": "v2.7.4", - "url": "https://docs.v2.7.4.archive.immich.app" + "label": "v2.7.5", + "url": "https://docs.v2.7.5.archive.immich.app" }, { "label": "v2.6.3", diff --git a/e2e/package.json b/e2e/package.json index bd83e00ed8..24b9d849ee 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "immich-e2e", - "version": "2.7.4", + "version": "2.7.5", "description": "", "main": "index.js", "type": "module", diff --git a/i18n/package.json b/i18n/package.json index a573aaff56..2b9548ed8b 100644 --- a/i18n/package.json +++ b/i18n/package.json @@ -1,6 +1,6 @@ { "name": "immich-i18n", - "version": "2.7.4", + "version": "2.7.5", "private": true, "scripts": { "format": "prettier --cache --check .", diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index 8f559589a9..ee5eab7c89 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "immich-ml" -version = "2.7.4" +version = "2.7.5" description = "" authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }] requires-python = ">=3.11,<4.0" diff --git a/machine-learning/uv.lock b/machine-learning/uv.lock index 77ffd247a6..099a22b118 100644 --- a/machine-learning/uv.lock +++ b/machine-learning/uv.lock @@ -898,7 +898,7 @@ wheels = [ [[package]] name = "immich-ml" -version = "2.7.4" +version = "2.7.5" source = { editable = "." } dependencies = [ { name = "aiocache" }, diff --git a/mobile/android/fastlane/Fastfile b/mobile/android/fastlane/Fastfile index be1a17d03d..7312a8ca68 100644 --- a/mobile/android/fastlane/Fastfile +++ b/mobile/android/fastlane/Fastfile @@ -35,8 +35,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 3045, - "android.injected.version.name" => "2.7.4", + "android.injected.version.code" => 3046, + "android.injected.version.name" => "2.7.5", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') diff --git a/mobile/ios/Runner/Info.plist b/mobile/ios/Runner/Info.plist index 3f3735bc16..b5d7d780a6 100644 --- a/mobile/ios/Runner/Info.plist +++ b/mobile/ios/Runner/Info.plist @@ -80,7 +80,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.7.4 + 2.7.5 CFBundleSignature ???? CFBundleURLTypes diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 39d9ce2510..d01e743a3f 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -3,7 +3,7 @@ Immich API This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 2.7.4 +- API version: 2.7.5 - Generator version: 7.8.0 - Build package: org.openapitools.codegen.languages.DartClientCodegen diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 7101cd91ad..1e03bd6e7f 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -2,7 +2,7 @@ name: immich_mobile description: Immich - selfhosted backup media file on mobile phone publish_to: 'none' -version: 2.7.4+3045 +version: 2.7.5+3046 environment: sdk: '>=3.8.0 <4.0.0' diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 36eb3aa17e..90d151a2a3 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -15225,7 +15225,7 @@ "info": { "title": "Immich", "description": "Immich API", - "version": "2.7.4", + "version": "2.7.5", "contact": {} }, "tags": [ diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 68f75ba52c..bb4f3cfe05 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@immich/sdk", - "version": "2.7.4", + "version": "2.7.5", "description": "Auto-generated TypeScript SDK for the Immich API", "type": "module", "main": "./build/index.js", diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index be871c0309..d74c2dd3e2 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -1,6 +1,6 @@ /** * Immich - * 2.7.4 + * 2.7.5 * DO NOT MODIFY - This file has been generated using oazapfts. * See https://www.npmjs.com/package/oazapfts */ diff --git a/package.json b/package.json index 9c4c09c34f..3b223811d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "immich-monorepo", - "version": "2.7.4", + "version": "2.7.5", "description": "Monorepo for Immich", "private": true, "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be", diff --git a/server/package.json b/server/package.json index 15852eba8a..4cad008b9e 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "immich", - "version": "2.7.4", + "version": "2.7.5", "description": "", "author": "", "private": true, diff --git a/web/package.json b/web/package.json index 0995acc301..6cec8f50d4 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "immich-web", - "version": "2.7.4", + "version": "2.7.5", "license": "GNU Affero General Public License version 3", "type": "module", "scripts": {