From a4c531c92fd3005f1ed95666c149c43fd56e7252 Mon Sep 17 00:00:00 2001 From: Nate Otto Date: Tue, 10 Nov 2026 21:14:52 -0800 Subject: [PATCH 1/3] Build for Lambda, add CI, and release 3.0.0 npm run build:lambda builds dist/lambda/: the Next.js standalone server, its static files and public/, a .next/cache link to /tmp/cache, and run.sh, the entry the Lambda Web Adapter starts (HOSTNAME=0.0.0.0, PORT defaulting to 8080). The script fails if run.sh, server.js, the static files or public/ are missing, or run.sh is not executable. It does not zip; the deployment does. settings.contract.json lists every environment variable the app reads, with whether it is required, its values and default, its purpose, and who sets it under Docker and on Lambda. A unit test checks that every name app/lib/settings.ts reads is in the file and nothing stale is, and that leaving out each always-required setting makes /health/ready answer 503 naming it. CI (.github/workflows/ci.yml), on pull requests and pushes to main: - unit: npm test and tsc --noEmit. - stores: the store tests against MongoDB 7 and DynamoDB Local. - lambda-shape: build:lambda, then the end-to-end tests against dist/lambda/run.sh with the memory store and exchanges off. - docker: the image beside MongoDB with exchanges on, /api/healthz healthy, then the same end-to-end tests. Playwright: - The seven screenshot comparisons are gone, with all 40 baselines. The verification log tests check each line's icon (green checkmark, yellow warning or red x) by its accessible name; the achievement image tests check the image loaded. - A Lambda project (tests/lambda.spec.ts, no browser, no retries): /health/ready is 200; 20 share-then-read round trips, 10 in parallel; 404 after unshare; 413 for a body over 5 MB to /api/verify and for a shared credential over 350 KB. npm run test:e2e runs it too. - The wallet exchange test asks /api/config first and is skipped when exchanges are off. The Dockerfile sets HOSTNAME=0.0.0.0. Docker sets HOSTNAME to the container id, so the server listened on that interface only and /api/healthz could not reach it at localhost. Docs: the CHANGELOG's 3.0.0 entry states the breaking changes; the README gains settings, upgrading from 2.x, running with no database, MongoDB indexes and 2.x records, Docker, AWS Lambda and testing sections; .env.example and both compose examples set CREDENTIAL_STORE=mongodb and EXCHANGES=on and show EXCHANGE_SERVER_URL commented out. Version 3.0.0. Co-Authored-By: Claude Opus 5.5 --- .dockerignore | 1 + .env.example | 16 +- .github/workflows/ci.yml | 132 ++++++++++++++ .gitignore | 1 + CHANGELOG.md | 28 ++- Dockerfile | 5 +- README.md | 97 ++++++++-- app/lib/settings.contract.test.ts | 94 ++++++++++ docker-compose.example.prod.yml | 8 + docker-compose.example.yml | 8 + package-lock.json | 4 +- package.json | 5 +- playwright.config.ts | 37 ++-- scripts/build-lambda.sh | 58 ++++++ settings.contract.json | 165 ++++++++++++++++++ tests/credential.spec.ts | 4 +- ...play-OBv3-VCv1-1-Desktop-Chrome-darwin.png | Bin 2457 -> 0 bytes ...splay-OBv3-VCv1-1-DesktopChrome-darwin.png | Bin 2354 -> 0 bytes ...splay-OBv3-VCv1-1-Mobile-Chrome-darwin.png | Bin 2354 -> 0 bytes ...isplay-OBv3-VCv1-1-MobileChrome-darwin.png | Bin 2354 -> 0 bytes ...play-OBv3-VCv2-1-Desktop-Chrome-darwin.png | Bin 2457 -> 0 bytes ...splay-OBv3-VCv2-1-DesktopChrome-darwin.png | Bin 2354 -> 0 bytes ...splay-OBv3-VCv2-1-Mobile-Chrome-darwin.png | Bin 2354 -> 0 bytes ...isplay-OBv3-VCv2-1-MobileChrome-darwin.png | Bin 2354 -> 0 bytes tests/helpers/resultLog.ts | 61 +++++++ tests/lambda.spec.ts | 68 ++++++++ tests/log.spec.ts | 7 +- ...tatus-noExpiry-1-Desktop-Chrome-darwin.png | Bin 9595 -> 0 bytes ...Status-noExpiry-1-DesktopChrome-darwin.png | Bin 10016 -> 0 bytes ...Status-noExpiry-1-Mobile-Chrome-darwin.png | Bin 10067 -> 0 bytes ...oStatus-noExpiry-1-MobileChrome-darwin.png | Bin 10067 -> 0 bytes ...evoked-expired-1-Desktop-Chrome-darwin.png | Bin 8864 -> 0 bytes ...revoked-expired-1-DesktopChrome-darwin.png | Bin 9274 -> 0 bytes ...revoked-expired-1-Mobile-Chrome-darwin.png | Bin 9322 -> 0 bytes ...-revoked-expired-1-MobileChrome-darwin.png | Bin 9322 -> 0 bytes ...Status-expired-1-Desktop-Chrome-darwin.png | Bin 8974 -> 0 bytes ...dStatus-expired-1-DesktopChrome-darwin.png | Bin 9477 -> 0 bytes ...dStatus-expired-1-Mobile-Chrome-darwin.png | Bin 9525 -> 0 bytes ...idStatus-expired-1-MobileChrome-darwin.png | Bin 9525 -> 0 bytes ...tatus-noExpiry-1-Desktop-Chrome-darwin.png | Bin 9595 -> 0 bytes ...Status-noExpiry-1-DesktopChrome-darwin.png | Bin 10016 -> 0 bytes ...Status-noExpiry-1-Mobile-Chrome-darwin.png | Bin 10062 -> 0 bytes ...dStatus-noExpiry-1-MobileChrome-darwin.png | Bin 10062 -> 0 bytes ...tatus-noExpiry-1-Desktop-Chrome-darwin.png | Bin 10217 -> 0 bytes ...Status-noExpiry-1-DesktopChrome-darwin.png | Bin 10754 -> 0 bytes ...Status-noExpiry-1-Mobile-Chrome-darwin.png | Bin 10799 -> 0 bytes ...oStatus-noExpiry-1-MobileChrome-darwin.png | Bin 10799 -> 0 bytes ...Status-expired-1-Desktop-Chrome-darwin.png | Bin 8974 -> 0 bytes ...oStatus-expired-1-DesktopChrome-darwin.png | Bin 9477 -> 0 bytes ...oStatus-expired-1-Mobile-Chrome-darwin.png | Bin 9525 -> 0 bytes ...noStatus-expired-1-MobileChrome-darwin.png | Bin 9525 -> 0 bytes tests/storedCredView.spec.ts | 13 +- ...should-display-1-Desktop-Chrome-darwin.png | Bin 9554 -> 0 bytes ...-should-display-1-DesktopChrome-darwin.png | Bin 9986 -> 0 bytes ...-should-display-1-Mobile-Chrome-darwin.png | Bin 9987 -> 0 bytes ...l-should-display-1-MobileChrome-darwin.png | Bin 9987 -> 0 bytes tests/vpqr.spec.ts | 17 +- .../test-the-qr-1-Desktop-Chrome-darwin.png | Bin 9554 -> 0 bytes .../test-the-qr-1-DesktopChrome-darwin.png | Bin 9986 -> 0 bytes .../test-the-qr-1-Mobile-Chrome-darwin.png | Bin 10062 -> 0 bytes .../test-the-qr-1-MobileChrome-darwin.png | Bin 10062 -> 0 bytes tsconfig.json | 3 +- 62 files changed, 776 insertions(+), 56 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 app/lib/settings.contract.test.ts create mode 100755 scripts/build-lambda.sh create mode 100644 settings.contract.json delete mode 100644 tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv1-1-Desktop-Chrome-darwin.png delete mode 100644 tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv1-1-DesktopChrome-darwin.png delete mode 100644 tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv1-1-Mobile-Chrome-darwin.png delete mode 100644 tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv1-1-MobileChrome-darwin.png delete mode 100644 tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv2-1-Desktop-Chrome-darwin.png delete mode 100644 tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv2-1-DesktopChrome-darwin.png delete mode 100644 tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv2-1-Mobile-Chrome-darwin.png delete mode 100644 tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv2-1-MobileChrome-darwin.png create mode 100644 tests/helpers/resultLog.ts create mode 100644 tests/lambda.spec.ts delete mode 100644 tests/log.spec.ts-snapshots/log-legacy-noStatus-noExpiry-1-Desktop-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-legacy-noStatus-noExpiry-1-DesktopChrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-legacy-noStatus-noExpiry-1-Mobile-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-legacy-noStatus-noExpiry-1-MobileChrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-legacy-revoked-expired-1-Desktop-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-legacy-revoked-expired-1-DesktopChrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-legacy-revoked-expired-1-Mobile-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-legacy-revoked-expired-1-MobileChrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-expired-1-Desktop-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-expired-1-DesktopChrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-expired-1-Mobile-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-expired-1-MobileChrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-noExpiry-1-Desktop-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-noExpiry-1-DesktopChrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-noExpiry-1-Mobile-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-noExpiry-1-MobileChrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-noRegistry-noStatus-noExpiry-1-Desktop-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-noRegistry-noStatus-noExpiry-1-DesktopChrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-noRegistry-noStatus-noExpiry-1-Mobile-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-noRegistry-noStatus-noExpiry-1-MobileChrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-oidf-noStatus-expired-1-Desktop-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-oidf-noStatus-expired-1-DesktopChrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-oidf-noStatus-expired-1-Mobile-Chrome-darwin.png delete mode 100644 tests/log.spec.ts-snapshots/log-oidf-noStatus-expired-1-MobileChrome-darwin.png delete mode 100644 tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-Desktop-Chrome-darwin.png delete mode 100644 tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-DesktopChrome-darwin.png delete mode 100644 tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-Mobile-Chrome-darwin.png delete mode 100644 tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-MobileChrome-darwin.png delete mode 100644 tests/vpqr.spec.ts-snapshots/test-the-qr-1-Desktop-Chrome-darwin.png delete mode 100644 tests/vpqr.spec.ts-snapshots/test-the-qr-1-DesktopChrome-darwin.png delete mode 100644 tests/vpqr.spec.ts-snapshots/test-the-qr-1-Mobile-Chrome-darwin.png delete mode 100644 tests/vpqr.spec.ts-snapshots/test-the-qr-1-MobileChrome-darwin.png diff --git a/.dockerignore b/.dockerignore index 674030d4..4779a6c2 100644 --- a/.dockerignore +++ b/.dockerignore @@ -7,3 +7,4 @@ certs/ vhost/ CHANGELOG.md docker-compose.example.* +dist/ diff --git a/.env.example b/.env.example index 1be1d73c..3dda7798 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,13 @@ -# MongoDB connection info -DB_USER= -DB_PASS= -DB_HOST=127.0.0.1 +# Where shared credentials are kept: memory, mongodb or dynamodb (required). +# See settings.contract.json for every setting. +CREDENTIAL_STORE=mongodb + +# MongoDB connection info: DB_URI, or (as in 2.x, for MongoDB Atlas) DB_HOST +# with DB_USER and DB_PASS. Not both. +DB_URI=mongodb://127.0.0.1:27017 +#DB_USER= +#DB_PASS= +#DB_HOST=your-cluster.mongodb.net DB_NAME=verifier-plus-DEV DB_COLLECTION=credentials @@ -14,4 +20,4 @@ HTTPPORT=80 EXCHANGES=on # Where wallets reach the exchange (optional; defaults to the address the # browser used to reach the page) -EXCHANGE_SERVER_URL=https://verifierplus.org \ No newline at end of file +#EXCHANGE_SERVER_URL=https://verifierplus.org diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..2e3634bb --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,132 @@ +name: CI + +on: + pull_request: + push: + branches: [main] + +permissions: + contents: read + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + unit: + name: Unit tests and types + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 + with: + node-version-file: .nvmrc + cache: npm + - run: npm ci + - run: npm test + - run: npx tsc --noEmit + + stores: + name: Store contract tests (memory, MongoDB, DynamoDB Local) + runs-on: ubuntu-latest + services: + mongo: + image: mongo:7 + ports: ["27017:27017"] + dynamodb: + image: amazon/dynamodb-local:3.3.2 + ports: ["8000:8000"] + env: + TEST_STORES: memory,mongodb,dynamodb + TEST_MONGO_URI: mongodb://localhost:27017 + DYNAMODB_ENDPOINT: http://localhost:8000 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 + with: + node-version-file: .nvmrc + cache: npm + - run: npm ci + - run: npm test + + # Proves the Lambda build: dist/lambda/run.sh serves the app with the memory + # store. It does not prove the Lambda Web Adapter, DynamoDB or API Gateway; + # the staging deployment's tests do. + lambda-shape: + name: Lambda build and smoke test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 + with: + node-version-file: .nvmrc + cache: npm + - run: npm ci + - run: npm run build:lambda + - name: Start dist/lambda/run.sh + run: | + CREDENTIAL_STORE=memory EXCHANGES=off PORT=3000 dist/lambda/run.sh > server.log 2>&1 & + for _ in $(seq 1 60); do + if curl -sf http://localhost:3000/health/ready; then exit 0; fi + sleep 1 + done + echo "/health/ready did not answer 200 within 60 s" + cat server.log + exit 1 + - run: npx playwright install --with-deps chromium + - run: npx playwright test --project=API --project=DesktopChrome --project=Lambda + env: + PLAYWRIGHT_TEST_URL: http://localhost:3000 + - if: ${{ !cancelled() }} + run: cat server.log + - if: ${{ !cancelled() }} + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 + with: + name: playwright-report-lambda-shape + path: playwright-report/ + retention-days: 14 + + # Proves the Docker image self-hosters run: MongoDB store, exchanges on. + docker: + name: Docker image with MongoDB + runs-on: ubuntu-latest + services: + mongo: + image: mongo:7 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 + with: + node-version-file: .nvmrc + cache: npm + - run: docker build -t verifier-plus:ci . + - name: Start the image beside MongoDB + run: | + docker run -d --name verifier-plus \ + --network "${{ job.services.mongo.network }}" -p 3000:3000 \ + -e CREDENTIAL_STORE=mongodb -e DB_URI=mongodb://mongo:27017 -e EXCHANGES=on \ + verifier-plus:ci + for _ in $(seq 1 60); do + if curl -sf http://localhost:3000/api/healthz | grep -q '"healthy":true'; then + curl -s http://localhost:3000/api/healthz + exit 0 + fi + sleep 1 + done + echo "/api/healthz did not report healthy within 60 s" + curl -s http://localhost:3000/api/healthz || true + docker logs verifier-plus + exit 1 + - run: npm ci + - run: npx playwright install --with-deps chromium + - run: npx playwright test --project=API --project=DesktopChrome --project=Lambda + env: + PLAYWRIGHT_TEST_URL: http://localhost:3000 + - if: ${{ !cancelled() }} + run: docker logs verifier-plus + - if: ${{ !cancelled() }} + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 + with: + name: playwright-report-docker + path: playwright-report/ + retention-days: 14 diff --git a/.gitignore b/.gitignore index 9fa2f744..a804385a 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ # production /build +/dist/ # misc .DS_Store diff --git a/CHANGELOG.md b/CHANGELOG.md index 79a1c9e8..9e28b154 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,32 @@ # verifier-plus Changelog -## Unreleased +## 3.0.0 +### Breaking +- `CREDENTIAL_STORE` and `EXCHANGES` are required. Docker users who set only `DB_USER`, `DB_PASS` and `DB_HOST` must add `CREDENTIAL_STORE=mongodb`, and `EXCHANGES=on` to keep requesting credentials from the Learner Credential Wallet (or `EXCHANGES=off`). See the README's "Upgrading from 2.x". +- `NEXT_PUBLIC_EXCHANGE_SERVER_URL` is replaced by `EXCHANGE_SERVER_URL`, which is optional and defaults to the address the browser used to reach the page. The old name is no longer read; the server logs a warning when it is set. +- A missing or invalid setting no longer crashes the server or a request. The server starts, routes that need the setting answer 503 naming it, and `/health/ready` reports it. +- Shared credentials expire one year after they are shared (`CREDENTIAL_TTL_DAYS`). Records stored by 2.x have no expiry date and are treated as expiring one year after they were created. +- The MongoDB store creates a unique index on `id` and a TTL index on `expiresAt`. A collection that already has a different index named `id_1` cannot share credentials until that index is removed; `/health/ready` names it. +- `npm test` runs the unit tests (Vitest). The Playwright tests moved to `npm run test:e2e`. +### Added +- Credential stores: `memory` (local development and tests), `mongodb` and `dynamodb`. +- `DB_URI`, a plain `mongodb://` or `mongodb+srv://` connection string, as an alternative to `DB_HOST`, `DB_USER` and `DB_PASS`. +- A 350 KB limit on a shared credential: larger ones get 413 "Credential too large to share". +- `/health/ready`: 200 when every setting is valid and the credential store answers, otherwise 503 naming what is wrong. +- `/api/config`: whether exchanges are on, and where wallets reach them. The landing page reads it. +- Limits that keep every request inside AWS Lambda's: a 20 second deadline on `/api/verify` and on `/api/proxy`'s fetch (504), a 5 MB limit on request bodies (413), and a 5 MB limit on documents `/api/proxy` fetches (502). +- `npm run build:lambda`, which builds `dist/lambda/` for AWS Lambda with the Lambda Web Adapter. +- `settings.contract.json`, every environment variable the app reads, checked against the code by a unit test. +- CI on every pull request: unit tests, the store tests against MongoDB and DynamoDB Local, the Lambda build with a smoke test, and the Docker image with MongoDB. ### Changed -- Node 24; Next 15.5.29 +- Node 24; Next 15.5.29. +- `GET /api/credentials/{id}` no longer returns MongoDB's `_id`. +- `EXCHANGES=on` is refused on AWS Lambda: exchanges are kept in process memory. +- The Playwright tests no longer compare screenshots; they check the verification icons and that images loaded. +### Fixed +- A credential that cannot be read (unknown, unshared or expired) returns 404 with an error body, instead of 500. +- `/api/verify` answers 400 to a body that is not JSON, instead of 500. +- The Docker image listens on every interface, so `/api/healthz` works inside the container. ## 2.0.2 ### Added diff --git a/Dockerfile b/Dockerfile index ba8c30b2..cb531db9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,6 +51,9 @@ ENV PORT=3000 # server.js is created by next build from the standalone output # https://nextjs.org/docs/pages/api-reference/config/next-config-js/output -# ENV HOSTNAME="0.0.0.0" +# Listen on every interface. Docker sets HOSTNAME to the container id, which +# would make server.js listen on that interface only, so /api/healthz could +# not reach the server at localhost. +ENV HOSTNAME="0.0.0.0" CMD ["node", "server.js"] diff --git a/README.md b/README.md index 33b027dc..dbdaebc6 100644 --- a/README.md +++ b/README.md @@ -117,9 +117,9 @@ The Learner Credential Wallet also provides options making it easy to share that The storage service itself is simply three API endpoints for storing, retrieving, and deleting a credential. You can find them in the [/app/api/credentials/route.ts](/app/api/credentials/route.ts) file. -The api endpoints save to a mongo backend, which you will have to setup. We've used Mongo Atlas ourselves, but you can of course use whatever Mongo setup you like. +The api endpoints save to a credential store, which you choose with the `CREDENTIAL_STORE` setting: MongoDB (see [MongoDB](#mongodb)), Amazon DynamoDB (see [AWS Lambda](#aws-lambda)), or, for local development and tests only, the server's memory. A shared credential stays viewable for a year (`CREDENTIAL_TTL_DAYS`), and can be at most 350 KB. -When storing a credential with an intial POST of the credential to /api/credentials the server will put the credential into mongo and return a list of three urls, like so: +When storing a credential with an intial POST of the credential to /api/credentials the server will put the credential into the store and return a list of three urls, like so: ```JSON { @@ -144,6 +144,41 @@ Worth noting is that the same effect as the 'view' url can be achieved with a cr VerifierPlus knows to go fetch the credential, verify it, and display it in the rendered view. +## Settings + +verifier-plus is configured by environment variables. [settings.contract.json](./settings.contract.json) lists every one the app reads, and a unit test keeps it in step with the code. The ones you set: + +| Setting | Required | Purpose | +|---|---|---| +| `CREDENTIAL_STORE` | always | `memory`, `mongodb` or `dynamodb`. `memory` loses every shared credential on restart: local development and tests only. | +| `EXCHANGES` | always | `on` or `off`: whether the landing page can request credentials from the Learner Credential Wallet. See [below](#verifiable-presentation-request-exchange). | +| `EXCHANGE_SERVER_URL` | no | Where wallets reach the exchange, when exchanges are on. Defaults to the address the browser used to reach the page. | +| `CREDENTIAL_TTL_DAYS` | no | How many days a shared credential stays viewable. Default 365. | +| `DB_URI` | for `mongodb`, unless `DB_HOST` is set | A `mongodb://` or `mongodb+srv://` connection string. | +| `DB_HOST`, `DB_USER`, `DB_PASS` | for `mongodb`, unless `DB_URI` is set | The 2.x way to connect to MongoDB Atlas: the app builds `mongodb+srv://DB_USER:DB_PASS@DB_HOST`. | +| `DB_NAME`, `DB_COLLECTION` | no | Default `verifier-plus` and `credentials`. | +| `CREDENTIAL_TABLE` | for `dynamodb` | The DynamoDB table. | +| `AWS_REGION` | for `dynamodb` | The table's region. AWS Lambda sets it. | +| `DYNAMODB_ENDPOINT` | no | Only for [DynamoDB Local](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html), such as `http://localhost:8000`. | + +A missing or invalid setting does not stop the server. Routes that need it answer 503 naming it, and `GET /health/ready` answers 503 with a list of every problem, so check it after a deployment: + +``` +$ curl http://localhost:3000/health/ready +{"status":"UP","problems":[],"components":{"credentialStore":{"status":"UP","durationMs":2}}} +``` + +### Upgrading from 2.x + +3.0.0 requires two settings that 2.x did not have. If you set only `DB_USER`, `DB_PASS` and `DB_HOST`, add: + +``` +CREDENTIAL_STORE=mongodb +EXCHANGES=on +``` + +`EXCHANGES=on` keeps the "request credentials from the Learner Credential Wallet" option; use `off` to drop it. If you set `NEXT_PUBLIC_EXCHANGE_SERVER_URL`, rename it to `EXCHANGE_SERVER_URL`. Shared credentials now expire after a year; ones 2.x stored count from when they were shared. See the [CHANGELOG](./CHANGELOG.md) for the rest. + ## Local Development Clone the repo then: @@ -155,6 +190,8 @@ $ npm run dev *This spins up a [dev server](http://localhost:3000) hosted at `http://localhost:3000`, which you can now open in a web browser.* +`npm run dev` needs no database: [.env.development](./.env.development) sets `CREDENTIAL_STORE=memory` and `EXCHANGES=on`, so sharing works until the server stops. To use MongoDB or DynamoDB locally, set the settings for it in `.env.local`, which overrides `.env.development`. + >[!WARNING] >Make sure you run the right npm script. There are two sets of scripts, one in the package.json in the root directory and another in the .next/standalone/package.json directory. The latter is for running on the server, and if you run it locally it doesn't work properly. It is particularly easy to accidentally run the standalone script if you are working in Visual Code because the standalone scripts appear above the regular scripts in the VCode NPM Scripts tab. Make sure you run these: @@ -162,17 +199,17 @@ $ npm run dev The development server updates as you save changes to the underlying files. -Note that unless you've also configured a mongo backend as described in the [MongoDB](#mongodb) section below, then the credentials api endpoints won't work, but all verification should work as expected. - ## MongoDB -Th credential storage part of VerifierPlus requires MongoDB for its backend storage. To set up MongoDB for this app: +Set `CREDENTIAL_STORE=mongodb` and either `DB_URI` (any MongoDB, such as `mongodb://localhost:27017`) or, as in 2.x, `DB_HOST`, `DB_USER` and `DB_PASS` for a MongoDB Atlas cluster. To set up Atlas: * create a Mongo Atlas cluster. * from there create a collection, as well as a user with read and write permissions. * copy `.env.example` to `.env` * copy the connection details for your Atlas cluster into the appropriate fields in the `.env` file. +On first use the app creates two indexes on the collection: a unique index on `id`, and a TTL index on `expiresAt` that has MongoDB delete each record when it expires. If the collection already has a different index named `id_1`, sharing fails and `/health/ready` names the index to remove. Records that 2.x stored have no `expiresAt`; the app treats them as expiring `CREDENTIAL_TTL_DAYS` after their `createdAt`, and MongoDB does not delete them. + > [!TIP] > If the app can't connect to your Mongo Atlas collection, make sure that you've added your server IP to the whitelist for your Mongo Atlas account. @@ -190,6 +227,13 @@ Th credential storage part of VerifierPlus requires MongoDB for its backend stor We've set the configuation values in the 'environment' sections of the compose file, but you can also use a .env file, like the .env.example we provide. The .env file may be more secure. + Both compose files set `CREDENTIAL_STORE=mongodb` and `EXCHANGES=on`, which 3.0.0 requires (see [Upgrading from 2.x](#upgrading-from-2x)). To run the image by hand: + +``` +$ docker build -t verifier-plus . +$ docker run -p 3000:3000 -e CREDENTIAL_STORE=mongodb -e DB_URI=mongodb://your-mongo-host:27017 -e EXCHANGES=on verifier-plus +``` + > [!TIP] > If, when deploying to a different architecture, you get errors that seem related to tailwind, it may be that you need to include specific builds of the [lightningcss](https://lightningcss.dev) library, which [tailwind](https://tailwindcss.com) uses under the hood. The error should tell you which specific build is needed. You can then find the right package in npm and install it as an optionalDependency as we've already done for the linux build we needed for our AWS deployment: `npm i lightningcss-linux-x64-musl --save-optional`. You'll see in the optionalDependencies section of [package.json](./package.json) that we've also installed another build for an M4 Mac, `lightningcss-linux-arm64-musl`. @@ -205,25 +249,58 @@ Th credential storage part of VerifierPlus requires MongoDB for its backend stor See [.env.example](./.env.example) for an example + The exchange is temporary: [transaction-service](https://github.com/digitalcredentials/transaction-service) is its planned home. The code to remove then is marked `TEMPORARY(transaction-service)`. + +## AWS Lambda + + `npm run build:lambda` builds the app for AWS Lambda into `dist/lambda/`: the Next.js standalone server, its static files, and `run.sh`, which the [Lambda Web Adapter](https://github.com/awslabs/aws-lambda-web-adapter) starts. Build on Linux x86_64 for a deployable artifact, because the build includes native modules for the platform it ran on. + + On Lambda, use `CREDENTIAL_STORE=dynamodb` with `CREDENTIAL_TABLE`, and `EXCHANGES=off`. The table's key is the string attribute `id`, and its TTL attribute is `expiresAt`. The Digital Credentials Consortium's deployment lives in its platform repository, not here. + + To try the build locally: + +``` +$ npm run build:lambda +$ CREDENTIAL_STORE=memory EXCHANGES=off PORT=3000 dist/lambda/run.sh +``` + ## Testing -We use [Playwright](https://playwright.dev) for testing, pretty much as described on the excellent Playwright site, so we won't reproduce the Playwright documentation. +### Unit tests + +`npm test` runs the unit tests with [Vitest](https://vitest.dev). They need no database and no network: each store's tests run against the memory store. + +`npm run test:stores` runs the same store tests against MongoDB and DynamoDB Local as well. Start both first with [docker-compose.test.yml](./docker-compose.test.yml): + +``` +$ docker compose -f docker-compose.test.yml up -d +$ npm run test:stores +``` + +`TEST_STORES` picks the stores (a comma list of `memory`, `mongodb`, `dynamodb`); `TEST_MONGO_URI` and `DYNAMODB_ENDPOINT` point at other servers. A store that is named but unreachable fails the run rather than being skipped. + +### End-to-end tests + +We use [Playwright](https://playwright.dev) for end-to-end testing, pretty much as described on the excellent Playwright site, so we won't reproduce the Playwright documentation. The basic idea, though, is that the playwright tests check a running server, which by default is localhost, but can be set to any server by setting `PLAYWRIGHT_TEST_URL` in [.env.playwright](./.env.playwright), like so: -`PLAYWRIGHT_TEST_URL=https://stage.verifierplus.org` +`PLAYWRIGHT_TEST_URL=https://verifierplus.org` This therefore allows us to run end to end tests on our local development server, on a staging server, or on a production server. Any running instance of verifier-plus. You can also pass the value in on the command line if you like, e.g., -`PLAYWRIGHT_TEST_URL=https://stage.verifierplus.org npm run test:e2e` +`PLAYWRIGHT_TEST_URL=http://localhost:3000 npm run test:e2e` + +`npm run test:e2e` runs three projects: `API` (the credential API), `DesktopChrome` (the pages), and `Lambda` (what a deployment on AWS Lambda must get right: readiness, reads straight after writes, and the size limits). The test that requests credentials from the wallet asks `/api/config` first and is skipped when exchanges are off. Some tests fetch credentials and registries from the internet. Note too that you can set which browsers you'd like to run the tests on using the --project flag as described in this [Playwright doc](https://playwright.dev/docs/running-tests#run-tests-on-different-browsers). Note that you'll have to have defined the projects in the [playwright.config.ts](./playwright.config.ts). ->[!NOTE] ->We've set a fairly relaxed maxDiffPixels and maxDiffPixelRatio in [playwright.config.ts](./playwright.config.ts) for the screenshot matching because our tests were failing because of inconsequential differences between the images. You may want to change those if need be. +### CI + +[.github/workflows/ci.yml](./.github/workflows/ci.yml) runs on every pull request: the unit tests and types, the store tests against MongoDB and DynamoDB Local, the Lambda build with the end-to-end tests against `dist/lambda/run.sh`, and the Docker image with MongoDB and the end-to-end tests. >[!TIP] >If for whatever reason you don't want to set the playwright PLAYWRIGHT_TEST_URL as an environment variable you can of course also directly change the baseURL in [playwright.config.ts](./playwright.config.ts). diff --git a/app/lib/settings.contract.test.ts b/app/lib/settings.contract.test.ts new file mode 100644 index 00000000..38325458 --- /dev/null +++ b/app/lib/settings.contract.test.ts @@ -0,0 +1,94 @@ +import { describe, expect, it } from 'vitest'; + +import { GET } from '@/app/health/ready/route'; +import { createAppContext } from '@/lib/context/app-context'; +import { runInContext } from '@/lib/context/context-store'; +import contract from '@/settings.contract.json'; + +import { type Env, readSettings } from './settings'; + +type Entry = (typeof contract.settings)[number]; +const entries: Entry[] = contract.settings; +const byName = new Map(entries.map((entry) => [entry.name, entry])); + +/** A minimal environment with no problems. */ +const validEnv: Env = { CREDENTIAL_STORE: 'memory', EXCHANGES: 'off' }; + +/** Environments that between them take every branch of readSettings. */ +const scenarios: Env[] = [ + validEnv, + { CREDENTIAL_STORE: 'mongodb', DB_URI: 'mongodb://localhost:27017', EXCHANGES: 'on' }, + { CREDENTIAL_STORE: 'mongodb', DB_HOST: 'cluster.example.net', DB_USER: 'u', DB_PASS: 'p', EXCHANGES: 'off' }, + { CREDENTIAL_STORE: 'dynamodb', CREDENTIAL_TABLE: 't', AWS_REGION: 'us-east-1', EXCHANGES: 'off' }, + { CREDENTIAL_STORE: 'memory', EXCHANGES: 'on', AWS_LAMBDA_FUNCTION_NAME: 'verifier-plus' }, +]; + +/** The names readSettings looks up for env. */ +function namesRead(env: Env): Set { + const names = new Set(); + const recording = new Proxy(env, { + get(target, name) { + if (typeof name === 'string') names.add(name); + return Reflect.get(target, name); + }, + has(target, name) { + if (typeof name === 'string') names.add(name); + return Reflect.has(target, name); + }, + }); + readSettings(recording); + return names; +} + +describe('settings.contract.json', () => { + it('names each setting once, with every field', () => { + expect(new Set(entries.map((entry) => entry.name)).size).toBe(entries.length); + for (const entry of entries) { + expect(entry, entry.name).toEqual({ + name: expect.stringMatching(/^[A-Z][A-Z0-9_]*$/), + required: expect.stringMatching(/^(always|never|when .+)$/), + values: expect.anything(), + default: entry.default === null ? null : expect.any(String), + purpose: expect.any(String), + readBy: expect.stringMatching(/^(app|next)$/), + docker: expect.stringMatching(/^(you|image|unused)$/), + lambda: expect.stringMatching(/^(template|runtime|run\.sh|unused)$/), + }); + } + }); + + it('lists every name the settings module reads', () => { + const read = new Set(scenarios.flatMap((env) => [...namesRead(env)])); + for (const name of read) { + expect(byName.get(name)?.readBy, `${name} is read by app/lib/settings.ts but not in the contract`).toBe('app'); + } + }); + + it('lists no app setting that the settings module never reads', () => { + const read = new Set(scenarios.flatMap((env) => [...namesRead(env)])); + const unread = entries.filter((entry) => entry.readBy === 'app' && !read.has(entry.name)).map((e) => e.name); + expect(unread).toEqual([]); + }); + + const alwaysRequired = entries.filter((entry) => entry.required === 'always').map((entry) => entry.name); + + it('has always-required settings', () => { + expect(alwaysRequired).toEqual(['CREDENTIAL_STORE', 'EXCHANGES']); + }); + + it.each(alwaysRequired)('makes /health/ready answer 503 naming %s when it is left out', async (name) => { + const env = { ...validEnv }; + delete env[name]; + + const res = await runInContext(await createAppContext(env), () => GET()); + + expect(res.status).toBe(503); + const { problems } = await res.json(); + expect(problems).toEqual(expect.arrayContaining([expect.stringContaining(name)])); + }); + + it('is ready with only the always-required settings', async () => { + const res = await runInContext(await createAppContext(validEnv), () => GET()); + expect(res.status).toBe(200); + }); +}); diff --git a/docker-compose.example.prod.yml b/docker-compose.example.prod.yml index c27ed0cb..c87e3519 100644 --- a/docker-compose.example.prod.yml +++ b/docker-compose.example.prod.yml @@ -14,6 +14,14 @@ services: - HEALTH_CHECK_WEB_HOOK=a webhook like those of Slack - HEALTH_CHECK_SERVICE_URL=http://testing.dcconsortium.org/api/healthz - the healthz endpoint - HEALTH_CHECK_SERVICE_NAME=VERIFIER-PLUS + # Required since 3.0.0: where shared credentials are kept, and whether + # the landing page can request credentials from the Learner Credential Wallet. + - CREDENTIAL_STORE=mongodb + - EXCHANGES=on + # Optional: where wallets reach the exchange (defaults to the page's address). + # - EXCHANGE_SERVER_URL=https://your server host + # MongoDB: DB_URI, or DB_HOST with DB_USER and DB_PASS + # - DB_URI=mongodb://your mongo host:27017 - DB_USER=your mongo user - DB_PASS=and mongo password - DB_HOST=and mongo host diff --git a/docker-compose.example.yml b/docker-compose.example.yml index 6f974ca5..233458ac 100644 --- a/docker-compose.example.yml +++ b/docker-compose.example.yml @@ -14,6 +14,14 @@ services: - HEALTH_CHECK_WEB_HOOK=a webhook like those of Slack - HEALTH_CHECK_SERVICE_URL=http://localhost:3000/api/healthz - the healthz endpoint - HEALTH_CHECK_SERVICE_NAME=VERIFIER-PLUS + # Required since 3.0.0: where shared credentials are kept, and whether + # the landing page can request credentials from the Learner Credential Wallet. + - CREDENTIAL_STORE=mongodb + - EXCHANGES=on + # Optional: where wallets reach the exchange (defaults to the page's address). + # - EXCHANGE_SERVER_URL=https://your server host + # MongoDB: DB_URI, or DB_HOST with DB_USER and DB_PASS + # - DB_URI=mongodb://your mongo host:27017 - DB_USER=your mongo user - DB_PASS=and mongo password - DB_HOST=and mongo host diff --git a/package-lock.json b/package-lock.json index 7bf2a3b5..cd01af28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "verifier-plus", - "version": "2.0.2", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "verifier-plus", - "version": "2.0.2", + "version": "3.0.0", "dependencies": { "@aws-sdk/client-dynamodb": "^3.1166.0", "@aws-sdk/lib-dynamodb": "^3.1166.0", diff --git a/package.json b/package.json index 620101ad..2361f452 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,17 @@ { "name": "verifier-plus", - "version": "2.0.2", + "version": "3.0.0", "engines": { "node": ">=24 <25" }, "scripts": { "dev": "next dev --turbopack", "build": "next build --turbopack", + "build:lambda": "bash scripts/build-lambda.sh", "start": "next start", "test": "vitest run", "test:watch": "vitest", - "test:e2e": "playwright test --project=DesktopChrome --project=API", + "test:e2e": "playwright test --project=API --project=DesktopChrome --project=Lambda", "test:stores": "TEST_STORES=memory,mongodb,dynamodb vitest run" }, "dependencies": { diff --git a/playwright.config.ts b/playwright.config.ts index a424bf77..2d05f4c4 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -21,6 +21,8 @@ export default defineConfig({ retries: 2, // Artifacts folder where screenshots, videos, and traces are stored. outputDir: "test-results/", + // In CI, also write an HTML report (playwright-report/) to upload. + reporter: process.env.CI ? [["list"], ["html", { open: "never" }]] : "list", // Run your local dev server before starting the tests: @@ -62,30 +64,34 @@ export default defineConfig({ } } }, + { + // What a deployment on AWS Lambda must get right; no browser. + name: 'Lambda', + testMatch: /.*lambda.spec.ts/, + retries: 0, + use: { + extraHTTPHeaders: { + 'Content-Type': 'application/json' + } + } + }, { name: "DesktopChrome", - testIgnore: /.*api.spec.ts/, + testIgnore: /.*(api|lambda).spec.ts/, use: { ...devices["Desktop Chrome"], }, - expect: { - toHaveScreenshot: { - maxDiffPixels: 2000, // Allow up to 2000 pixels to be different - maxDiffPixelRatio: 0.1, // Allow up to 10% of pixels to be different - //threshold: 0.1, // Adjust color difference tolerance - }, - }, }, // { // name: 'Desktop Firefox', - //. testIgnore: /.*api.spec.ts/, + //. testIgnore: /.*(api|lambda).spec.ts/, // use: { // ...devices['Desktop Firefox'], // }, // }, // { // name: 'Desktop Safari', - //. testIgnore: /.*api.spec.ts/, + //. testIgnore: /.*(api|lambda).spec.ts/, // use: { // ...devices['Desktop Safari'], // }, @@ -93,21 +99,14 @@ export default defineConfig({ // Test against mobile viewports. { name: "MobileChrome", - testIgnore: /.*api.spec.ts/, + testIgnore: /.*(api|lambda).spec.ts/, use: { ...devices["Pixel 5"], }, - expect: { - toHaveScreenshot: { - maxDiffPixels: 2000, // Allow up to 2000 pixels to be different - maxDiffPixelRatio: 0.1, // Allow up to 10% of pixels to be different - //threshold: 0.1, // Adjust color difference tolerance - }, - }, }, // { // name: "MobileSafari", - // testIgnore: /.*api.spec.ts/, + // testIgnore: /.*(api|lambda).spec.ts/, // use: devices["iPhone 12"], // }, ], diff --git a/scripts/build-lambda.sh b/scripts/build-lambda.sh new file mode 100755 index 00000000..95faa274 --- /dev/null +++ b/scripts/build-lambda.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash +# Builds the app for AWS Lambda with the Lambda Web Adapter, into dist/lambda/. +# +# The result is a directory, not a zip: the deployment zips it. Lambda runs +# dist/lambda/run.sh through the adapter, which proxies each request to the +# Next.js standalone server on PORT. +# +# Build on Linux x86_64 for a deployable artifact: the standalone output holds +# native modules (sharp) for the platform it was built on. +set -euo pipefail + +cd "$(dirname "$0")/.." +out=dist/lambda + +npm run build + +rm -rf "$out" +mkdir -p "$out" + +# The same files the Dockerfile copies into its runner image. +cp -R .next/standalone/. "$out/" +mkdir -p "$out/.next" +cp -R .next/static "$out/.next/static" +cp -R public "$out/public" + +# Lambda's file system is read-only except /tmp, so Next's cache goes there. +rm -rf "$out/.next/cache" +ln -s /tmp/cache "$out/.next/cache" + +cat > "$out/run.sh" <<'EOF' +#!/bin/bash +# Lambda Web Adapter entry. The adapter starts this and proxies HTTP API +# events to the server on PORT. Lambda starts it from the code directory; +# the cd lets it run from anywhere else too (CI's smoke test). +cd "$(dirname "$0")" +mkdir -p /tmp/cache +export HOSTNAME=0.0.0.0 +export PORT="${PORT:-8080}" +exec node server.js +EOF +chmod 755 "$out/run.sh" + +missing=0 +for path in run.sh server.js .next/static public; do + if [ ! -e "$out/$path" ]; then + echo "build:lambda: $out/$path is missing" >&2 + missing=1 + fi +done +if [ ! -x "$out/run.sh" ]; then + echo "build:lambda: $out/run.sh is not executable" >&2 + missing=1 +fi +if [ "$missing" -ne 0 ]; then + exit 1 +fi + +echo "build:lambda: wrote $out/" diff --git a/settings.contract.json b/settings.contract.json new file mode 100644 index 00000000..8a570c45 --- /dev/null +++ b/settings.contract.json @@ -0,0 +1,165 @@ +{ + "$comment": "Every environment variable verifier-plus reads. A deployment sets the ones marked for it; app/lib/settings.contract.test.ts checks this file against app/lib/settings.ts. 'required' is 'always', 'never', or the condition under which the setting must be set. 'readBy' is 'app' (app/lib/settings.ts) or 'next' (the Next.js standalone server). 'docker' and 'lambda' say who sets it there: 'you' (the operator), 'image' (the Dockerfile), 'run.sh' (dist/lambda/run.sh), 'template' (the deployment's template), 'runtime' (AWS Lambda itself), or 'unused'.", + "settings": [ + { + "name": "CREDENTIAL_STORE", + "required": "always", + "values": ["memory", "mongodb", "dynamodb"], + "default": null, + "purpose": "Where shared credentials are kept. memory keeps them in the process and loses them on restart (local development and tests only).", + "readBy": "app", + "docker": "you", + "lambda": "template" + }, + { + "name": "CREDENTIAL_TTL_DAYS", + "required": "never", + "values": "a positive whole number of days", + "default": "365", + "purpose": "How long a shared credential stays viewable after it is shared.", + "readBy": "app", + "docker": "you", + "lambda": "template" + }, + { + "name": "CREDENTIAL_TABLE", + "required": "when CREDENTIAL_STORE=dynamodb", + "values": "a DynamoDB table name", + "default": null, + "purpose": "The table shared credentials are kept in. Its key is the string attribute id, and its TTL attribute is expiresAt.", + "readBy": "app", + "docker": "unused", + "lambda": "template" + }, + { + "name": "DYNAMODB_ENDPOINT", + "required": "never", + "values": "a URL", + "default": null, + "purpose": "Only for DynamoDB Local, such as http://localhost:8000. Unset to reach AWS.", + "readBy": "app", + "docker": "unused", + "lambda": "unused" + }, + { + "name": "DB_URI", + "required": "when CREDENTIAL_STORE=mongodb, unless DB_HOST is set", + "values": "a mongodb:// or mongodb+srv:// connection string", + "default": null, + "purpose": "The MongoDB connection string, used as given. Set this or DB_HOST, not both.", + "readBy": "app", + "docker": "you", + "lambda": "unused" + }, + { + "name": "DB_HOST", + "required": "when CREDENTIAL_STORE=mongodb, unless DB_URI is set", + "values": "a MongoDB Atlas host", + "default": null, + "purpose": "The 2.x way to connect: the app builds mongodb+srv://DB_USER:DB_PASS@DB_HOST.", + "readBy": "app", + "docker": "you", + "lambda": "unused" + }, + { + "name": "DB_USER", + "required": "when DB_HOST is set", + "values": "a MongoDB user", + "default": null, + "purpose": "The user for DB_HOST.", + "readBy": "app", + "docker": "you", + "lambda": "unused" + }, + { + "name": "DB_PASS", + "required": "when DB_HOST is set", + "values": "a MongoDB password", + "default": null, + "purpose": "The password for DB_HOST.", + "readBy": "app", + "docker": "you", + "lambda": "unused" + }, + { + "name": "DB_NAME", + "required": "never", + "values": "a MongoDB database name", + "default": "verifier-plus", + "purpose": "The database shared credentials are kept in.", + "readBy": "app", + "docker": "you", + "lambda": "unused" + }, + { + "name": "DB_COLLECTION", + "required": "never", + "values": "a MongoDB collection name", + "default": "credentials", + "purpose": "The collection shared credentials are kept in.", + "readBy": "app", + "docker": "you", + "lambda": "unused" + }, + { + "name": "EXCHANGES", + "required": "always", + "values": ["on", "off"], + "default": null, + "purpose": "Whether the landing page offers to request credentials from the Learner Credential Wallet. Exchanges live in process memory, so on is refused on Lambda.", + "readBy": "app", + "docker": "you", + "lambda": "template" + }, + { + "name": "EXCHANGE_SERVER_URL", + "required": "never", + "values": "an absolute http or https URL", + "default": "the address the browser used to reach the page", + "purpose": "Where wallets reach the exchange. Read only when EXCHANGES=on.", + "readBy": "app", + "docker": "you", + "lambda": "unused" + }, + { + "name": "AWS_REGION", + "required": "when CREDENTIAL_STORE=dynamodb", + "values": "an AWS region", + "default": null, + "purpose": "The region of CREDENTIAL_TABLE. Provided by the runtime on Lambda; set it yourself only to run the dynamodb store elsewhere.", + "readBy": "app", + "docker": "unused", + "lambda": "runtime" + }, + { + "name": "AWS_LAMBDA_FUNCTION_NAME", + "required": "never", + "values": "the function's name", + "default": null, + "purpose": "Provided by the runtime. Its presence tells the app it is on Lambda, where EXCHANGES=on is refused.", + "readBy": "app", + "docker": "unused", + "lambda": "runtime" + }, + { + "name": "PORT", + "required": "never", + "values": "a TCP port", + "default": "3000 (Docker), 8080 (Lambda)", + "purpose": "The port the server listens on. On Lambda, the port the Web Adapter forwards to.", + "readBy": "next", + "docker": "image", + "lambda": "run.sh" + }, + { + "name": "HOSTNAME", + "required": "never", + "values": "an address to listen on", + "default": "0.0.0.0", + "purpose": "The interface the server listens on.", + "readBy": "next", + "docker": "image", + "lambda": "run.sh" + } + ] +} diff --git a/tests/credential.spec.ts b/tests/credential.spec.ts index f98d5ce4..0c789be2 100644 --- a/tests/credential.spec.ts +++ b/tests/credential.spec.ts @@ -97,8 +97,8 @@ test("full credential display OBv3 VCv2", async ({ page }) => { // confirm the credential image is shown const credentialImageURL = testVC.credentialSubject.achievement.image.id - await expect(page.getByTestId(TestId.AchievementImage)).toHaveScreenshot(); const credentialImage = page.getByTestId(TestId.AchievementImage) + await expect.poll(() => credentialImage.evaluate((el: HTMLImageElement) => el.complete && el.naturalWidth > 0)).toBe(true) const srcAttrValue = await credentialImage.getAttribute('src'); await expect(srcAttrValue).toEqual(credentialImageURL) }); @@ -145,8 +145,8 @@ test("full credential display OBv3 VCv1", async ({ page }) => { // confirm the credential image is shown const credentialImageURL = testVC.credentialSubject.achievement.image.id - await expect(page.getByTestId(TestId.AchievementImage)).toHaveScreenshot(); const credentialImage = page.getByTestId(TestId.AchievementImage) + await expect.poll(() => credentialImage.evaluate((el: HTMLImageElement) => el.complete && el.naturalWidth > 0)).toBe(true) const srcAttrValue = await credentialImage.getAttribute('src'); await expect(srcAttrValue).toEqual(credentialImageURL) }); diff --git a/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv1-1-Desktop-Chrome-darwin.png b/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv1-1-Desktop-Chrome-darwin.png deleted file mode 100644 index 884f4e8e12c3e129c3bca1eef0059cd1186be70c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2457 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 Y01`t|K*0aGr2qf`07*qoM6N<$f^jL3GXMYp diff --git a/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv1-1-Mobile-Chrome-darwin.png b/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv1-1-Mobile-Chrome-darwin.png deleted file mode 100644 index a417de93bd6eb7aaa936f098391f7c2ae91a7fa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2354 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 Y01`t|K*0aGr2qf`07*qoM6N<$f^jL3GXMYp diff --git a/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv1-1-MobileChrome-darwin.png b/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv1-1-MobileChrome-darwin.png deleted file mode 100644 index a417de93bd6eb7aaa936f098391f7c2ae91a7fa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2354 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 Y01`t|K*0aGr2qf`07*qoM6N<$f^jL3GXMYp diff --git a/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv2-1-Desktop-Chrome-darwin.png b/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv2-1-Desktop-Chrome-darwin.png deleted file mode 100644 index 884f4e8e12c3e129c3bca1eef0059cd1186be70c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2457 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 Y01`t|K*0aGr2qf`07*qoM6N<$f^jL3GXMYp diff --git a/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv2-1-Mobile-Chrome-darwin.png b/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv2-1-Mobile-Chrome-darwin.png deleted file mode 100644 index a417de93bd6eb7aaa936f098391f7c2ae91a7fa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2354 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 Y01`t|K*0aGr2qf`07*qoM6N<$f^jL3GXMYp diff --git a/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv2-1-MobileChrome-darwin.png b/tests/credential.spec.ts-snapshots/full-credential-display-OBv3-VCv2-1-MobileChrome-darwin.png deleted file mode 100644 index a417de93bd6eb7aaa936f098391f7c2ae91a7fa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2354 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 Y01`t|K*0aGr2qf`07*qoM6N<$f^jL3GXMYp diff --git a/tests/helpers/resultLog.ts b/tests/helpers/resultLog.ts new file mode 100644 index 00000000..1a804c54 --- /dev/null +++ b/tests/helpers/resultLog.ts @@ -0,0 +1,61 @@ +import { expect, type Page } from "@playwright/test"; +import { LogMessages } from "@/components/ResultLog/ResultLog"; +import { TestId } from "@/lib/testIds"; + +/** The accessible names of the status icons beside each verification log line. */ +export enum LogIcon { + Positive = 'green checkmark', + Warning = 'yellow warning', + Negative = 'red x', +} + +/** The icon ResultLog shows beside each message. */ +const iconForMessage: Record = { + [LogMessages.WellFormed]: LogIcon.Positive, + [LogMessages.ValidSignature]: LogIcon.Positive, + [LogMessages.KnownIssuer]: LogIcon.Positive, + [LogMessages.NotRevoked]: LogIcon.Positive, + [LogMessages.HasNotExpired]: LogIcon.Positive, + [LogMessages.NoExpirationDate]: LogIcon.Positive, + [LogMessages.NotSuspended]: LogIcon.Positive, + [LogMessages.UnknownIssuer]: LogIcon.Warning, + [LogMessages.HasExpired]: LogIcon.Warning, + [LogMessages.MalFormed]: LogIcon.Negative, + [LogMessages.InvalidSignature]: LogIcon.Negative, + [LogMessages.Revoked]: LogIcon.Negative, + [LogMessages.UncheckedRevocation]: LogIcon.Negative, + [LogMessages.Suspended]: LogIcon.Negative, + // not log lines + [LogMessages.GeneralError]: undefined, + [LogMessages.UnknownError]: undefined, +}; + +export type ExpectedLog = { + wellFormed: LogMessages, + signature: LogMessages, + issuer: LogMessages, + revocation: LogMessages, + expiry: LogMessages, +}; + +const lineTestIds: Record = { + wellFormed: TestId.MalformedLogMsg, + signature: TestId.SigningLogMsg, + issuer: TestId.IssuerLogMsg, + revocation: TestId.RevocationLogMsg, + expiry: TestId.ExpirationLogMsg, +}; + +/** + * Checks the status icon beside each log line: a green checkmark, yellow + * warning or red x, as its message calls for. Each line is an icon and its + * message under one parent element. + */ +export async function expectLogIcons(page: Page, expected: ExpectedLog) { + for (const [line, message] of Object.entries(expected) as [keyof ExpectedLog, LogMessages][]) { + const icon = iconForMessage[message]; + if (!icon) throw new Error(`'${message}' is not a log line message`); + const lineElement = page.getByTestId(lineTestIds[line]).locator('..'); + await expect(lineElement.getByRole('img'), `${line} icon`).toHaveAccessibleName(icon); + } +} diff --git a/tests/lambda.spec.ts b/tests/lambda.spec.ts new file mode 100644 index 00000000..68576d0a --- /dev/null +++ b/tests/lambda.spec.ts @@ -0,0 +1,68 @@ +import { test, expect, type APIRequestContext } from "@playwright/test"; +import { getTestVP } from "@/tests/fixtures/testVP"; + +/** + * The Lambda group: what a deployment on AWS Lambda must get right that a + * single long-running server gets right for free. Runs against any server + * (`--project=Lambda`); no browser. On Lambda, requests in parallel reach more + * than one sandbox, so every read must find what another sandbox wrote. + */ + +const MAX_BODY_BYTES = 5 * 1024 * 1024; +const MAX_SHARED_VP_BYTES = 350 * 1024; + +/** Shares the test VP, reads it straight back, then unshares it. */ +async function roundTrip(request: APIRequestContext) { + const testVP = getTestVP(); + const postReply = await request.post('/api/credentials/', { data: testVP }); + expect(postReply.status()).toBe(201); + const { url } = await postReply.json(); + + const getReply = await request.get(url.get); + expect(getReply.status(), `GET ${url.get}`).toBe(200); + expect((await getReply.json()).vp).toEqual(testVP.vp); + + const deleteReply = await request.delete(url.unshare); + expect(deleteReply.ok()).toBeTruthy(); +} + +test('GET /health/ready is 200', async ({ request }) => { + const reply = await request.get('/health/ready'); + expect(reply.status(), JSON.stringify(await reply.json())).toBe(200); +}); + +test('20 share-then-read round trips, 10 of them in parallel, all read back', async ({ request }) => { + for (let i = 0; i < 10; i++) { + await roundTrip(request); + } + await Promise.all(Array.from({ length: 10 }, () => roundTrip(request))); +}); + +test('a read after unshare is 404', async ({ request }) => { + const postReply = await request.post('/api/credentials/', { data: getTestVP() }); + expect(postReply.status()).toBe(201); + const { url } = await postReply.json(); + + const deleteReply = await request.delete(url.unshare); + expect(deleteReply.ok()).toBeTruthy(); + + const getReply = await request.get(url.get); + expect(getReply.status()).toBe(404); +}); + +test('a body over 5 MB to /api/verify is 413', async ({ request }) => { + const body = JSON.stringify({ padding: 'x'.repeat(MAX_BODY_BYTES) }); + const reply = await request.post('/api/verify', { data: body }); + expect(reply.status()).toBe(413); +}); + +test('sharing a credential just over 350 KB is 413, too large', async ({ request }) => { + const testVP = getTestVP(); + const size = Buffer.byteLength(JSON.stringify(testVP.vp), 'utf8'); + testVP.vp.padding = 'x'.repeat(MAX_SHARED_VP_BYTES - size); + expect(Buffer.byteLength(JSON.stringify(testVP.vp), 'utf8')).toBeGreaterThan(MAX_SHARED_VP_BYTES); + + const reply = await request.post('/api/credentials/', { data: testVP }); + expect(reply.status()).toBe(413); + expect((await reply.json()).error).toMatch(/too large/i); +}); diff --git a/tests/log.spec.ts b/tests/log.spec.ts index e1354436..55cc341f 100644 --- a/tests/log.spec.ts +++ b/tests/log.spec.ts @@ -2,6 +2,7 @@ import { test, expect } from "@playwright/test"; import { getTamperedVCAsString } from "@/tests/fixtures/minimalVCv2"; import { LogMessages } from "@/components/ResultLog/ResultLog"; import { TestId } from "@/lib/testIds" +import { expectLogIcons } from "@/tests/helpers/resultLog"; const badDiDWebErrorMessage = "The signature could not be checked because the public signing key could not be retrieved from https://digitalcredentials.github.io/dcc-did-web-bad/did.json"; @@ -74,10 +75,8 @@ logTests.forEach(({ name, vc, expected }) => { // check expired message matches expected await expect(page.getByText(expectedMessages.expiry)).toBeVisible(); await expect(page.getByTestId(TestId.ExpirationLogMsg)).toHaveText(expectedMessages.expiry) - // finally take a screenshot of the log area to capture the combination of checkmarks and x's - // NOTE: it is very important that this screenshot be taken when the app is working/displaying correctly - // SEE: https://playwright.dev/docs/test-snapshots - await expect(page.getByTestId(TestId.ResultLog)).toHaveScreenshot(); + // finally check the combination of checkmarks, warnings and x's beside the lines + await expectLogIcons(page, expectedMessages) }) }); diff --git a/tests/log.spec.ts-snapshots/log-legacy-noStatus-noExpiry-1-Desktop-Chrome-darwin.png b/tests/log.spec.ts-snapshots/log-legacy-noStatus-noExpiry-1-Desktop-Chrome-darwin.png deleted file mode 100644 index b515713da76bcbcce9670ea1b911a70c450eb339..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9595 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 BtE~V4 diff --git a/tests/log.spec.ts-snapshots/log-legacy-noStatus-noExpiry-1-DesktopChrome-darwin.png b/tests/log.spec.ts-snapshots/log-legacy-noStatus-noExpiry-1-DesktopChrome-darwin.png deleted file mode 100644 index 413f3bb17bf8a4e9528013b37c52b36ec38bf458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10016 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 Y4sTm#&;`U2Hu6qJLIF@IW)$>407jPLfdBvi diff --git a/tests/log.spec.ts-snapshots/log-legacy-noStatus-noExpiry-1-Mobile-Chrome-darwin.png b/tests/log.spec.ts-snapshots/log-legacy-noStatus-noExpiry-1-Mobile-Chrome-darwin.png deleted file mode 100644 index 37cd20ccbc579673fcac980b762ec7593b63231f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10067 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 diff --git a/tests/log.spec.ts-snapshots/log-legacy-revoked-expired-1-DesktopChrome-darwin.png b/tests/log.spec.ts-snapshots/log-legacy-revoked-expired-1-DesktopChrome-darwin.png deleted file mode 100644 index 925b1f6a295d0e27d46c0a84d0dae718ea7432ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9274 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 diff --git a/tests/log.spec.ts-snapshots/log-legacy-revoked-expired-1-Mobile-Chrome-darwin.png b/tests/log.spec.ts-snapshots/log-legacy-revoked-expired-1-Mobile-Chrome-darwin.png deleted file mode 100644 index 45cc4b1dbff20792353f2dabaeef186444658eef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9322 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 diff --git a/tests/log.spec.ts-snapshots/log-legacy-revoked-expired-1-MobileChrome-darwin.png b/tests/log.spec.ts-snapshots/log-legacy-revoked-expired-1-MobileChrome-darwin.png deleted file mode 100644 index 45cc4b1dbff20792353f2dabaeef186444658eef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9322 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 diff --git a/tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-expired-1-Desktop-Chrome-darwin.png b/tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-expired-1-Desktop-Chrome-darwin.png deleted file mode 100644 index 66856739ca42f35962989fcc50606f8c2abf3f5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8974 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 diff --git a/tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-expired-1-MobileChrome-darwin.png b/tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-expired-1-MobileChrome-darwin.png deleted file mode 100644 index 8a75119a5225b8e5181dd4239b33c4213fd54745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9525 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 diff --git a/tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-noExpiry-1-Desktop-Chrome-darwin.png b/tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-noExpiry-1-Desktop-Chrome-darwin.png deleted file mode 100644 index b515713da76bcbcce9670ea1b911a70c450eb339..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9595 zcmbW7WmFv9)~#a%_r~4bB{;#|CAbC%PUB8+cMH(CLkD-);1Jy1wQ-l*?>XOhuKv0| zT1Jf;qiXNkwbq=^+~LZKQpgDS2=Cs#Lza;iSB3uGLO+3UAE4iC*}&6x@6g`Kh>NJZ zgHAHx^`aNw2C`k55X3mA$S0}EgHN;*f@+Y&8vZ2Mo&=)}QOZTx;+hVjA)w2u{5T0= zbJY>2tShZ6ecNACi#=Z3H~3;#wEmKPS3d6}cqg#WJ8=iv_Zol5auOsNhFl`xB1rhE zn9~B9Lt1zw#&ek!^;)1O4{0@3TSC*j}AE@mO{-Uwx%JX4~Am?FD{ruK3r7Ks#~w9W`%hV z0IVdwbfiWOVx(9L+N3ukp~vIo9WnS=F`gHKq+~y7_nJE^N8Bskh)B5vHPw;f;SP4C zXsR!FtD&eQ1*3Y(=N%;_Vexdl8f-t6wX}kS9g&`<4cY*yiM6h=#56?09*=XUt@1ad zKe9$k9WJ8WWKuE2sCKLun^JxC%Ok^|(1%ztntkqk-^lXSvI~98vhYWgW5X>bUZ~9W zf_*z}R?&L~0kBf@4D)uHhY1?p8S}O)k}-EAe0<*E)Fu$Km;ke08~HECmp$7?^lg>h z>u-4fx!Qu4E~{eX$oJpt#f`h_q2|KmsN^n^9K+F1u*lC+&5JHsSJmk#@q8hs$~9 z6MHCm?cLTpM{W)d0-O%tt6Pmf);M=68NSQ#a_2ZT**Mlf>JK~FLKf(3)O#l$31O{9 zQQb5r;%QBDej2POH8nMC#g#gZcvMKZe0v+4+mym4tR@RH+KBPmC6dw?>4$;3T|Woa z*ra(eC#-`C8Rkf-*d7j-N5ObbI264H@Emq4Z3-29nAtyTrTb17^2D7S8)&SY52U|~ zf9JGOY;wM-9GQRq7#Ob@C8hZM00X9@-*X2yxo+F@vsrE|o#)dy3=MO2=5^dhgvvc9 z*k+q`f&<@gx0@?~givR*Pq**xWiV{S9-1h^<%~Io`?LWykPUQ|D_re=<{35NC6Nz5 z8h^eTOjlU~9Xo(dZqyQn}YR4m_TQ>^ozX{CYfpi=G|42>JNlA8LE5L9+ zG*$N6ngv=+)Dw@Tk-R(;XUdi1(dJKn>kqvvdLQTQT733}EXXU;ciRCIMmNL#t_{B} z#tkni>4G<<@^VAT36~m==LdkBZFuSU_<@gi`m7e7r%O8gu8`Q6=ykLm2$%6_O|o^R z!G1sLmCwsXv)K!aWXPl2nIM`K2@jPOQC-h`wU>pnG$1Q;%=(kMD`>!B^>KYnw~jEn z%38Oo{de^IgwTPs_qSVHQ`6{Nz)L8TEGLbHSKb23ZG){&W6&5jQ#!@Ow8aFF_mQ>D zwb$xxBgc#;e?l@V3f(8YsX=MNj{7&*!PcvlyYm!|*X0p>2QJMrmE71Q=5>{=@&S3e ziftaC{suG7!7?c|xx4&5zYuJ7yVd2S;bbJIr$$NpV!s}JM7Y#yTeE-gGY7dOCe9-Y zylIPX@|NKZwBv2&s}x0k+yb~1-BA(ui{tabW&te| zlY-n8c2mS=boxGxhi6?wLm%)tSPnNR3JLj4&^=1X(#$x-acja5!1<9uf=95e(@E+{ zk?1rzIay9tZji3Y{B49dZs^uUYULwvJ;&w#o+S6C9)q0RCP{|mSUd6 zNz~%u9c+7SboDKSZSueOLb%$<@-gNY6Fr_S&(8zry&mogITbPKwbX=O8SzX<(PcGd zelm?h&QK@DZS%+&O8XUm@p-_(&>K3i1+7N!wAYC5XpJ^MznDf0kUT8qm-jBq8*D0E z6L7R;0|4^rzL%yw<=@(x`pYh{r>UcRy8}a&{=yXiS+6!QjZwX1j;=V9rdR6do-;Px zyb{LK)Y>(f;7{qq&sy8C%I7HLr|iM0$;qZ>mVdls>gujjH1~FzG~^=1q+%i)l(zpw z55C`9_!E6I2oziW-0UrvkS(NJO^825s z@eGLR_wEZ>G~q*JxtqcYX->S%s$%*?YOFfQ5{2#ZIHRDn-_MAZ3nPbfuGt0@AIe`e z4DQuDzS;BTNCGtoQz!<8%IXOdhwJZn3!eo^B0D8~{UahG^!e-U3zkWRJBRK6cEbS4 zBq_ij(7EBVM8m>ekTeyG#?r}&jqbfp9dN+xO5*)Jonp5>HNl;yvF$v;yf`E5)^bkc zeUiv7YzxmGq=eyNRp?-fuYh`l3nXm61(Dvzp|M#!A|(k4yeDcQxsQ2@1Kn4w`_JeY z5nZ^G#mbB^mlvV7{3{xC%NBgHDm<9wQq>1Q`FVs@i&y=V;*0YwrNu@N&K7n0hd3 zA&D}u50svc|Ab1MY?B2pS>Wu0T;0DU5L)aN6E!vbobHT=<)umu>&{43lPL}K(QQiC z|F++d35sL)9{f5fAUiC3FoqS(Kwni17YKXXTWo7lOgt{edQ;0Q!=2jEZtnGDY#YNx zZtl&4Er7vqqSbo?{2i8&oXjBG`-maue!`99;wFK{$PC{mMib)N<7FL+`}s#F0spIBYCn!e%L>$n{RGsQEboa+8c$Hn7L*`E!M(Z?`9bYY7lzu7_ODp@iDWxK!qTh~vRY)2lR*d89gB_J0#^q91 zKeSC57yk}Ls>8&7(yVHr`JnfQviz!*mDLu8HX0J?9y+5MdmDdBDk64(5xnkKO6t8& z7S^+6R68#LIjdHsrSNn3lj!F3?n4$%vZyEG;uZS3a-6bB?|dsI+RDnxdc4s~;Cx5K zwfem=g}AFT+3a^C*I9V|KAOBmBdAGih>gyZb*rGkgogxzoe;a57k1@mroicAd2T@i z(yRnVWt}{Q2Dotf!SzngzS#J;mFD@P zWUR-)9q|agyspxG(YJOU2|MK+RT02LNXLTY|5N4vAHv^C3u*z%j8%3B%R(gLoxWFw zXc!n|B`1%~ywfr+E}qE30kq-pF+>*u_Ja+-T3Q~qx_Kb&c7DCJ(wdkya6J>Gg(}j$ z&JZ~M?%1d1=!lqT9KI)Q1v(&(?|U|j2~-k}wA^Q$K?CGSr0CsUF44-WHqf2<{9>Z< zxMED61(mg|OjFg7x%!jW9su~yX;l{MWCOlp7maVq{kkPk?Q(B?{k`0E6&8s|%pfG0 zG_^l$z8k6+S=X$wpIoZ_{;vIX80t~1^+{RVw2pGHl7&w}T6U1COcVN!ZNdToH0d1N zjhqRivUy{b++_F;P|>oI{s`o$FD7cedx8Ng$oMD%3NRA0dqNTtB8C+~LJ;pBGj+7^ zj7Eqn0UI&aK43A=8?WYDFFB=N8=rmAw~4dNZ(tq2yH~M-QSGYHp00X!k@PFyOR3thX*Kg{} z!WVMR;Wwmy7rfr&;#JbhP`rd$7F!;+gsGCU-Df|kM-HZFW`|8U9U&o}2L(Jyd@Ou4x7Fr5n7LA(ScXb*&&ICcBC$Cqey?!29$sX3>Ox5b#0_ zZ=mHvyPUdOgoK=$>0(}UCuAkGg3(w%GuC}26W&tR3 z%_Y5JpPS*Z*4iV*%+0w!gb;kOzuP`OuI^D(k-F0ki?5oh_)S$tM-{gGZa-)tOn-Tf z;`KrsqpK*fad*9~bb$h6CL5=WTE(lze*Si9ar?>5r-s?jaM3?}?N9lfk)j60Z`iP;{)5F8VJyAg$pZY`}qi-6{;JW|DbV#MV2ZgD5P1!1w zQ1x;HB^q#tQ&mr`v;yLO=t^fw{rmk@DFC=aFW8^eKanO1)jge_FDa80p+{UZ{h&Y} z!4oedEV51PYz?m-(Jde2-0#UGD)CIiIOm6*Dl#ZfVEnna3BUXRCWq@rkqRFYAw@od zY_!{bS655v(#^q6{1o}F67QY+(!K(KxPm_6Ni@uL5*^pSOK=H3Hk8q@G(b!8|ITOr zkIMZoiu12?|5L+3_+=se3_)*s$}VvkPm1TebylL%wsH+z^mKGs-Ykb17q;n&4KvDI zj0R-wpUurRBOO*=#iT-GZ%oSY$m*FE=V;mK%~y8PM!)PYb7tC<=2~fC1+&hQlkc*b z4936svChWkETu$QtB)u7D#lgw-J2`Wh*?$OV=pu~v5X^N_oO~)M?L4$j5YzUxMc(g zfm8iH0LKcwD~5{#7lOtI*w3+d>A|2x3-@jMZj-kbZ)6L+SAG{K9A+uv74qi;_;G;Z z1wAlDT5}oWH+n@s)sDKOEPVwQl5pRlKl~*Ro5w*3yi`nfM0D%V^hajH;MV+1`&XyX z@Apr0olS@sDuamyfCBfiYch?&@u7aAaI2|y*w|IcsML-_)hr>3OQWWz-^*^i87Q}2 zEEQ<%UDv@aZF}Xoq{0;vikzfrrxSfwQHCuh$S0dKT@UzH&}Z>puzTIDBg5JdAiCz2 z-S~qSN&)I$k=0N2J}5mL^cbdwH$){VGzvIm+66uipqw4eHE(0Qk&gcv9UV6L zc$c?j5@aPI(I2))qnKf_UV-e`le)*O7gD>pC;-J?K;m8(2}-+;1nAO|&^i$;udg>t zRXm*l$=x4cYP>)Q$XcR#nnwB-{bR*I0d{A0n6MVcr333m8-5e<*#1|c2UaikhPEJlu zU8b{s_5&#lz~fyO%j15`uu#Z=OZ@w52N3c(_uIVLhlzfe*{YCwLWmE#Ze#bN*Qt z&Zy9KyiH>&pN>yfEj6!bqnHQVz(H9D6#?|a^hbIV#HZYsuxvO(Ron!2&jHUzxVPt=(r~C1cd*k$Nn;O5?EIoJtl1 z!R8B({@MzcqBEP0H~2@N5B%|la<@v9H}kMaOfJSzd~sw%gEMG@(^ipyPJjr5x0fsA za-!31K>j(cRK2%{)cIoA$ck9I2SrZd0$3F40D;3+PZ!^GK8yW1 zqf8|Ywgq|$qFh@bFube`As&CW;x|mJy|rn(ixixVWK!@p)aMXf2Bjet+VeRFZX0`L zQBsEng}iZ^jqf%|PyU%v{uU~hNStt6lV|qVo*Jit*;1`6shG2kxBWncgOEHC&)Hfb1qGLTm{yO;q2&_TvKYk` z$7P$?-7fP z17UgU_PKUv!nav%8qfYBW_;F%0!UV_Zt+-mKx}ig7{uCdojkbYyr49R0a+Qn292V< z452bL&x=sNdvvKos`9mW!>TFx2STwsRxwq=Y(w8HoFHZ-_A}R^l{jB&+P_Xs@X(dx5kOD;xlPX$9`l9@_j6ma(G#-SJ#fM zu4l@Vda9g6vVW#Qr>CJr$=Yjj#R~YL=IFL9+`n~A645j0ee^>8ICV8(5VzW&dgD3V zuWqydJcmtvicaO_(m{^g9P!;&lSW5Kol#Z8R38%k9=jX!{XIR_5&+!N z$osEOB$|G^`q=%z=T?U^rbi{n3U8zo5*9m*RtJwSE2W!pO&joII{t0^9Yt`7jJrWX z;mG$78oiIPB1VBF)O+rOv~Eb60*9wU8U`| z+z1nsBA0nQ{$gJ|p)LL?+hjaT3ZdiDKr=QhdHo83a*JopE5KfL=rA~YhUZT$QR$u zbS9V?Snz%v#n21&d0rX4%t7GZ-KY2kslw=1?lkwT zB7lnD`A4JCnKL1p&sPx-8b&8rRA*jSa{LA=Dq#tG|IXJdh`x$3y`=a|#B@*X1^j{U z4|z%TRUSsj3fW2;Z@JrGGlzeUuN3$6Z%3a%s@)4?3qr71Z`et4b3EI|ZL{=pl(o7}bF#Gs zv$^N*hasrNKL_M#g0M|QIXFv_CfV6@m<_0`>hM#P$(EJ`(t@CKYUG&!f3Hn)P^U5G6~wc8a*3`N73VhR-zgeH-ygK%<`;CX4rZ-(khN%T=99{b5b@RhtH9EW4t>{uv}7g1A_vqXAT`W;Z*hB?*h=F)XA-WW||)JG>z zMQ_z_xmhQ(eZE-!#)>*|crYvaN10M>dbWzEn>szDr6mV0v0&8W0U!S;KvV$wLbT!K zwCPE^mdi@hK`5hHq4U)M z2@Dq}IHXq}b_o{CjeShdtDtx(LDiFN@8n_AlzvU8igQrS_KO&l%x67l9>S*6`$-!T7{M88LOSHuiztd)mLE+pKqIPv^7=kPr zFf8NPo?nz%za99nw0^)Uw(>~9_F!pskQ)}hE%o5}M(E0!P%@P3O+FX#5#;h?eZ17- z%XJ$@JHHpQcuNC z;S|*zOUI8N#V!A(1XFnK46Q2zvBWXegvHceo^@8*lXrhSo;OxPaZ*;i&T$QR%y(G3 zpP-2y#y7U-Z@H#1p-@aqzGP=^lJx6&#>Yq)8sP0S>yfu;gRQCc+Dy!hxm{;adB(@b zwNFR@RWlhNoh=SI-PYSXPvp=j&`-yxXe4PqbZos7K{ajd#kw@$T}R+Wy~qn>OEGx1 zT$kolq9s`(()x=XS(qrr4@=9fjwU+#;5fmp4Q5PJu`BGN+)ebiHJ`2s_i*UIj%;@K zap15Al?!rOW~$04zxUJ8n&s*fyha>+2u#^uAX!wSPA2LdtQvX_L0=*U#*{n3Zqz|6#^@4QiAL2j*W%*Jjh>A;|? zR)(BBTJWjIH6+L+PgzA%rIPBI{q3qQ^`25TJ7{K~1gAA`$!IG*I9EN`z9583WH17q zf;M^P+YzUsqr=BLUarow1;3LO##d!g9<1#Yq!nLmvhYk*6bbk= zy#0-D;GWw$`*rb%ENSRIdy~-^KF9GF3ZKw9R6o7t2SWpCv~$wiE-Kib*m~<_9Sx1( zcxgE~Cuadh)mkUV%`r+g4u;lvyN@dXL~C&q8}mTw=xS~SzhwW88EEo2bii?N&N4Nv zGS;^P;La%F{>78Y)bKUU=4eC^N`=c3;xx>NQAFt0&HTg4&^@8fQfOusi$OF&Td7iI zT|}6im5ZAbcLcQ$8qQ&y3X8xqtdP@lqtrhCJNyuDD}y>}VVVIpOmicBX-0K*RmZdG zs{xXgKl0Dbp;vJr5aAou6<)`$oH88=CF&yqn`m5LD00K4b~)nRm`oIpsxR3#>WKPn zYeADVE#ArI#oP0{^^WA$8Si#OWeY0b4b0jsS95V(En9f%?2WB@Qs~N%sTD2cs=kI? z@^+NsV_)%-l}{kZUU-JxfzR~$Olp;+8D#;V2B70nm!{|nkB)(ER{UN{~> zKY**Ss3^q94-JOnD-##jxBzI$NcG4@h3DaZqUt2dWBEh2Mz2W+3X=jdyhY&(OrVqZ zTqm9{(r=2JEhIC|p-#LG&-|L2^G?(0l&u)tn{wv}I}~5!H&ZLE1v3ttDXok%dgTJB z8~N{4;vmu%z`Oqj-8uF4mW;Uvf&TgYPmTQePBdVVC2QA>7kcEKjD(_ig{V=${{V@d BtE~V4 diff --git a/tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-noExpiry-1-DesktopChrome-darwin.png b/tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-noExpiry-1-DesktopChrome-darwin.png deleted file mode 100644 index 413f3bb17bf8a4e9528013b37c52b36ec38bf458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10016 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 Y4sTm#&;`U2Hu6qJLIF@IW)$>407jPLfdBvi diff --git a/tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-noExpiry-1-Mobile-Chrome-darwin.png b/tests/log.spec.ts-snapshots/log-mixedRegistry-validStatus-noExpiry-1-Mobile-Chrome-darwin.png deleted file mode 100644 index f8e86d86b31e7fe684108d9e0a7ef3239709f90d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10062 zcmbuFRa6|!xAv3Z5Zr=ia0v|V5(w@d+=6Rx9Y}BncMCQ+4DRj{+zIaP797sJ|MxrV zoSSp?-Sn!}t5;Xo?y9}(_dFG*tSE(!N{ssE%^P$XX>rvzZ{GgX_D6mPyRr#kXT5oY z^+rZqRNdp(aR!QBH=_g5eRsLhDzCkH zcr0>rb8X--A@7aL9x0{bMbSzx9Ep7Iyq$rdfqQTj$5i#4y{!w~9N{D(O%k1w;d>&! zgO$fTKP#%Lh&0}X9as^DLC?B|6&N4omk-e}%5A96E`l3bpl; z>Zxc~nsEUsI7BytU5>JYkxLX)Q$_#Xo1S+&+7(=KY*l@vLd(L6E`Rs#VYq&R7JofY zv(uPTg~ZiA{UszOf?l4Q!2QVDrM9~0!k`Crg~xIEjDct($HO~ewtlg)0Phrc_J!t2 zn;)(eC2m;IOz|$=wB)Y|dE5QpwL5tph{ohc!_j?eF&xyKOpJi$Kqh9PZ;Qu4zEW;X zoR;T%?Hy5%NJ$9^f6(i-IUNe1(1;j?yOqKCpM*0r#D?u&Uz8f|O&YWd$RZKs&;%)3 zZO)A0;q(REFE6$JK&^0h)t8q76K!~;M7$Q~vTv#-%4x|Wj7Z5ZjCu~uc+*o8x!f*~ zsUCeRitYr>cAs9JAAa$AVjQUbBBhHUdI50hb7CVM5D}H~*tWU90vNXhyCxS)=x_!U z9Jx-6NN@JT%A+(*XSQZ)BkI!Y?`_vW$DJ7X`1o0CukV{(%2cQl9dk(~`Ttxp61>{y z-x8=p-J{EiQnkI9b&%_klMUKd_quup4y_{#1)>|s{+u1&=+cexjcC_A>oT@@&Sj;P3Y_gjBQS*-2=viCXyx5^IOBDV%UxN2o8EBR>T%!f zF9vE6<>n}mFZxF^i%bdwzr-Ngem9}FGhJv3ZFTZdJra+zP8}UViK89++{nyP`>m=G ziZ>e#0U=?Bg7haKli!DDmx0VLM_*gcR@?8#Rv!J|qI`=_PYzLJV0>sCn`pJnQQ^>h%G)znlpaWYfaS5-wU zWMpAsez?P)M@4CCGvA?nzosB8KrZCjl@_XJFV|LGUCmvgYdrV6*Y2Q%$MHfsA}s6* z4Y_vTgnOdktXjfZS;>3prEy_sXb1^|0E1L$q+4cVmT4bfqv44`D`3Qj)M|x25Y%R+0y_jJ|@mc8}*u zv4CS`xu&|BEpL~_z}R|f)gss8spVE)1(F1P=JR~A6x3U%E2=S0&oYjW=|r=s(Cc`+ zb_W_xD@$)99&iEYTzsE8tqh?!qLCWHr{N7A5~E2Q!w^4wl8p!q+4o1VuB z%EetIA?Y6PIb9~SBnS1d|%G4S;bR*tqIO|B&vst4-H4uNY56uK#B2;_ko z@&eb@`>4sGjf4yHCCQc$#Vd1xc6Mgp zMN=*a@zUf$E%eF%-P!08>t8S_-!ULVw|;3KH7FtVoJ~y`e1R6jr~@6EM~));^1)A-LIrAp=a9S z1+YnI)L~ELi-#q9I&-0<9b=d+!RkUflIy6Bt4<95cll>OI|@l`uLQj z*f8GuRCC;8g_USPZHCa`bY@mo#y#wDIJQs z{qbMBBmeQfgRSH4Jlxn}Ef5@cC7vOr8=Xhe)YQs|pN#B_(W;GdA$e;^@BYSL2=`rl zeEh3wBc3z3zsr}^VAKnvl9&_Hltl1N=Aw{x>17UWWKr-Zn*Z20ghW8!uB^y1{os$&t z1ABR??;9kVx*B| zNTDKE{zA%cnjIHMNm+$k=zquEdhD$KE1+VP^>o?dMHL7&*k{M?g`oK3CnY8&Jx@I$ zluxG@m14Smh}MXN#g;abgl0xWexr3PIniv9r3XmJWhm%3=Wk{})_mPYOdQqQYF2O(ul2E-lWT5BFeqqoGU}R)OUEv@W?6|tT#I~l2 zvcNf@!>W-AdtL)j(FPmvho%4Y$n^zzmWw08vw~64;fL`s%R?8wRARwe9|8-3Ggy;oKlw1=B&p5;^-(NRP1%>b%Lp1$*k;^#JOb|Ye%)M&?)sG%Swr%QK0gcezGoLCK5+H_2uZ)?gp$BP!-izR z>aJLAl#=Nw)^PavX0o3k&%tz66XLyQ+OEpulIW!kzHh{o;t#tW24CUUvf(W-)2^R* zeORK#UtTO;zBSZBk1yi){$%65U(&)wfd?E`9qMg3JNo>UYCjXbi&l#s?8HXaivdpK z{2u`0i23d(?j||>JGy^KN0t&sH7YXHFw|iTgWct-h`YPL+Ji!EW#1XWzpm0!6A+-h z+GuOkB5HHIz`?dNSB)K43Nc#N1~eBS6DOr~<63A}bP&N)0OotQ4}J%-MH35W*62=V zPe^)AzSEOdv=Vo(lB1>6Nmq%^BA__rNdb8?cJ?U%;S*6EylAftI{5b;W{D{F3q`kc zv|o0dG$@*C;HeBTvXkN}@{w-bAS#o$XK=)6a8Tx!{Cs~Bk#%!uWAJf?_b-Y!-$?Yn3i|!(CZMz0;XMNmxr9y0NKkMxD z=6ZpNA4m)Tr&FtTj5oY_1I)44G+jdx&&Kky(#TNG%jNx2y^~3T@eJ~Zt$F*EDokzV z?ArpnT8NvZdD4*>rWQnhK=GI4&`ZyNX2q50ui)M6wyG)zm5`}w_6NwcKH(ZNniO1Y zqw{!<@wbBP4HswScc_J~q$nbRX8Si6XA@J<*a&ZNf_Q^= zEksYF;qbb#B`*mE`rO^C^^KJs>2l8ZpO0=cnQa_j;1<&HV`TAxa5CS$EgV;~W&DxU z_9=J?(;8ZG*gi4aU*ax`t(0B0Ib6M`pyy+6Ak0kSd0@SNo)ZwURA+{7NIfG|mmjy! z?VV;eZV!6AMt+a#dwCobo6}|J?e|(-Wi4s$hLp=qHx6&S@<~!sB|;dM<0H#61oT^R ztpD_{>+F}&5?j-fMas&`b}-%DemrEOfp86eKKcZpwS^Q{typBN7hgw25LOtxf{ZMX zw(5nNQ@4!Ae-R7iM~jC1w-(TynWPpL;f06)>@jl=fHM9F4n`c5D19?!oe%Y3Hk3wV z0fT{Q?(8|pt{4t~vD9TgF#t);n`L$D$dVnDHPmEmrQTmTjS?qfcqf1%s&oo$%fM>XI1gaE1?~9@D zk6o&&s`m&8Ol>^rH>9lYlVF~zGsZsz_(a;;5S@Vcu%%uqL~ttL0+l-x4UJl*p=K|v zu6Aa~Y{gePuP|uyD$@ZyKZVQ*z^8Os*4zd5qNwe;o!Nx^0GAY?ek?1K24NeD2L^XI z6S8#Rrye1@!i@`ACW@0zFoxyt1Ys0p>b0v#B#Hx!Q@*lQF=;yJG=F!S$rxrz8p*}A zBI*+W?9D;7BG4hACy(IZNvT$BAE#br-JEV_Zx_kQ}_6I9axhOf@%tK*M(dMZ7?9}fpU>!*Qr-=ea1Fje>L>qfZOt!6 z{Ot=|SH-#wx61sS^}}8}Rf_79Qbtd1#^w(>1m!O$bd7HhladXybIXG8I(~3S^SR7K z*O97RNPy3&iaZm=bySoj3#v`wIoPLE3&@r*$&KtdOy6%(cxf;)YyLA`DI=ea43boO z80iQu{QU%pM69e>%0!7lLi%JG=5WDLClmQ+_i_NVy)h$pN{^+={w-JeM8IP~ynB5zWL^(DfFfhJk^q zffS-;rPQcm6)b@X^Sy)g;7KXGe6YWto=(8X0_DpYB{FSNLX!PLv(09sib8tPH~4R7 z_>Xc?R3YG|UU!W*Ro@@9^e7Fw6x4lUl?RZY#}i-OHE>?jU!8-Zc`q+7Ll!YSo@rUA zIY(ai$uo9!@HYH1UO|by#BZ<2lRj5DI@Hyr-yEBdJ$=U9@FRi5NyBt5bsQ9U#ld7N z*!BOG!2YL#h||Qvbg?4pe`-ylIIOOqXvl~I7M>i6<`J8kJi}xd)S0RBy0vPU8JU@e zhk@CLznTyDe~XG~;HXGP`+ni5sV>s#4>t7@DdDh^U&LQH)~qNNqn9XNdAq*G%cO+@EnO7@N6T@C-3)n)=B974xI{OWJB!Ta9KRau3?f_FZ`V~) z@(T*?5#e7xw(~plUkC+p+B*yNZw?}S)%{p5p?isiJ zWePL1V-IA9D>X-qXUx!y)WpR2I|;txyuA0}Nt>IhPy_Q3ZGXi88nK9=;jdTV(NT$= z>8U9?r4ME0FS!2(1^qNe1}WEoK>v%F!x~2PjP)WX<)v}A(m#44VCm2C7CwC6h~OK_17s3Z(Ic0qwKFi=cM za6m30TnsOR>FQ1DAGCEjU8Ma4L2UM{w2JV*^iQfntMGDhWv(6+jsuIG3-}{5wl+tK zl%RTtbCo%=HRiCt7|n}@a5Bp`ANNJ+Q! z;6}G0qd&SC-`DR)9gV)UMss-#P%9@7%4@Tjr|t7?viuv(1B!#?Xr?fVYyU^l#EH~v zhAi|UU7isad_i#ym6m=D9KXkJ4w`P<&k}Z`iQ*DmRW7N%3tlr58r5u)9X+jn>FISt)FFumwT^R*}wNN8CO-U)(AyEX9M`|s22 zd6inaWf7l}iwh~AI%iOsBc6>yUfyAtim|C3wjP?FC}G9^(E;UTwYz(N++3KTM{h+{ zNeL9{67cY83-OuTZHBc#AEqah4S`?-!L;Bx5Uk)2Rk7vcc&BE5?mW3k6auJX*tej=cor?S;L_<^4En|Z^1x;;K zDbka}*UP*hvs`hSmY7$#`V7-NhJk@0KfiGJ_ituH!4SpRq$KQ;A0Mx6%mdky zzt|gH1OUR9J|#f@;)-lbk9R(Q6NfDr93L+AR@7X}aQe*VBY#rZd-GDJ0;EQd_7;%c@X@e`9|qTQh}W#zUPR+cp3Iw{t2;1hFxrk3>n>LiWzlXknyEJgM ztds2GjCT0e<{HMng{Q!iux9Fq?8Y5ozvF_E_otgL9Z@z#uQLtqn61p8p6JuM8LbC( za4#4mpv+?6It_;eQeWWIs@sq3e2)z23FUl1FxBoJku!la2yv>N>C17>qK#WmX3 zo2ZC>Ep|Q`Eqg#GimaMy3s1E~EiD4rDD;-HI@KZDT&xN;Zz{E<78ud=9f?CcE#J{b z3N7(ysQVaHnNxMBTpHTP3Ddv2z~!UNYSm==;FFJcT>Ae4zlv#HSl&j>-MhO zzs%o0b0<43vhzC%IxVeo=2~09brvqbm@MyUIby1Ry-1{2)Rmv^D1w6BTWc z+>CPV|EpT8(9#{F_j+C_s4C1E(rnv1JEcYRYFwxf@O_l(@o^6i9fS~lsaHJgOm>Kd zs-`9m(CWSi27e+S;J>wCKDpjQfmD@pF{Gigo0y0#&37ZQtD2P3#Q&?<|9{{mPDz{= zv#{@{f({uAOq#^C%CGfxTz@$Nc7#BIP4#n_U+mU_${?d(X;Ju&N`~;G5p@8 z2qnuzZDqClD+X4kgH=V7y3RV`@Ig$~V~;1hqO18y}5pWzSuPH%3n2 z%ipM%!m-H%nEO(WCS(cdWSY09L~wvpM9L8IBQkF|6-S-}06QjnY^Wj}CD`J?9xE_T zWMCC=tiBXW@vJ}n6M|=YyIQMYiS_tYWpRU;m3p;o{5fp!1thI7Kx3(Z`v68;ZlmY! z5<`?cj;Ra2M+mBY1F)scC07Y-7K05XJUo1jmfE0$sJ++D?Y7+9;0R>U*Gsu#SNv5| zb8gp_X@ozuky$@Tl-u)Z9|lXQZk%q0`__MUExPzk%`B1=6Yp)WZHwnk3epAU=%8`n zf4u~70?bJ;o{$p1)Z?M0J-rK?#w80G|0Rq7p_U= z9z3u6MfAnHqBE-iO=fKbG%GmKsxNcIr+gmQyC*F+Us;HRmbve&=_QJosC8&2XZwmR zZdpKHy72mq4=_6b-L-CCO3B@BX(BhhNn(EN=bnEL6{J7fabjvJAu;yAY*M2(aF&VS z_wXWGwb&Wpi`2%@;Skiu`%IsmKUGL+LiC({q$# z%rZ@@qkAL1IXqvruk_E9sFkG@A{iW%Ci$>$v9~=n47$THfGPg+{PmCL01bJv?*N^T zUtm%!OKfWDC}Z*6=B&+#;$80A)Ft;wkjE_R9UtREvGPVUbJ{c#wAv5O7K)YL*Vob0 zYHDq=tk*)+s;FKWQ%{H|U|I&Cogx^mOO?dFE#iO$E7qOst$Ko|Dkn-9!-rEmLxHvo z(H&|{&9Q2VjI^{UEQ~0aN$Zad&4XqamQpbm|7lKa&nO#Rf6;V-wE8>)6|zg-l^#>D zfEo6u5|1o^dXjG>9gzvT_kwycv~B)qX>c74V+OFw5sQ(1oMa5^PM(|TG~(ZNXXjvI zx|5~PEQUdKYn90XkZFa92-k5Z>`C1nma82-N|LHPxc7Dy*qEi3j@`eN&N-w4l$YBht z-N&VRrUo)8+2GpWUikjq)Buu%z-$RBEuP1Gsy>o6xWoj!6G?##Ui|Ai;%fHu{NZ^q z=7&XNxXvYKhFwxk83~x{N47+wvlMl@vL>o%Fg6rNxJktrZ{GWEgTH$1={7Pu;Ug>% zeP~mkSW96zC>=gsg-QShlU2`s=k`-Q;W54Lov(q{d-DeI=$~@|#m-eI04gRq>_d2& zuQH|xBpLrmdwuu4Kcv_r5G3Yc!)CiO`im9!4N9Pq@LUQu0@$F(Vk`Y*tWQ&>`j=S# z7x#qzM+&=VXNC!4|HC-{_j!Q-#XbLdi|Q3)nCtjbU~e~s@p(^6Tbqw6LrYbMnDDh+ z(zL+I>FUD*wu)0<<}=ca$4__`n0{6j)%BU^nDu2UaiZjd;lE-T=xO^P96&|a=A9+} zZ1d@1Q9@kOF@ucDF*sXtvZJscjrzOFKOIFxM7Rth_(@8O3i_LXVR6;x+bg`4_`Yp; zc`!{^u4ZOt2BD044JHQ0bV|U~H%9xdwV=QZx>Addq^-RGGqo*0I^_T&zEh!>n&&Augc3+&TgSuX zGH7!rAYMY<5-W@x{DUVgAOpJ@0 zY^e2_VjU_$$dTTj^tF7Am&jw|mf5D>{%`XKQXH2Huo*CX<8J_QX-PBCrLO8wVZNpn zO1jgNag20pcvg4(dwOp*z5b#kA=&*%QCwwmz%}y}jEedlzw3Jz`Az}t35eUPzr$OJ z&R1H&@U*GRvpZ!g#BGOg+hM8dtEi~)0)%hS-eHM?5Vrda9{-x~H9OVvSf0nd>w>w2 zh+&Z#f}k3>m{+fkQ%d>$Pf0$x9qDtRJD+HdXhei!0U52*hnn619<$LD_MBYD{58c) zR_hpaV1m~LJMFPz;PjnC9-u&h{77&zc5_%*Pk2d2QIQ3}R-EV?{-@C$<8J^uI=X#e z(6kp=D|uSG`*fLuoijzyn6tvFi4Rr;FAVAeh3lM(b$fytN7Jk#KJW-_fGC-bkoJ*Y z!8G>O)$B0$UK``X&j#4Jf(payuXcH93BOEC|Lm>?Si<}6!_&|pjupEzO~2_^!ptu0JfF{9|8#o2vGm|gQ<(EGSH+>KMBytnPl92Mt|7**n zVg4!1Y2+Ayq{Zs3h+!Xs|M?`?r0N53hR%PHdX9+#I0=6IKJ_Q|x_AWo3y7qRPU0j< zNaDL<5M%hk=WnB?nnK}$z5K&~$p*!c)r@oyN(>IJ=az=FhO~ORl(sfQn8+MMdkGe3 z-S0uqXu@o*$FJUI$?Nuo3VH9tV>Rlk7{m$}y_J07Hbn7iXfHf&>T5B%%Bb{~8zOY2 z8&A5(?ogU0R&G5eSi=&lbVKC!Ij9cxrQUYs=4pp%@ov!ZHSksjrXavhvZSTCtT&tJ zNYa|*n5QYg_8R|KSGZg=zTM3P4E`dOrcUiVXkiI-Syg2Z z^fvB&&i8P0b5q1ccLlW(SRJIo1T40G{>4Q=jxmgW&(|A{XP?E+x$w;rw-Y!yIapqp zztNTu{m$bJe{EH)Mw>~{JUG!)9*b zF*=wyLqX$-a(g$Y3uGkKVwC<6qf$Jy;9$m~o04qW$jIWjDV+B%B|}DMb+u4+dbGJU zFc^Hzy9>##ENX8REQRGLQ~Vo36t1y(Kbd3bz>@EMxh&<)nX;xTp7Y<9!!*thT5C7x z;0|+3^_`$kLkY3P!4Ar{i!FGDVb3i@iFo)Wt|j0Vu_DKptYT_m-v@|rvzZ{GgX_D6mPyRr#kXT5oY z^+rZqRNdp(aR!QBH=_g5eRsLhDzCkH zcr0>rb8X--A@7aL9x0{bMbSzx9Ep7Iyq$rdfqQTj$5i#4y{!w~9N{D(O%k1w;d>&! zgO$fTKP#%Lh&0}X9as^DLC?B|6&N4omk-e}%5A96E`l3bpl; z>Zxc~nsEUsI7BytU5>JYkxLX)Q$_#Xo1S+&+7(=KY*l@vLd(L6E`Rs#VYq&R7JofY zv(uPTg~ZiA{UszOf?l4Q!2QVDrM9~0!k`Crg~xIEjDct($HO~ewtlg)0Phrc_J!t2 zn;)(eC2m;IOz|$=wB)Y|dE5QpwL5tph{ohc!_j?eF&xyKOpJi$Kqh9PZ;Qu4zEW;X zoR;T%?Hy5%NJ$9^f6(i-IUNe1(1;j?yOqKCpM*0r#D?u&Uz8f|O&YWd$RZKs&;%)3 zZO)A0;q(REFE6$JK&^0h)t8q76K!~;M7$Q~vTv#-%4x|Wj7Z5ZjCu~uc+*o8x!f*~ zsUCeRitYr>cAs9JAAa$AVjQUbBBhHUdI50hb7CVM5D}H~*tWU90vNXhyCxS)=x_!U z9Jx-6NN@JT%A+(*XSQZ)BkI!Y?`_vW$DJ7X`1o0CukV{(%2cQl9dk(~`Ttxp61>{y z-x8=p-J{EiQnkI9b&%_klMUKd_quup4y_{#1)>|s{+u1&=+cexjcC_A>oT@@&Sj;P3Y_gjBQS*-2=viCXyx5^IOBDV%UxN2o8EBR>T%!f zF9vE6<>n}mFZxF^i%bdwzr-Ngem9}FGhJv3ZFTZdJra+zP8}UViK89++{nyP`>m=G ziZ>e#0U=?Bg7haKli!DDmx0VLM_*gcR@?8#Rv!J|qI`=_PYzLJV0>sCn`pJnQQ^>h%G)znlpaWYfaS5-wU zWMpAsez?P)M@4CCGvA?nzosB8KrZCjl@_XJFV|LGUCmvgYdrV6*Y2Q%$MHfsA}s6* z4Y_vTgnOdktXjfZS;>3prEy_sXb1^|0E1L$q+4cVmT4bfqv44`D`3Qj)M|x25Y%R+0y_jJ|@mc8}*u zv4CS`xu&|BEpL~_z}R|f)gss8spVE)1(F1P=JR~A6x3U%E2=S0&oYjW=|r=s(Cc`+ zb_W_xD@$)99&iEYTzsE8tqh?!qLCWHr{N7A5~E2Q!w^4wl8p!q+4o1VuB z%EetIA?Y6PIb9~SBnS1d|%G4S;bR*tqIO|B&vst4-H4uNY56uK#B2;_ko z@&eb@`>4sGjf4yHCCQc$#Vd1xc6Mgp zMN=*a@zUf$E%eF%-P!08>t8S_-!ULVw|;3KH7FtVoJ~y`e1R6jr~@6EM~));^1)A-LIrAp=a9S z1+YnI)L~ELi-#q9I&-0<9b=d+!RkUflIy6Bt4<95cll>OI|@l`uLQj z*f8GuRCC;8g_USPZHCa`bY@mo#y#wDIJQs z{qbMBBmeQfgRSH4Jlxn}Ef5@cC7vOr8=Xhe)YQs|pN#B_(W;GdA$e;^@BYSL2=`rl zeEh3wBc3z3zsr}^VAKnvl9&_Hltl1N=Aw{x>17UWWKr-Zn*Z20ghW8!uB^y1{os$&t z1ABR??;9kVx*B| zNTDKE{zA%cnjIHMNm+$k=zquEdhD$KE1+VP^>o?dMHL7&*k{M?g`oK3CnY8&Jx@I$ zluxG@m14Smh}MXN#g;abgl0xWexr3PIniv9r3XmJWhm%3=Wk{})_mPYOdQqQYF2O(ul2E-lWT5BFeqqoGU}R)OUEv@W?6|tT#I~l2 zvcNf@!>W-AdtL)j(FPmvho%4Y$n^zzmWw08vw~64;fL`s%R?8wRARwe9|8-3Ggy;oKlw1=B&p5;^-(NRP1%>b%Lp1$*k;^#JOb|Ye%)M&?)sG%Swr%QK0gcezGoLCK5+H_2uZ)?gp$BP!-izR z>aJLAl#=Nw)^PavX0o3k&%tz66XLyQ+OEpulIW!kzHh{o;t#tW24CUUvf(W-)2^R* zeORK#UtTO;zBSZBk1yi){$%65U(&)wfd?E`9qMg3JNo>UYCjXbi&l#s?8HXaivdpK z{2u`0i23d(?j||>JGy^KN0t&sH7YXHFw|iTgWct-h`YPL+Ji!EW#1XWzpm0!6A+-h z+GuOkB5HHIz`?dNSB)K43Nc#N1~eBS6DOr~<63A}bP&N)0OotQ4}J%-MH35W*62=V zPe^)AzSEOdv=Vo(lB1>6Nmq%^BA__rNdb8?cJ?U%;S*6EylAftI{5b;W{D{F3q`kc zv|o0dG$@*C;HeBTvXkN}@{w-bAS#o$XK=)6a8Tx!{Cs~Bk#%!uWAJf?_b-Y!-$?Yn3i|!(CZMz0;XMNmxr9y0NKkMxD z=6ZpNA4m)Tr&FtTj5oY_1I)44G+jdx&&Kky(#TNG%jNx2y^~3T@eJ~Zt$F*EDokzV z?ArpnT8NvZdD4*>rWQnhK=GI4&`ZyNX2q50ui)M6wyG)zm5`}w_6NwcKH(ZNniO1Y zqw{!<@wbBP4HswScc_J~q$nbRX8Si6XA@J<*a&ZNf_Q^= zEksYF;qbb#B`*mE`rO^C^^KJs>2l8ZpO0=cnQa_j;1<&HV`TAxa5CS$EgV;~W&DxU z_9=J?(;8ZG*gi4aU*ax`t(0B0Ib6M`pyy+6Ak0kSd0@SNo)ZwURA+{7NIfG|mmjy! z?VV;eZV!6AMt+a#dwCobo6}|J?e|(-Wi4s$hLp=qHx6&S@<~!sB|;dM<0H#61oT^R ztpD_{>+F}&5?j-fMas&`b}-%DemrEOfp86eKKcZpwS^Q{typBN7hgw25LOtxf{ZMX zw(5nNQ@4!Ae-R7iM~jC1w-(TynWPpL;f06)>@jl=fHM9F4n`c5D19?!oe%Y3Hk3wV z0fT{Q?(8|pt{4t~vD9TgF#t);n`L$D$dVnDHPmEmrQTmTjS?qfcqf1%s&oo$%fM>XI1gaE1?~9@D zk6o&&s`m&8Ol>^rH>9lYlVF~zGsZsz_(a;;5S@Vcu%%uqL~ttL0+l-x4UJl*p=K|v zu6Aa~Y{gePuP|uyD$@ZyKZVQ*z^8Os*4zd5qNwe;o!Nx^0GAY?ek?1K24NeD2L^XI z6S8#Rrye1@!i@`ACW@0zFoxyt1Ys0p>b0v#B#Hx!Q@*lQF=;yJG=F!S$rxrz8p*}A zBI*+W?9D;7BG4hACy(IZNvT$BAE#br-JEV_Zx_kQ}_6I9axhOf@%tK*M(dMZ7?9}fpU>!*Qr-=ea1Fje>L>qfZOt!6 z{Ot=|SH-#wx61sS^}}8}Rf_79Qbtd1#^w(>1m!O$bd7HhladXybIXG8I(~3S^SR7K z*O97RNPy3&iaZm=bySoj3#v`wIoPLE3&@r*$&KtdOy6%(cxf;)YyLA`DI=ea43boO z80iQu{QU%pM69e>%0!7lLi%JG=5WDLClmQ+_i_NVy)h$pN{^+={w-JeM8IP~ynB5zWL^(DfFfhJk^q zffS-;rPQcm6)b@X^Sy)g;7KXGe6YWto=(8X0_DpYB{FSNLX!PLv(09sib8tPH~4R7 z_>Xc?R3YG|UU!W*Ro@@9^e7Fw6x4lUl?RZY#}i-OHE>?jU!8-Zc`q+7Ll!YSo@rUA zIY(ai$uo9!@HYH1UO|by#BZ<2lRj5DI@Hyr-yEBdJ$=U9@FRi5NyBt5bsQ9U#ld7N z*!BOG!2YL#h||Qvbg?4pe`-ylIIOOqXvl~I7M>i6<`J8kJi}xd)S0RBy0vPU8JU@e zhk@CLznTyDe~XG~;HXGP`+ni5sV>s#4>t7@DdDh^U&LQH)~qNNqn9XNdAq*G%cO+@EnO7@N6T@C-3)n)=B974xI{OWJB!Ta9KRau3?f_FZ`V~) z@(T*?5#e7xw(~plUkC+p+B*yNZw?}S)%{p5p?isiJ zWePL1V-IA9D>X-qXUx!y)WpR2I|;txyuA0}Nt>IhPy_Q3ZGXi88nK9=;jdTV(NT$= z>8U9?r4ME0FS!2(1^qNe1}WEoK>v%F!x~2PjP)WX<)v}A(m#44VCm2C7CwC6h~OK_17s3Z(Ic0qwKFi=cM za6m30TnsOR>FQ1DAGCEjU8Ma4L2UM{w2JV*^iQfntMGDhWv(6+jsuIG3-}{5wl+tK zl%RTtbCo%=HRiCt7|n}@a5Bp`ANNJ+Q! z;6}G0qd&SC-`DR)9gV)UMss-#P%9@7%4@Tjr|t7?viuv(1B!#?Xr?fVYyU^l#EH~v zhAi|UU7isad_i#ym6m=D9KXkJ4w`P<&k}Z`iQ*DmRW7N%3tlr58r5u)9X+jn>FISt)FFumwT^R*}wNN8CO-U)(AyEX9M`|s22 zd6inaWf7l}iwh~AI%iOsBc6>yUfyAtim|C3wjP?FC}G9^(E;UTwYz(N++3KTM{h+{ zNeL9{67cY83-OuTZHBc#AEqah4S`?-!L;Bx5Uk)2Rk7vcc&BE5?mW3k6auJX*tej=cor?S;L_<^4En|Z^1x;;K zDbka}*UP*hvs`hSmY7$#`V7-NhJk@0KfiGJ_ituH!4SpRq$KQ;A0Mx6%mdky zzt|gH1OUR9J|#f@;)-lbk9R(Q6NfDr93L+AR@7X}aQe*VBY#rZd-GDJ0;EQd_7;%c@X@e`9|qTQh}W#zUPR+cp3Iw{t2;1hFxrk3>n>LiWzlXknyEJgM ztds2GjCT0e<{HMng{Q!iux9Fq?8Y5ozvF_E_otgL9Z@z#uQLtqn61p8p6JuM8LbC( za4#4mpv+?6It_;eQeWWIs@sq3e2)z23FUl1FxBoJku!la2yv>N>C17>qK#WmX3 zo2ZC>Ep|Q`Eqg#GimaMy3s1E~EiD4rDD;-HI@KZDT&xN;Zz{E<78ud=9f?CcE#J{b z3N7(ysQVaHnNxMBTpHTP3Ddv2z~!UNYSm==;FFJcT>Ae4zlv#HSl&j>-MhO zzs%o0b0<43vhzC%IxVeo=2~09brvqbm@MyUIby1Ry-1{2)Rmv^D1w6BTWc z+>CPV|EpT8(9#{F_j+C_s4C1E(rnv1JEcYRYFwxf@O_l(@o^6i9fS~lsaHJgOm>Kd zs-`9m(CWSi27e+S;J>wCKDpjQfmD@pF{Gigo0y0#&37ZQtD2P3#Q&?<|9{{mPDz{= zv#{@{f({uAOq#^C%CGfxTz@$Nc7#BIP4#n_U+mU_${?d(X;Ju&N`~;G5p@8 z2qnuzZDqClD+X4kgH=V7y3RV`@Ig$~V~;1hqO18y}5pWzSuPH%3n2 z%ipM%!m-H%nEO(WCS(cdWSY09L~wvpM9L8IBQkF|6-S-}06QjnY^Wj}CD`J?9xE_T zWMCC=tiBXW@vJ}n6M|=YyIQMYiS_tYWpRU;m3p;o{5fp!1thI7Kx3(Z`v68;ZlmY! z5<`?cj;Ra2M+mBY1F)scC07Y-7K05XJUo1jmfE0$sJ++D?Y7+9;0R>U*Gsu#SNv5| zb8gp_X@ozuky$@Tl-u)Z9|lXQZk%q0`__MUExPzk%`B1=6Yp)WZHwnk3epAU=%8`n zf4u~70?bJ;o{$p1)Z?M0J-rK?#w80G|0Rq7p_U= z9z3u6MfAnHqBE-iO=fKbG%GmKsxNcIr+gmQyC*F+Us;HRmbve&=_QJosC8&2XZwmR zZdpKHy72mq4=_6b-L-CCO3B@BX(BhhNn(EN=bnEL6{J7fabjvJAu;yAY*M2(aF&VS z_wXWGwb&Wpi`2%@;Skiu`%IsmKUGL+LiC({q$# z%rZ@@qkAL1IXqvruk_E9sFkG@A{iW%Ci$>$v9~=n47$THfGPg+{PmCL01bJv?*N^T zUtm%!OKfWDC}Z*6=B&+#;$80A)Ft;wkjE_R9UtREvGPVUbJ{c#wAv5O7K)YL*Vob0 zYHDq=tk*)+s;FKWQ%{H|U|I&Cogx^mOO?dFE#iO$E7qOst$Ko|Dkn-9!-rEmLxHvo z(H&|{&9Q2VjI^{UEQ~0aN$Zad&4XqamQpbm|7lKa&nO#Rf6;V-wE8>)6|zg-l^#>D zfEo6u5|1o^dXjG>9gzvT_kwycv~B)qX>c74V+OFw5sQ(1oMa5^PM(|TG~(ZNXXjvI zx|5~PEQUdKYn90XkZFa92-k5Z>`C1nma82-N|LHPxc7Dy*qEi3j@`eN&N-w4l$YBht z-N&VRrUo)8+2GpWUikjq)Buu%z-$RBEuP1Gsy>o6xWoj!6G?##Ui|Ai;%fHu{NZ^q z=7&XNxXvYKhFwxk83~x{N47+wvlMl@vL>o%Fg6rNxJktrZ{GWEgTH$1={7Pu;Ug>% zeP~mkSW96zC>=gsg-QShlU2`s=k`-Q;W54Lov(q{d-DeI=$~@|#m-eI04gRq>_d2& zuQH|xBpLrmdwuu4Kcv_r5G3Yc!)CiO`im9!4N9Pq@LUQu0@$F(Vk`Y*tWQ&>`j=S# z7x#qzM+&=VXNC!4|HC-{_j!Q-#XbLdi|Q3)nCtjbU~e~s@p(^6Tbqw6LrYbMnDDh+ z(zL+I>FUD*wu)0<<}=ca$4__`n0{6j)%BU^nDu2UaiZjd;lE-T=xO^P96&|a=A9+} zZ1d@1Q9@kOF@ucDF*sXtvZJscjrzOFKOIFxM7Rth_(@8O3i_LXVR6;x+bg`4_`Yp; zc`!{^u4ZOt2BD044JHQ0bV|U~H%9xdwV=QZx>Addq^-RGGqo*0I^_T&zEh!>n&&Augc3+&TgSuX zGH7!rAYMY<5-W@x{DUVgAOpJ@0 zY^e2_VjU_$$dTTj^tF7Am&jw|mf5D>{%`XKQXH2Huo*CX<8J_QX-PBCrLO8wVZNpn zO1jgNag20pcvg4(dwOp*z5b#kA=&*%QCwwmz%}y}jEedlzw3Jz`Az}t35eUPzr$OJ z&R1H&@U*GRvpZ!g#BGOg+hM8dtEi~)0)%hS-eHM?5Vrda9{-x~H9OVvSf0nd>w>w2 zh+&Z#f}k3>m{+fkQ%d>$Pf0$x9qDtRJD+HdXhei!0U52*hnn619<$LD_MBYD{58c) zR_hpaV1m~LJMFPz;PjnC9-u&h{77&zc5_%*Pk2d2QIQ3}R-EV?{-@C$<8J^uI=X#e z(6kp=D|uSG`*fLuoijzyn6tvFi4Rr;FAVAeh3lM(b$fytN7Jk#KJW-_fGC-bkoJ*Y z!8G>O)$B0$UK``X&j#4Jf(payuXcH93BOEC|Lm>?Si<}6!_&|pjupEzO~2_^!ptu0JfF{9|8#o2vGm|gQ<(EGSH+>KMBytnPl92Mt|7**n zVg4!1Y2+Ayq{Zs3h+!Xs|M?`?r0N53hR%PHdX9+#I0=6IKJ_Q|x_AWo3y7qRPU0j< zNaDL<5M%hk=WnB?nnK}$z5K&~$p*!c)r@oyN(>IJ=az=FhO~ORl(sfQn8+MMdkGe3 z-S0uqXu@o*$FJUI$?Nuo3VH9tV>Rlk7{m$}y_J07Hbn7iXfHf&>T5B%%Bb{~8zOY2 z8&A5(?ogU0R&G5eSi=&lbVKC!Ij9cxrQUYs=4pp%@ov!ZHSksjrXavhvZSTCtT&tJ zNYa|*n5QYg_8R|KSGZg=zTM3P4E`dOrcUiVXkiI-Syg2Z z^fvB&&i8P0b5q1ccLlW(SRJIo1T40G{>4Q=jxmgW&(|A{XP?E+x$w;rw-Y!yIapqp zztNTu{m$bJe{EH)Mw>~{JUG!)9*b zF*=wyLqX$-a(g$Y3uGkKVwC<6qf$Jy;9$m~o04qW$jIWjDV+B%B|}DMb+u4+dbGJU zFc^Hzy9>##ENX8REQRGLQ~Vo36t1y(Kbd3bz>@EMxh&<)nX;xTp7Y<9!!*thT5C7x z;0|+3^_`$kLkY3P!4Ar{i!FGDVb3i@iFo)Wt|j0Vu_DKptYT_m-v@|^aq92~XCLER10dGgmBRT}rL91xcHwiYCg36ZfH;2^1nE@O3ae zaSvrnCQKF66uoZzRjFR+_}c}D9Dd3<-}eXn&A$HFbKSB3Iw92Kde*U#ykWV|jgNnY zW)U7NSuJ6lDLL`qHofQD2w{|f9%ZFTe}Hk9%DByKGJ!S;D(D<tx3@{gC zVqu|UMnwfZF2}U?n+9xs?O>chCbzE$!*C#pHKbehu5XR=K0aH6UpX3ypizd^- zzIkx}^+~%Gyc)pGG^I!NW`3_}(&hX&{qbzgm$>V!#{RV9w(fYd-R;2<0Rh1%ZKq@+ z=5HFG<0bbHI)%{dV^0gD@l@PvY{|aVqC!R7TQx92!xUfM@5-+AN!lEP>`Y=$4S6!1 z@{`NVG`HHt+_3AwA=+l<25$QiC78Jco4ZD)G#6+B)1W&sxNBPP38p}@l& zwA2^4kOYL3D^|ZbJ^+8| z)i7r#S#DmHJU)v0-4HiRh}+OPGuwr$>`D$#Om!Ju{{)5qg4BtBzEgFZy+wB$lWEX@ z!|V}0_YdHwHToe501f;--(VC|4wfqL-;(ONAJ^|;ILNt9m1gwRVc_9Go1u9(4Jo-EqSb=?!4YZb;Uu(V{c{l4mF^+-ST>8JgU9^Wohm7DeV@f z2ac^w-01Q?Oxik_#pL0?eAkBj*tJ(JwKrR+_vZPqXt&;qW1cOdDCv9y^g2EI^V%yB zg-I?-;?9)rE1=$Nm>SEk%%D`yzK(^sH8j>x^;Xvbo@2dLE)^!^FEx?FkK)P6i*n(evy@5q+Jyoa0=Te zf}NW&%R_V6Wb^8DpRP28 z8=ADbHC31)IpnJw!?}%$>mW7Tn%QnFdzj4P(D7HAU?ozRg~yN!g_cgw&emE_6BiNp zmU??+K1Ep06AFs?pNSym`3%TiAVPRqEw8g2uv_qVCMa7o!LjgH4ExH zqQPr&7ng&1kVMtHM}89+j+#8+(D6q8)%5RyX2?{KKPU4}`kIfh>fPNhwq4L14|o5| zFA2CLpXe!+Mb@#96_0SobqbAw@K{j2!dxQ6zeG8+!Rf12>Z=n&4$4`n3W$qgz+If2 zxGNxOAmeBH;px~&H^+Z&Us9K3eO&C3$78Cowf==n!OX;4 zYO)OkkERBv-Yi4cvJ0;jbgDFD z6nsI{$M$!L78TeGB<~MON~{bFesUF23kg9+>QRIoY%D06|H8ERqodyp!S3n7!TGxw z8Mf%8OeKagPNuM;$#!gkh_~1*ySd@3!uL}bPi5f~6P{>pu8h3Adk6zYKrGOlCO+LV7=)AL942RXr`~=#{|tLmhuaNpuI*n`@9_L=hC+_;ZKH!@%Q-JS_{3sOFz*t zNRtoX9(~&H*Xx{P5^9q;!SXu?mzo!BF6miGA7pS1eG`{?#Km)%BYzRt*1OinonrNR ziTkXY%OYykRKI8u@4`f?<|KqCl1ET5s$|Tp%z5uD6O`MOvz>IvbJgTiML;h70B@R` z3E3HBJ{BH;0L+>|xcKBtZ!y9^*Ozw$1Oy)&ZL3NQKQNYzIZpK=sACu4=ma5?N;hDe znv#e7Nc!6M7=c8*1^Bp%P%#!F7u(mIaqd4XR?2Xa+1J7eW z(a_kzA0uP8=}>3)ZexA4))T)y{SzEplAj;#kGBy9D;Jv;ybqjMY7~VJ;>uU8(<6Jl z>}@75|22ZHNfr)Jhiw%r4wjNr&Fv9Ym3RJ|{XQq&+Tu4IqX5z9QuJ7*xVXKCu`Fd^hW*t)mU+ zGim`qoEz$0>i8=;>Ouz{`hEp;VZ$pb7&Vy6uVy`c&g>B!8XWDixGs)%va`J91h?{> zoxQM&BCh#jZ_E_g^4Kbpc^=H`Dr+|>?%#2;I$f@s4NeLQwjsQA!%E-_f3tpiZeD#G z7+)#f-Y2;pj3$o$k#9{4vz~1RDDHNcA3!mrIXyKL;I~(sY&}bk%+{M|KAwK+E%1U5 zptIhB{(Gv@V|tBLmk+S7 zkik5!0A}NM<36CrEfTi{Y&fM10;F8Kg7Xi8si2#W`hr!EGk#rha|&Tw7Q8v#x4s0; z6Slhp@$IqSqSk6kYc@7EiMaYy#Gl4!%Qc1J`3MOjStM#h*{E>wuHUt3muul%2dL++ zm6w)90{HT2$FwdIHRvsnPNb!)wUv`d=@nqJ7ia+5+StNJ14&_Zj^Fb!23l!aDR5jmzG#{ig$P5x?uP4#^d7~vE*ry^@_%CfUQ&_F57I* zaN^ZYk zUfx;<=Md&yMAT%K2+3{<6T5t>Ry7P|Z5 zD8$)P3|UH&3xofBx*2Yel8v!qdPUO`AtfYv9|dATFafG3Y>rnaeFqz7lDD-@3l$aO zvv!b}yokD@%0owG4YvQ-M`nz)-SDCEo^2MIpfD(e*6X!P*5Tw5Qh`NN7F>zmwJMph zB*%PVqFLvZjkI)RO!u ziEN;&yzQl0WK&a)@t-GiMM-_oEV6yJE;rJ+6g8H?yWHSfpsZO@*6@Og7F9T9A-~mI zZ#|6+JCNlYES8p?(8hSBmNZa29hpTT;+L6~MH{IJqT=AdYU?uUkO_BC*HT+;wP!Sp z$H6t~4Oysqge(qGK`URNsRVnb7gQzSiO6kH`8neE4c_f8))~KvRrA>#jAiqeWte@> z%rt8K*n#eapYt>Ahs;55tZdHF`F!7UJqpJ#q0GZY(_$@y>dnEy)O?xilRr}IYN!7~ zzWk0oX+Xt;l)E631Mt3^X;qimO<%*S_QvM8xz5&`?y;~f?J#m?-{yE;GUwr9ORB72 zMYsB8)Jd>NZKbZ?>AqvT6uNcROY*MEQ1A zA>e>{vJjPeijo?q5qcWQIeH0pJadz*gwQY5+kfp-OGXP;H%i9%P(xMXc#RM~$42)c zKub!RqF)dmeQ^u4{oq>Pi|c#oGI;hP+=0IM=*dLu=bc?NYO~Tt^o~G1{3|$QuF*Xe zc(z_LF#xjnzd1bYrus$kqN78S-K`fYI1YR=JjVEfW(D~9HZW_vzOqb zDP!EqxR$&%c{Ao?O25zVp9*~`sm|LhC&0&7BAvHtKz1jb>aSE!S7Y58Zom;&wmV)N zbv&$5A}MgvK)8-HNBfN_hJ;D3=yw&J$HW28uCiF`^l7nH48QYu0j!!BI64$gFKh5k z$iLbo_k1>T!K`3^oP_~E&4G*Ao0g_lp3Or;M)io)?hS#@6Dwt$xPF-NEe6Xw(& z+kcWxgH$5i*~qHBH5CV{* zbav~VW&$-7?8Ago>VSU&LL|K2-uqQXvXOxKB2Q7&n<^T1n6M}-^X9a)Qy(TFEF`IfzFXWWdGG3(fv$Bi1N2L# z|Ezxkx_(^ysJiRVd83Ko5J*^bze=KD(V~&a1islr(DRk{u`DKOsfi(xE9Tv8?Rk)P zXflg}g)dlgd+q7(w0=MJJ5 z#_u(>T!zF+b;4i@uGZnc?@%(**w{EaTG4<@l+=eMmTH-H$&xXmppfSO9mFp>T20UJ zAOdxubNF)%d>uZP=REtob}lH1A(vc*5HxISopY!MbgQy<<;JdjA8 zXxLeHKa2@UPA$V!aR}`Uk_o#|mm!a&;CU7Q>Fp7AO3J+)Rkr$5$Z_~e`x%b#ocw`8 zy|W^fP$66|DzR z7M*-5=i1cWLh7Pk280Vp+=kAH79{5!7Ti*wnn08JcofsIFzb1~?wVGu2WFI82%2z^ z>I>}`zKxD~Y-%I8aL^Q>&Jtkw~;EvEZuNc~DTq2^syIaQwDTSatRv z-a)dJ;XAX>8jfBbwdfhYRRFtFG-MjOY9KbVFJ)KweG&?45@-f8AUXo8{@Wvb$Cq6P zsXsc+4LU;s8O^7l2$9f`e#Xhq?CA#soFREltQG*q_v}=bH(oh+n1QF;Y#AY&w6X_|gg-BrtpPOvtjeR1z!) zG1SqDR&1iTBt9YGA6QwfbmmB{PHa?8Yry^AzJJ$4*p5T2lO6g4cQQI^y6om|3%-8UBVVkJsq(j7@mH5)H)>z*vfWQDtEp{ly*p=X{Yds6 zZ?!mhH0yPg(tSR&}pv5`K?eY%*4pCY5LbkJyw}V3Dq>-u&_7vM(#ENmD)10fA8Y=XE$V z0IzBV?L}=QG?e%KrNEG>GAF;goG8q@s>nni+3;QW7et0zVrna)g_A9*$K&JUThgQ0 zPhr^J3VE=2G8*+?q{2BPx06y*E_utm$S0p%8tW3Mg*Fqv%2VIaTx9WIzJ|zU89&l; z3k607RzZ&BX3{d!Cio zxYHu1mZx$W181YVydZ)4oR6Y;RV*>ElFRLC8v2q=1dZl^RF%`WE&_p(Yb!3;O6$PV zyz8XDjpKpvwt+P9*fYgN^tqirDL0wuZ4nKRel+`3(MneDu%m4eGh zz5K>Xns5O6ztp?F{yT-tg_@1{iV$3>5ZtW7vL6pY7xr=6c+KCXpLv1HVVaO*Jb6!Z zwVri7tXTmr3a-W;kV4Tb*T%k_xVO#+#obw((M47~KbvM8WkRAP7-l8i&R<@Uj?(de z?y>MXwG8urWsik#1ZwMOTxAMMO@lwzG_(7FH#%rJ^}y);9pf4L)Lm7^iuVGN2=FYJ z_Vx*3aDK#TLC!ui&Ddjy2SL$P4#R)`c_DRfkAx#4px`g)?5_wtlvmmKN#?WixePZJ z;`!vQ)du%J5*K^~6U(+1rUb}MG5*GyH0j))ulT6hcDV#WyJ_!ntUGj78DL|05x(Bz zPI69C#(S2PQC+6TF`$$YEB?R*W`rs#b#4}I?H^yocINFDkEWX75wNxj5&X6N@fblCZIL`I?9sO6s|H$6Oh@byk_kPB&Z7HjuWg6ttskk7pDp7$Dp^fKQ zw_~qF%vI1;5+N~>wp;Zy8C#WPhisA{-?YW_DJF!mI!<-%eN0KeS;4o$}#77^cKjHVJ z_XJOhQqXN6zyy?6xlny%)a|m--mWJ=4n2H-q%Gsi(Be#|ZZ1&|N>7ij{K6_d+-OdH zBYDcHVW_B>Vk`Hd>FfaXLc+R~HiB`}qwBYyd%0KMDjD59rqE8!Gyh z{8$lm5?d$yV8T=HD;DjP*y;P0mpaKRdGI4M6YQ=$%ifMbPmY|!nFqv5D7(oOVR_>y z)sy64)w|3s&vrI0o(^dj49g7Z?vSV6&t+Hn|7tcpogaGwn067j*;U@mNW(JocHh>N zq6H~?j?I9ux@T|CZw?xMJ@+RyM0j9R3Wxn$$K2Wjv#|p5R9tY{G}IZT4PBkgw{ZvKB~>(J5nI2|lA-p-Nk83Oe$mVemJN72hd z3kCl9{|uoky({q-Wri3vP5oqh@Vs*8rDqdTg8 zkQ(c&CeHO`4^=M<=__q<_1gzzBeEw(W_>Jr`CmO*V_g7C(b _!7NH$!ul}DBcum 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 AZvX%Q diff --git a/tests/log.spec.ts-snapshots/log-noRegistry-noStatus-noExpiry-1-Mobile-Chrome-darwin.png b/tests/log.spec.ts-snapshots/log-noRegistry-noStatus-noExpiry-1-Mobile-Chrome-darwin.png deleted file mode 100644 index cf888fac017eb0ae6833f5ab3b62489c295e5a20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10799 zcma)?V{~L+yX|9FQn78D9UC2VY$qMt?AT^^Y}>Ytj_r<}ba?Ck-h0lu=RNns{ZeD^ zJx0~2wf0);ne#WF2qgt600JHY7#J8pMp|4M3=I6A>mWD?(C3R$KOYzv5KKl~MAakn zJPTeIu!%oXlBF*3nty;vyGXBvP!?RspjDrunix+>hEabAxU$~XUzekmyC;hPMwpIe z%XT~pT)gMBC9z&+wQWk<`%gbP3voV8I!|ZvKJhzeJ0DG7A*7~g7{fsYB8wme2($dy zfDAB%YJ-L7gL6WG3Pe31f`cL-6#&9X#(R?hqh~v$^u*-#SHt$kD;4r(>-Y4ap~YFC z_LhS-1#ZU^$qlY%==_$$If1l3I6cNC+ml{xOTNAJM9$Lp9%l`b_wp_6L$>zOPwf^M6 zp?}fw&^wo;Sz&ByPKb}aozL*m@p!r78^3~#)MjzKGi+*UX6^sv$G}O+^sy@5(Z+4R z{hFQ;^^Q~e+ggL8P3oY+mqm~T_fNT|=Dj{kVFuyKhDR65zHE;mA8J|CynLf9 zkc{Q=zGN$$ajnhZw4EQxOh`^fdUp0-X&P0?qWJ#xCy!@7rhZ-WVw2x`p7B5o>>)OW zmCJ>!06EY7%M^HA4u9GO+5R5Sg4N_Ge#>Qc$8$|)=K20}Nk_A7{3%77(OE2P-Ho>P zuc)J`cfB5zgUC+IE|aH#&bR)EC6m$oTnDZReC{iU=8{)7dz{NbaS0<$&5O3u_HsT3 zezf*4P~Vh1Ys2y-b)v7e+l9r0-%TiQ`-f@pzfgOBIjbvpcfaiNdQUC2fVGy3@^t=w zb90k$u~5)4yaWC|17(1LfzkQ2lMu4%fIWgct8Twdr4_^aqeSa1HQ$lAw_-TdCrTrlyp-RD4P0OMY;(R=(yW4K7!EtZb~N_B*UG zx_zykTG8N~*Td${s|K>;{YuC~93U;7kvOkxkvu-GnBmiz8=#9_RS45Po233~#u?EU&1r?kg)Vx1tmB4K&$| zZf`NVa60K;hj`?d^N`PgYvWgc!NLNq6>XDQgBg><_NOu0`1JI20t_@Oj#A1fv9& zlao_z?(T?KH&(1S&Ed}EWMy+vot*EECV$bNLg`s0 z9OL{tF=d2_y* zul$CaRz$yzCoTUW=%-P9A`yP5XmAZyT$$}jHIYG;__k}D9Ev*bCCGR>eljR@W zO^#noEe^h2uAG|fNiOE<&9QDXVR1QrYJO&v2WV+PXXoZH>|snC{g<;RLURr{U9v}` z%%6W)ro}ncC|eJ%)|;T23?+kLg7rh|Xu7?*0ktmK?3<3wgx``|TWK;;5Bjf(umolt zv5<6Y2{8%L3GaYp!^`&D0YYbwm+*(;n_Y@kFq7qdM!n9V$hdIc&>>LP))`Bp5Y5jn z=PTgm!?RtYke^G7s$t()X%3Y8E4bBiuE*YgVG^;t^<%D?HZl(X5_8s`Z>CmN)Y1}> zR*ElWA9E<^TV{U1#==sV7(K6E<)r<2R1WKTHOwCjAY(={Mz0*v)K2er+eix5aW|pT z)KOliCMQSVNPOlQ7Qn+r$CpByKuvJh@AiSj#h!K!CSO`yR9)Vo&b}qxTpSE<_PPMy z5ZKuwzByWp`Y{HRL3L6CiIRY&lJ@{87jWN6WSLqTo-)B~#D>x!Ld@LVKju);Pzjhp z<7&4o9oSBsXLG_1E}&Kjd-G+3gE1y04TvS|9`ANq6}8WqA|GBkwXkM%%0LX;SH^vq zxg&t%y+uHAD_+XCBey?b-0kuTQW*~ ziFB}3uH+LDr39DQ3a&O0WR#8FdBZ#zbL2O1TVJxO!jo4O2 zLan16`jnsCh}2Wnk-NDQ&9bzCWIa-=t=mbz@fuWGR?7B;$L`_a!w>zz7YaJq(if7U zFS{fk8k!{8#og5h_=*Fe1Shd^%bNs1(>&LcQ~h`t zj~*d2Rsu2erH!%2|Bh|ajl|}M3=u|3%6o#9uBz@vQ3I0A0VYPNyIO&Ka&r8Si^gah z%RdUW3CZ_)Em-d)S~}Yllo8a$ zX66&4(gVX6C+U~J@D>v>4-a>)#s>WRlq3toqoTsL!^htUI6%6^p$@6TDXUDt`fMfb zyydN~qqCCiZ64Q50vZ+@B^tJ{s7QH%J^TWt?9Y4_MO`Xb!)%CLSJg-?f4zH0c=+{| zWI?NHjlho?0mE#-(@?}y2&R^Z3;N`yFouJyXN`x_He~(b0|eL0`Gd@=7Dcg$IsBY%QNbL0Qq!aTnw_2p#qNX58#c zhUvADQqVv_ZkD_1^po3xzA~Ws^i)Pt`u00K!^Rl}+Ea^1-0)h02kL8qk%j!Hmn;4T zOlU6sZbBkjqSk7gf?f6)Eip-Lur!)FYGkAwvY$Rxag(W)OsmI;fFA-f3Ssis$tmU^ zJnAwcL`%g)LqbCyhQj_`h-o#V6TOGTRHQIHPXpSbdcFca!hBs`kr5I7NZH;GYmoAY z9p+uSyWKo>da4PYTy~gM_CElcPRyw4)DCjs0ezu8-_3nF2+UWvaeAb`W|+q^0 z-%7fUyl2KU5tix8!yH%3FFv0|aU)bCm83kSx+;8)zW#)p(Hl?^4DF56ts#GQejP5E zG3X`5s?j`Vu`bUG5NtyI0nLQm_V=$>&{WB42ObJ5)aO-k_0jGnl8V2HbB24w7_btd z?sUL%Y%zO(BnA~5J4pKc{4Yx?Alo;g!sIz-y&Y1LLF*4<19tvbIOAQ6QcNr~An?WK zMQ&5?z|3q!Arrm{cNzioHV;>Pd;h1TZ4%_OoZP4})-F7$Rl%2T5fDRdX zlb5FV-b9+LaZ=DuH;=n@!Q}#=L%vU2)Kh{|h&ZRzLh4*6fVVU~9cTT!B-rxR{5%_6 z6KO0pdIUYNO%ndBXW!<#l-?IuVwgdELcVYo%0yu>a;miiZ7TPja278m!~n3kQXCbm zmGwLmSR+zWDoBeKWHPeFhEN$Fd0T*LtCrkWfLH&4xU6y@d;Os(NOKbl<%HL=Jj(Y* z_>`9?CId&-1PqvLAUUodfUV35-v04#)0j)5gG1tVS3z>rL2~4*in;x59*V*pEW#Ny zq)eerP}Ah1_WR1V!ph1J`v~7V`cl$uNsQ|c2ur_Hm!(b-gEd#k$Qfmgeg@bZF3ts! z)G**)Mh$fJ=gWN3w+&kxIz)Q3V0sc6=QRNgF-(s z(*B?Bh2%+?1V`i&WOD-l%jPJ{h=U%|MSy&cG$m?)Vc~-s8a_TgB4Sjn8yM~L6Deas ze&TzDS*HbH-uw;5%KA+9XU<>AMjdSfN>%}K>(U`8(WRZ95a1gmG0qpqqo#10=B_C# z0Grtx44K_#opX8|>BqK(Z^|HFs*|0VSO>5xDDSJ1(#}zep)z9tf_s$+6K+o)9?sq; za6_P5gc8*{HmM{?p3!z!LeMei`gUq@_09$9>#%&Y|1(aST#!P;)$C0kIW-P)!^XiU zb=k8x5G36}lC;*{NhdocORQLGE7HwHPqbUFWA5|dr?W%RHdZa{ctF}rvCvBPiNW6C z>)xRbsQkhiLJnuThIT1&^X$D1=?|VrnSWJ~$zok5bYs-4w`!V6HTldO(maj$@>Z5fx2_?JG`0!F4%S!R_%=LSpDxtj5CneOT|BnU%GzGCxzsIzG3&9Pd$E zCl(3tmXVWlHG0EtDj7}bv$CSp<9>Vus>`#!h?=rmwNI0)hz%E1Q|@(P6~dz-{;YhM z!bwJwNj3~-g+*PdZ93`5%r%41cxOV2-dofqAU%p&pRjBvE{|tlw%&nV^-Pw3@%I~D z1V~26haz*~8xi1PWnbSm#WpWRi21vvCQLKaoK`H{Z49xbb2}$|JIIeKEhXW$5dN${ z{kA61L{@M)KH)ldR-&S(w@|sWz5jfS6ShPGpVt7zn%5b)arr}jQP1=5->|3aTH8nMnVCO+dm!{0`b$H>D zwvN(vTdWwMh&A#)pNOc*R907{=k_Q_v~wrf8+MjaJf6=Hn#fSz&&@HJ(iUubU&DD( z1nZ1^^riKj;^Rr<4v`k`?}*C1hro&w*KLzD{B*|NYIm;LJu`r)!{w&CcjAF!Ppg*v zT8}$1Gh?8x-@P=mZFq7bF|pjKC|gyMp?ZLg$vfTBW_9_&-MG8iaW0abh$~s{=2V}Q~E3L&U2SZznT={+@5k9-) z`gi;Rg}{U`-?n!%NJ%CbAWB(RTy31+jgn-4U79#bg>=WoYB}{{OP|IV-sA5(6*(kM zMq1$Ud2|S{<~IsBVWH0^C3!%#56fvFv>#G$jkwwA&(DuC+PzUk8?L?Am+9-V##Xd` zDkNT|pcv$Bf+_o2+uZ5BzgGwOB`Q)*{jU$MFvXywR!nCg#GbABk<_@QpBh9S1dqdy zt@ly6@3Fp|U4K=7AH3z~KWhM;G@bEV$qo+Y8EyjbnV-^8jukq&UaR|opU^@|lnJtq ztbS$}6%_#1r?OmUaWZUN38t5DoUH*qg<7Hpy8{27Za%%=4z3#dP@fh}FfzRXMgS6O zY7|jCJzK_8@@ItGdb;t*SCpJ!Qp)Eyv(`ovB$hI;ao0acc3`gbjPx2R-$Ijf#hS0?7xdc@c!J8AjU)Ioe9} zP{Y@svmCV!*lz=7Z%|O_jWF;WoQuB~lO^MFw%l`9dzS5(bU5NB;riB70b5sSNetA} zoj7hOvkJrA>aY~zrRl0*uMcx|jVw*>TAgd|hzD!!bFV%pYCKKeb&f1%*umQM_rcO? zqzX3@NH+%818Qhxzy?IFLrx~PNZor>-raB4aiA@|p)>ZP2W4gKDnIp@^=dwoo=?M! zD1fu1Z{#}$GRjP07V6MIDutZ#@;3Tb$4F+fHJs)vU1;u##Aj>2V+1?LNCBgEP}JHHj;9y{)h+xrGNPbab*}u=t5Wvq8^o|JUgcCGa)szm)w>Q8k$qjRmbFU44kkw8N7>!YsA)j?W?tYh&lG)Ut>FW~ zxrx1euN!rPX!H-~!hYIe_S_=1!}9-o9EQ7CY$(ZKnR8O6sl8wV4@mSazenMce&_>1 zvmeX`J(!b7AA9&;mx^ZkkU&2U__Yz#a~xet9OO9RicXW*;&RnVv4e| zDn?@g>F~O2-~q?8UzRA3xTO~F(ou49vbm|b$wfxy#+y&-DFS0-&M5QH@%NYc&ps9+ z2}rzPK?38owEv`GIQHU_o19!D#AuTr>DK&CJ|D-&ZSdL>B`oKs0IB67%?xxLr@84q zfc18z?*7wA4y=XyoF7>ao;3@8W)(g0LD>Q+(ayD#I3;Afk29 z+<3b{tpF{q3^%(t@0J{+ckQYBrdUvMDsDZo(n_uJeLt>tzyRA_(JCNVfz(!?E)y*} zlY)wJecFN7{|}vtCFo?moaoH!S5g%}Ae83yxL?c;8VT=0Os#D9IpiBgAlan>ify%e zj=0W^bK*CnYVGAvDWSN3_7%jeyBSrMgrwE1fpIysI%5y8@OesW{}GQaYHJ;J2Bc3p z=}Vuu)cv7N49j3$7TBo?x^{n01=CKD(9RnvpoW++Xb-%4kC!|Tq4K&thd!njWhACU z_oV;DfOUG86I^2}oaD`M>)xvkDSA;;-5jd|p0MJ2rZ9;R2Q3DJ`)r5ok&#Y8y>8as z;EN(3GlZB)@=C@{oyN;v293rS(&$-c4jQWsW>EJRlh`jS(fI6%WgKxS-60_%9~nzH z_se&hZI`}Ik&%(}f0cA!fyVcx9jqGtjzd5=k~~EkdRkDW+v+0L(fVtd6qlA>O4Ev< zc1!qJT(m24^e6WYRF1y5IfNY>x7dDp?86LhaI`2wH!=x%l9Uea41Iq%_V&QU!UBz6 z8J~`ZV$mWuAmk@})hJojtcikx9k`sr_P>*+X~ke|znSfJ5LC?OxeTebuGedK@UQ*& zOe@|&Sh9k4BKMdanCNFJfgp3CeLlN9WpNqpMIDIguio&uxoujqZ#@lbbSVjdd8uW! z_#s##j1Or=o;JOHi z(D8-53gLMqt+XZI8lW)EB>Hi4TYe(plabBeLmjTA5GgAs%E~%9Y|6{c?D$MKCsGRc zjf~hE2@>ez$Z>>M{WAl*3_F^60shuj2?;%7&Yd0RinxqDV~X<6eeXNJvy>MVV2%~6Cb^$q#WEaHQE(XZ@ycNmpki9GZCVd zFOU-W9v9|KSn~H;1Fr*1MF8cpukc6dCOYaT_1Q&J(J9{rvzVxc3KKMVy0RhZbH_ipz=s|(amC)IyxKK^WaqkyCf1;RHC z6;e}q5CSoI4i~v2Ct@#=S5j3<=h%cVmkL*QP6#VZ>_e;ihfs`CVqswx6>*PsC3;1w z8fubo@kn5`!3m&M>Na2N8PA8aHUlY#`J)S}P_zV}={ozXB{$k$!M1)O5eL2(a>Nid zSv7Q7vM*0k*RFBmw5FPE>HOr=gJ3;!SfAnE`Q4=)#mDnG=gqBG%( zET5AWZ@6*PGCVo>yn2_0e8<0nWcbKT&bZ&%dw25jL%~4YtD8<<8NvWedSa9+lrSCX zeyRUARv0cIGP>OzWVVYgnTCca^Ne{J#^m3!S?o3+0edW$DXZV^kx+tUWjY0_Wje-kyiM6we zuM&|n&L}sRoZ4Fk7k}7r7S=<1+L7|9G@f+VX{uLk+H^61mVY+1@ILh8qF+J{Qu9*` z3&|*Hp$S!mg$=hv6^msG^8*Py=Kkb5Lx+UyqJ9HzpFJ#u+>1a0dbvqV0}-3&3Ybn#e`Q$@#X))-w;=hLYF}H!yUYo1`{Phb7tIdhxpg^d%n}r%z^z zju7hiQ1l+bnEqOKAkwb09+M$UmUlOzSn^|(3W|n|f=n8f76TPazujT0TZ}qX`)e+i z^a+O3j2wNR^d%-58U_|tu*m+-rR~E*j5U{y8J(^BkL`(N`!KDqx*c=G=Cm+9`&Hn( zSWxCBl6ztXSNa0IA%=Eqi*67Qg+Am$avxD%x=Z?4Fv@S$&U&S?HD$Lqb8!j zI!b-P%R2(YL6cYU(nFJHLwdmt4`8QiGDd9ZgEL;0ZT^X`*CvVz9IVi}|;9smXw$4rT< z?LIvwK#-(15&|uJ#3W;v7)Zjj=ArH?+_5IkXilCUzbC(sy_Dct6LWR0%4tWUtoDtO ztcqQ3Ba)B=;A@!(pGFTt75zP2MY{ufLq!&%Cb+S_Evgxzf|cqKk~qT` z7Blg^fAuFS=BOcATUmJqD8BikfTBA`!RnYO@_B*3o7K-S&?Be6e&wifmJrS#5Ve_& zv5p1kp1UMZshPT5QbUX0hd5IHAJ@H_YkR%j zjqhm`Y+66;qZhMtRDNN+*r0b#F)2WKSMn-kBXczkrnpW+8Bi$mgdp(_L5!VuBI5S1 z$0Hi0eRLt4yI+kcpDAgp?_P9ZM(>6P50Zo$_ngxx$gbwL9X6LWAU%U#_3(Bp3(mypviQr3psEEO3`?r^0-6^9Lv&}Z3cy8(hoa< zlbIW-J&Fo>SkiPn^Gmgroq@AjP#LYy-*NJ*dOrEP33M9zLHJr<3}1k@iTmH09zsIrlPeWN$qHIf0OWIY9VGSTeR2}O;>kcFwBhRK;b7q3J+vmYWmF&)Q=pXK z@<3(F4F7W0D^@t9YT+AXH4_4Ec{c+F20!^vUqH4% zyGdoq>+6XHcD*0f-d2#*mk&ND4VOLIQE`Nmh~;2>nqW)@+qBcX2#GeL&UrUQV|my>3?pU0uSjZ1{J5 z_g*+B4Rg0g3q+OhDUjhX(w$#kP*eNXpTf`C&Lu-vPc-+DzJTHT4U@pq8V-`SObIT8 z+hu3SNX*!R19G81E3b_)qKKC1yG2|cA%>4l5^avj`RRX ziYHalk!m2yN=kwyCE!s8A;)_|NBD05S570N-QU@W@Q~o(Z}+^M&_X#7!-!UNva>y( z0{)4OX_t%e$OvMyP2oCe)w*F|NN9bmy*h?k>f)N|&vQt$@bK53T+mW$c%al(OnTKt zxy`nPBE0vQC=i0o!64JaKr;ao<5*8mL*xt}Ow(_`{i{U?l1_QyD1~V$2{r!HGp&c5 z>w|_h%nsU!LKY(v?fWZ5xB2E>%VmMouZ<{As4Qh&-M8KZ6>$IEp11xo+VG}ekJ}m9U~>y^uhsw47 zj~w;Ucol|thC&I^(Ep95K`PGS(Pt&i3JyMySuZY{jjbUR8cZlBh2_ZNY0=54*4gpt z%{N>^_wCNIc?l=0nB=jEh6F<*#onX{4&HYQv7nENxJD)5_ytE)*wwT;h%j&2oNW?L zG6jCg1kTYPq@PO%=Jo@Wa_E=s&Nth%R2#`l{#n)7wJ^UE_KT<8w4tJafkHLKw%+^y zlVf*dYLgDwD=FI~#FOeK_NAA%!&fw7rsS;nB?gw$KHK(2>xznI*0iM~O;TjMcG0il ziAuI2G`9PY2O`>Rw;_bS?lnHa&be0udq~dN96Zg&91I99-}CIx$$TLP{uXq1NgrUkP$biv}-Ll5(cmJZnCHAqumzEOdBYtyoj?tD?k+G}kD$9mVdw<+05Lin(V+PHe((L9*ElrqCj$N>Q0?I|=VeBEJ|iL3Z=Jr1 zE2rzElI!#_=p0Nr%7t1%^k24zCuv0KL(&(__$aNe7Ib>Me~||VMu=2B67nHSIXdZR z|NVn*$`5Ml_*T5!K4o^;N;Vji;STC6&}}fn|F-*F0&jyE+ldJ%f%o2}F*QEv*;Q(d z4Twlucd~$mJJ_*Ru=^Oc?Jz8;t)=P71u6iY`Xb`{W1t#;CD=^$YmtOLCxE7v>tbc|izLe2HJ z3sl6+tlz#lU|O{*-aGwgTS3HN9It1EZ!^#IFSnzW?)uw$J#XZQ$jEB#ZeaboW=vp^ zthDrxndRl*1D5?`(@)p=kM;^v($nU<3_!6rX}@GyGG>Ud%??Z8up;{Pz_$>XyzlqR zS6{v_HDYc($8*|WR{FKe`+@E;o zWTqyp>NQv^JDrMW)UB;)w-lJb2}q=;p=;$|2`$bo{bIMK^RuEHvgWpX(rF1?X>uzH zOHM9KOw7DMN^87F675AMVS2Mx_ke?ke>|x+Vq3%78h1-*`?qcb(H+3O6{=EtWN=s+~q|#rJCii$xw?S|0AfU`BzZSS4&7k zPLKbgt@uvnnwFX^Vdrcm$;OEoYC-?c#Df+UPS7mLn}8b~+PK6Wu%WtyGX1#e^vmw5G@s#(_fwIoCdgmjetWm(G6IE&%~m-XJH}Y zU!%y@Q&nYPrmiTPUYeOatB-&Y@>?woC%=+$XYLXS);mzRx zDkmf<;-G-?o`n&jZ}bz??fLmxa0^Kex`6pd*Fl2uHHAdxJYtj_r<}ba?Ck-h0lu=RNns{ZeD^ zJx0~2wf0);ne#WF2qgt600JHY7#J8pMp|4M3=I6A>mWD?(C3R$KOYzv5KKl~MAakn zJPTeIu!%oXlBF*3nty;vyGXBvP!?RspjDrunix+>hEabAxU$~XUzekmyC;hPMwpIe z%XT~pT)gMBC9z&+wQWk<`%gbP3voV8I!|ZvKJhzeJ0DG7A*7~g7{fsYB8wme2($dy zfDAB%YJ-L7gL6WG3Pe31f`cL-6#&9X#(R?hqh~v$^u*-#SHt$kD;4r(>-Y4ap~YFC z_LhS-1#ZU^$qlY%==_$$If1l3I6cNC+ml{xOTNAJM9$Lp9%l`b_wp_6L$>zOPwf^M6 zp?}fw&^wo;Sz&ByPKb}aozL*m@p!r78^3~#)MjzKGi+*UX6^sv$G}O+^sy@5(Z+4R z{hFQ;^^Q~e+ggL8P3oY+mqm~T_fNT|=Dj{kVFuyKhDR65zHE;mA8J|CynLf9 zkc{Q=zGN$$ajnhZw4EQxOh`^fdUp0-X&P0?qWJ#xCy!@7rhZ-WVw2x`p7B5o>>)OW zmCJ>!06EY7%M^HA4u9GO+5R5Sg4N_Ge#>Qc$8$|)=K20}Nk_A7{3%77(OE2P-Ho>P zuc)J`cfB5zgUC+IE|aH#&bR)EC6m$oTnDZReC{iU=8{)7dz{NbaS0<$&5O3u_HsT3 zezf*4P~Vh1Ys2y-b)v7e+l9r0-%TiQ`-f@pzfgOBIjbvpcfaiNdQUC2fVGy3@^t=w zb90k$u~5)4yaWC|17(1LfzkQ2lMu4%fIWgct8Twdr4_^aqeSa1HQ$lAw_-TdCrTrlyp-RD4P0OMY;(R=(yW4K7!EtZb~N_B*UG zx_zykTG8N~*Td${s|K>;{YuC~93U;7kvOkxkvu-GnBmiz8=#9_RS45Po233~#u?EU&1r?kg)Vx1tmB4K&$| zZf`NVa60K;hj`?d^N`PgYvWgc!NLNq6>XDQgBg><_NOu0`1JI20t_@Oj#A1fv9& zlao_z?(T?KH&(1S&Ed}EWMy+vot*EECV$bNLg`s0 z9OL{tF=d2_y* zul$CaRz$yzCoTUW=%-P9A`yP5XmAZyT$$}jHIYG;__k}D9Ev*bCCGR>eljR@W zO^#noEe^h2uAG|fNiOE<&9QDXVR1QrYJO&v2WV+PXXoZH>|snC{g<;RLURr{U9v}` z%%6W)ro}ncC|eJ%)|;T23?+kLg7rh|Xu7?*0ktmK?3<3wgx``|TWK;;5Bjf(umolt zv5<6Y2{8%L3GaYp!^`&D0YYbwm+*(;n_Y@kFq7qdM!n9V$hdIc&>>LP))`Bp5Y5jn z=PTgm!?RtYke^G7s$t()X%3Y8E4bBiuE*YgVG^;t^<%D?HZl(X5_8s`Z>CmN)Y1}> zR*ElWA9E<^TV{U1#==sV7(K6E<)r<2R1WKTHOwCjAY(={Mz0*v)K2er+eix5aW|pT z)KOliCMQSVNPOlQ7Qn+r$CpByKuvJh@AiSj#h!K!CSO`yR9)Vo&b}qxTpSE<_PPMy z5ZKuwzByWp`Y{HRL3L6CiIRY&lJ@{87jWN6WSLqTo-)B~#D>x!Ld@LVKju);Pzjhp z<7&4o9oSBsXLG_1E}&Kjd-G+3gE1y04TvS|9`ANq6}8WqA|GBkwXkM%%0LX;SH^vq zxg&t%y+uHAD_+XCBey?b-0kuTQW*~ ziFB}3uH+LDr39DQ3a&O0WR#8FdBZ#zbL2O1TVJxO!jo4O2 zLan16`jnsCh}2Wnk-NDQ&9bzCWIa-=t=mbz@fuWGR?7B;$L`_a!w>zz7YaJq(if7U zFS{fk8k!{8#og5h_=*Fe1Shd^%bNs1(>&LcQ~h`t zj~*d2Rsu2erH!%2|Bh|ajl|}M3=u|3%6o#9uBz@vQ3I0A0VYPNyIO&Ka&r8Si^gah z%RdUW3CZ_)Em-d)S~}Yllo8a$ zX66&4(gVX6C+U~J@D>v>4-a>)#s>WRlq3toqoTsL!^htUI6%6^p$@6TDXUDt`fMfb zyydN~qqCCiZ64Q50vZ+@B^tJ{s7QH%J^TWt?9Y4_MO`Xb!)%CLSJg-?f4zH0c=+{| zWI?NHjlho?0mE#-(@?}y2&R^Z3;N`yFouJyXN`x_He~(b0|eL0`Gd@=7Dcg$IsBY%QNbL0Qq!aTnw_2p#qNX58#c zhUvADQqVv_ZkD_1^po3xzA~Ws^i)Pt`u00K!^Rl}+Ea^1-0)h02kL8qk%j!Hmn;4T zOlU6sZbBkjqSk7gf?f6)Eip-Lur!)FYGkAwvY$Rxag(W)OsmI;fFA-f3Ssis$tmU^ zJnAwcL`%g)LqbCyhQj_`h-o#V6TOGTRHQIHPXpSbdcFca!hBs`kr5I7NZH;GYmoAY z9p+uSyWKo>da4PYTy~gM_CElcPRyw4)DCjs0ezu8-_3nF2+UWvaeAb`W|+q^0 z-%7fUyl2KU5tix8!yH%3FFv0|aU)bCm83kSx+;8)zW#)p(Hl?^4DF56ts#GQejP5E zG3X`5s?j`Vu`bUG5NtyI0nLQm_V=$>&{WB42ObJ5)aO-k_0jGnl8V2HbB24w7_btd z?sUL%Y%zO(BnA~5J4pKc{4Yx?Alo;g!sIz-y&Y1LLF*4<19tvbIOAQ6QcNr~An?WK zMQ&5?z|3q!Arrm{cNzioHV;>Pd;h1TZ4%_OoZP4})-F7$Rl%2T5fDRdX zlb5FV-b9+LaZ=DuH;=n@!Q}#=L%vU2)Kh{|h&ZRzLh4*6fVVU~9cTT!B-rxR{5%_6 z6KO0pdIUYNO%ndBXW!<#l-?IuVwgdELcVYo%0yu>a;miiZ7TPja278m!~n3kQXCbm zmGwLmSR+zWDoBeKWHPeFhEN$Fd0T*LtCrkWfLH&4xU6y@d;Os(NOKbl<%HL=Jj(Y* z_>`9?CId&-1PqvLAUUodfUV35-v04#)0j)5gG1tVS3z>rL2~4*in;x59*V*pEW#Ny zq)eerP}Ah1_WR1V!ph1J`v~7V`cl$uNsQ|c2ur_Hm!(b-gEd#k$Qfmgeg@bZF3ts! z)G**)Mh$fJ=gWN3w+&kxIz)Q3V0sc6=QRNgF-(s z(*B?Bh2%+?1V`i&WOD-l%jPJ{h=U%|MSy&cG$m?)Vc~-s8a_TgB4Sjn8yM~L6Deas ze&TzDS*HbH-uw;5%KA+9XU<>AMjdSfN>%}K>(U`8(WRZ95a1gmG0qpqqo#10=B_C# z0Grtx44K_#opX8|>BqK(Z^|HFs*|0VSO>5xDDSJ1(#}zep)z9tf_s$+6K+o)9?sq; za6_P5gc8*{HmM{?p3!z!LeMei`gUq@_09$9>#%&Y|1(aST#!P;)$C0kIW-P)!^XiU zb=k8x5G36}lC;*{NhdocORQLGE7HwHPqbUFWA5|dr?W%RHdZa{ctF}rvCvBPiNW6C z>)xRbsQkhiLJnuThIT1&^X$D1=?|VrnSWJ~$zok5bYs-4w`!V6HTldO(maj$@>Z5fx2_?JG`0!F4%S!R_%=LSpDxtj5CneOT|BnU%GzGCxzsIzG3&9Pd$E zCl(3tmXVWlHG0EtDj7}bv$CSp<9>Vus>`#!h?=rmwNI0)hz%E1Q|@(P6~dz-{;YhM z!bwJwNj3~-g+*PdZ93`5%r%41cxOV2-dofqAU%p&pRjBvE{|tlw%&nV^-Pw3@%I~D z1V~26haz*~8xi1PWnbSm#WpWRi21vvCQLKaoK`H{Z49xbb2}$|JIIeKEhXW$5dN${ z{kA61L{@M)KH)ldR-&S(w@|sWz5jfS6ShPGpVt7zn%5b)arr}jQP1=5->|3aTH8nMnVCO+dm!{0`b$H>D zwvN(vTdWwMh&A#)pNOc*R907{=k_Q_v~wrf8+MjaJf6=Hn#fSz&&@HJ(iUubU&DD( z1nZ1^^riKj;^Rr<4v`k`?}*C1hro&w*KLzD{B*|NYIm;LJu`r)!{w&CcjAF!Ppg*v zT8}$1Gh?8x-@P=mZFq7bF|pjKC|gyMp?ZLg$vfTBW_9_&-MG8iaW0abh$~s{=2V}Q~E3L&U2SZznT={+@5k9-) z`gi;Rg}{U`-?n!%NJ%CbAWB(RTy31+jgn-4U79#bg>=WoYB}{{OP|IV-sA5(6*(kM zMq1$Ud2|S{<~IsBVWH0^C3!%#56fvFv>#G$jkwwA&(DuC+PzUk8?L?Am+9-V##Xd` zDkNT|pcv$Bf+_o2+uZ5BzgGwOB`Q)*{jU$MFvXywR!nCg#GbABk<_@QpBh9S1dqdy zt@ly6@3Fp|U4K=7AH3z~KWhM;G@bEV$qo+Y8EyjbnV-^8jukq&UaR|opU^@|lnJtq ztbS$}6%_#1r?OmUaWZUN38t5DoUH*qg<7Hpy8{27Za%%=4z3#dP@fh}FfzRXMgS6O zY7|jCJzK_8@@ItGdb;t*SCpJ!Qp)Eyv(`ovB$hI;ao0acc3`gbjPx2R-$Ijf#hS0?7xdc@c!J8AjU)Ioe9} zP{Y@svmCV!*lz=7Z%|O_jWF;WoQuB~lO^MFw%l`9dzS5(bU5NB;riB70b5sSNetA} zoj7hOvkJrA>aY~zrRl0*uMcx|jVw*>TAgd|hzD!!bFV%pYCKKeb&f1%*umQM_rcO? zqzX3@NH+%818Qhxzy?IFLrx~PNZor>-raB4aiA@|p)>ZP2W4gKDnIp@^=dwoo=?M! zD1fu1Z{#}$GRjP07V6MIDutZ#@;3Tb$4F+fHJs)vU1;u##Aj>2V+1?LNCBgEP}JHHj;9y{)h+xrGNPbab*}u=t5Wvq8^o|JUgcCGa)szm)w>Q8k$qjRmbFU44kkw8N7>!YsA)j?W?tYh&lG)Ut>FW~ zxrx1euN!rPX!H-~!hYIe_S_=1!}9-o9EQ7CY$(ZKnR8O6sl8wV4@mSazenMce&_>1 zvmeX`J(!b7AA9&;mx^ZkkU&2U__Yz#a~xet9OO9RicXW*;&RnVv4e| zDn?@g>F~O2-~q?8UzRA3xTO~F(ou49vbm|b$wfxy#+y&-DFS0-&M5QH@%NYc&ps9+ z2}rzPK?38owEv`GIQHU_o19!D#AuTr>DK&CJ|D-&ZSdL>B`oKs0IB67%?xxLr@84q zfc18z?*7wA4y=XyoF7>ao;3@8W)(g0LD>Q+(ayD#I3;Afk29 z+<3b{tpF{q3^%(t@0J{+ckQYBrdUvMDsDZo(n_uJeLt>tzyRA_(JCNVfz(!?E)y*} zlY)wJecFN7{|}vtCFo?moaoH!S5g%}Ae83yxL?c;8VT=0Os#D9IpiBgAlan>ify%e zj=0W^bK*CnYVGAvDWSN3_7%jeyBSrMgrwE1fpIysI%5y8@OesW{}GQaYHJ;J2Bc3p z=}Vuu)cv7N49j3$7TBo?x^{n01=CKD(9RnvpoW++Xb-%4kC!|Tq4K&thd!njWhACU z_oV;DfOUG86I^2}oaD`M>)xvkDSA;;-5jd|p0MJ2rZ9;R2Q3DJ`)r5ok&#Y8y>8as z;EN(3GlZB)@=C@{oyN;v293rS(&$-c4jQWsW>EJRlh`jS(fI6%WgKxS-60_%9~nzH z_se&hZI`}Ik&%(}f0cA!fyVcx9jqGtjzd5=k~~EkdRkDW+v+0L(fVtd6qlA>O4Ev< zc1!qJT(m24^e6WYRF1y5IfNY>x7dDp?86LhaI`2wH!=x%l9Uea41Iq%_V&QU!UBz6 z8J~`ZV$mWuAmk@})hJojtcikx9k`sr_P>*+X~ke|znSfJ5LC?OxeTebuGedK@UQ*& zOe@|&Sh9k4BKMdanCNFJfgp3CeLlN9WpNqpMIDIguio&uxoujqZ#@lbbSVjdd8uW! z_#s##j1Or=o;JOHi z(D8-53gLMqt+XZI8lW)EB>Hi4TYe(plabBeLmjTA5GgAs%E~%9Y|6{c?D$MKCsGRc zjf~hE2@>ez$Z>>M{WAl*3_F^60shuj2?;%7&Yd0RinxqDV~X<6eeXNJvy>MVV2%~6Cb^$q#WEaHQE(XZ@ycNmpki9GZCVd zFOU-W9v9|KSn~H;1Fr*1MF8cpukc6dCOYaT_1Q&J(J9{rvzVxc3KKMVy0RhZbH_ipz=s|(amC)IyxKK^WaqkyCf1;RHC z6;e}q5CSoI4i~v2Ct@#=S5j3<=h%cVmkL*QP6#VZ>_e;ihfs`CVqswx6>*PsC3;1w z8fubo@kn5`!3m&M>Na2N8PA8aHUlY#`J)S}P_zV}={ozXB{$k$!M1)O5eL2(a>Nid zSv7Q7vM*0k*RFBmw5FPE>HOr=gJ3;!SfAnE`Q4=)#mDnG=gqBG%( zET5AWZ@6*PGCVo>yn2_0e8<0nWcbKT&bZ&%dw25jL%~4YtD8<<8NvWedSa9+lrSCX zeyRUARv0cIGP>OzWVVYgnTCca^Ne{J#^m3!S?o3+0edW$DXZV^kx+tUWjY0_Wje-kyiM6we zuM&|n&L}sRoZ4Fk7k}7r7S=<1+L7|9G@f+VX{uLk+H^61mVY+1@ILh8qF+J{Qu9*` z3&|*Hp$S!mg$=hv6^msG^8*Py=Kkb5Lx+UyqJ9HzpFJ#u+>1a0dbvqV0}-3&3Ybn#e`Q$@#X))-w;=hLYF}H!yUYo1`{Phb7tIdhxpg^d%n}r%z^z zju7hiQ1l+bnEqOKAkwb09+M$UmUlOzSn^|(3W|n|f=n8f76TPazujT0TZ}qX`)e+i z^a+O3j2wNR^d%-58U_|tu*m+-rR~E*j5U{y8J(^BkL`(N`!KDqx*c=G=Cm+9`&Hn( zSWxCBl6ztXSNa0IA%=Eqi*67Qg+Am$avxD%x=Z?4Fv@S$&U&S?HD$Lqb8!j zI!b-P%R2(YL6cYU(nFJHLwdmt4`8QiGDd9ZgEL;0ZT^X`*CvVz9IVi}|;9smXw$4rT< z?LIvwK#-(15&|uJ#3W;v7)Zjj=ArH?+_5IkXilCUzbC(sy_Dct6LWR0%4tWUtoDtO ztcqQ3Ba)B=;A@!(pGFTt75zP2MY{ufLq!&%Cb+S_Evgxzf|cqKk~qT` z7Blg^fAuFS=BOcATUmJqD8BikfTBA`!RnYO@_B*3o7K-S&?Be6e&wifmJrS#5Ve_& zv5p1kp1UMZshPT5QbUX0hd5IHAJ@H_YkR%j zjqhm`Y+66;qZhMtRDNN+*r0b#F)2WKSMn-kBXczkrnpW+8Bi$mgdp(_L5!VuBI5S1 z$0Hi0eRLt4yI+kcpDAgp?_P9ZM(>6P50Zo$_ngxx$gbwL9X6LWAU%U#_3(Bp3(mypviQr3psEEO3`?r^0-6^9Lv&}Z3cy8(hoa< zlbIW-J&Fo>SkiPn^Gmgroq@AjP#LYy-*NJ*dOrEP33M9zLHJr<3}1k@iTmH09zsIrlPeWN$qHIf0OWIY9VGSTeR2}O;>kcFwBhRK;b7q3J+vmYWmF&)Q=pXK z@<3(F4F7W0D^@t9YT+AXH4_4Ec{c+F20!^vUqH4% zyGdoq>+6XHcD*0f-d2#*mk&ND4VOLIQE`Nmh~;2>nqW)@+qBcX2#GeL&UrUQV|my>3?pU0uSjZ1{J5 z_g*+B4Rg0g3q+OhDUjhX(w$#kP*eNXpTf`C&Lu-vPc-+DzJTHT4U@pq8V-`SObIT8 z+hu3SNX*!R19G81E3b_)qKKC1yG2|cA%>4l5^avj`RRX ziYHalk!m2yN=kwyCE!s8A;)_|NBD05S570N-QU@W@Q~o(Z}+^M&_X#7!-!UNva>y( z0{)4OX_t%e$OvMyP2oCe)w*F|NN9bmy*h?k>f)N|&vQt$@bK53T+mW$c%al(OnTKt zxy`nPBE0vQC=i0o!64JaKr;ao<5*8mL*xt}Ow(_`{i{U?l1_QyD1~V$2{r!HGp&c5 z>w|_h%nsU!LKY(v?fWZ5xB2E>%VmMouZ<{As4Qh&-M8KZ6>$IEp11xo+VG}ekJ}m9U~>y^uhsw47 zj~w;Ucol|thC&I^(Ep95K`PGS(Pt&i3JyMySuZY{jjbUR8cZlBh2_ZNY0=54*4gpt z%{N>^_wCNIc?l=0nB=jEh6F<*#onX{4&HYQv7nENxJD)5_ytE)*wwT;h%j&2oNW?L zG6jCg1kTYPq@PO%=Jo@Wa_E=s&Nth%R2#`l{#n)7wJ^UE_KT<8w4tJafkHLKw%+^y zlVf*dYLgDwD=FI~#FOeK_NAA%!&fw7rsS;nB?gw$KHK(2>xznI*0iM~O;TjMcG0il ziAuI2G`9PY2O`>Rw;_bS?lnHa&be0udq~dN96Zg&91I99-}CIx$$TLP{uXq1NgrUkP$biv}-Ll5(cmJZnCHAqumzEOdBYtyoj?tD?k+G}kD$9mVdw<+05Lin(V+PHe((L9*ElrqCj$N>Q0?I|=VeBEJ|iL3Z=Jr1 zE2rzElI!#_=p0Nr%7t1%^k24zCuv0KL(&(__$aNe7Ib>Me~||VMu=2B67nHSIXdZR z|NVn*$`5Ml_*T5!K4o^;N;Vji;STC6&}}fn|F-*F0&jyE+ldJ%f%o2}F*QEv*;Q(d z4Twlucd~$mJJ_*Ru=^Oc?Jz8;t)=P71u6iY`Xb`{W1t#;CD=^$YmtOLCxE7v>tbc|izLe2HJ z3sl6+tlz#lU|O{*-aGwgTS3HN9It1EZ!^#IFSnzW?)uw$J#XZQ$jEB#ZeaboW=vp^ zthDrxndRl*1D5?`(@)p=kM;^v($nU<3_!6rX}@GyGG>Ud%??Z8up;{Pz_$>XyzlqR zS6{v_HDYc($8*|WR{FKe`+@E;o zWTqyp>NQv^JDrMW)UB;)w-lJb2}q=;p=;$|2`$bo{bIMK^RuEHvgWpX(rF1?X>uzH zOHM9KOw7DMN^87F675AMVS2Mx_ke?ke>|x+Vq3%78h1-*`?qcb(H+3O6{=EtWN=s+~q|#rJCii$xw?S|0AfU`BzZSS4&7k zPLKbgt@uvnnwFX^Vdrcm$;OEoYC-?c#Df+UPS7mLn}8b~+PK6Wu%WtyGX1#e^vmw5G@s#(_fwIoCdgmjetWm(G6IE&%~m-XJH}Y zU!%y@Q&nYPrmiTPUYeOatB-&Y@>?woC%=+$XYLXS);mzRx zDkmf<;-G-?o`n&jZ}bz??fLmxa0^Kex`6pd*Fl2uHHAdxJ_gx z=8q&RH#hmt&3Dc|d+&3@RFtFvD8wi*FfagF83{G$>n-&06A2Fb%%1Ih0t15yBP$`M z0m?YeMAlJUdK&Pkrwo!WO2AAEmyxv?j-g@f*^xGI2T*GF4`LFwZd^t+SMcX-s20rxa- zP=z5QxRozxONF4=iS%$2_m}vW42W|{ggPI(yEDpwiN^&b@A)n}ZnDm3ru1*KVWnmG z%r7P9p=9vhsl<@rZ63v5gCjj_@kC1>8)v52IVkw^gXjHbbutb{Z$Dz)BQFE+mGsGcJhAuZ=-l8qtBisi z3lR9Iln#`a>MtJ879Fw9$jppSP9D%;pcqky`RwROF0xIyr|YkM`q`?9q|P*TF&?NQqZA{N!*}6 zQ}`}AvftGw>FX-~paw${4|;O-D#IM@M>w7;-OeD=GeIY}`LCyOOectK2BB?C87?RN z4#gW)B`(A1P5)=L{L`-xKIWl8oqFXno_HqxR}7xeX`<2;!lp2krRvJUhfE&Lq<{d( z=B6o8R77|ptn5y#wU6*M>{_jzi9z=?TrY~vE3vfnlzEj}*A!1RACBv1}VX&i&ii=q^yHeLSwqgGx`a@^LE2gUMo@y_;k-bDKA>Pq4Gr>m-$ zq{`>|ni`d5I^ZKDkgkv(Vf(BzV_)X-V&_D$Qe!}>?Jbk zz@Y>n;!hgQWy=!wW8_ayOZ$bo*8X^2q}8sQgS;CM?SC-a(^4XA!!=Yv@$hy#t&=G{P59Pe)d)( z3Y`>L5Fg*4W55u6IbK-a;R`E69~43>A|kK7vr{jmWzhCoO_svtbdsA-?=)1W>6h1W zkB5A&usJ)uDR9g*Huc`q4L#bm|xtFI!eFg*xo`0&dXk1b8K7}2{1@Ovd7i= z7$fc_evzA)r_|wtx8C|1V)gh4^Pu^Cx!Sz^5IZj~FXIC|De(y^h2ANr$H@0LKNdr* ztYvr}3Q49>~KZjewmdJ+ywTWlZm5tEdN~fjVszE^G?lzz20(Vp1K%S?cQjw>|6Eo#i_2Y-3+O7>dXv+ zZKj_ritbFgAY;t1yG3-TexO|Hi!YvrUN~lGh5Mob6}`;5OE?R9Dd~-0tpYhnemlaa zTa6p7yIh-qPFfQ?U|%DYq%r`4M2xRo&JNjGD+-Imn~O@8CvS`Rpu_8hg{=5xDU5+0 zVVCCwr>FVbN<~Y z>6?Itbiu#9TH@+`<$dTIv(^*VJn4CR1j}pz!Z%+PfB1;sR1?q&(j$s)3gnwG(1>{k2;qeX12b3(jL#|DrI-hGth z69%uf*0*R{xk^g*1wi0jP)_wL(@?a$oMO!=1@-r>kD6uyB5ucH?IHXvEo>>GUch5_ z{X@4i!O)Fr)V_Z^(KltktRgELmY@q096UH-Y++$B|J(jA8cryvZ9@+`EqR)EH=tfz zv`vJEujBUYBn8!3>D_VQ(%wUaHX+>L7NPMP{psXPY!9eV(xcVu4T~j%qZ`j-bg#P{ z^jWP=k@w^5rY5cs!N8s1c5=Lj7RE{QbmTs0o|O!>9=#_7t+yajK=8IH zQ^1CaJhxewlUY#+gY@@=P5*i3CnuDv_0yc6f^a{NW-BWTN;KM!cMPZK$G|66P3r~E1qfF$!I9a;m3x3)x27@!gYX2T3@b-S1tb<*RWF)7!w2Q7v zqEPcp<(;vIoOh_j*!=~MCL@1cJ>SIdnbcPx7ezqCpb!?Lj_L0n{h5vA^*))V6BOpH zcfb?k$NB82JgLiEu3b)7C@eX6pU`67rxz%jrbt{^=)+~7Kj0me%&H!Vb~EIxPyO?q z^yj{%V%hlMZ5UVkc)F-T=XX($M9*Qlk}!(^Zqxhdlu~n0W$+nm?NSsHjqsEE zpypRliz_09q$jP`TQKdh#gLwun8_F#Ml^Djb8DAw@Jak?W`4gXFv(TaD^pjD(fJ6^0#3SUgIK@^6KXWTah* z@b!T*d1-0D9*U5|X{~|oslZ;I$K&`!<1hYu+ty$0zAi;Pm#HZdbwEb=xfL_dtdK<0 zl2_47%CE5Fog)MqoSj5&)kg3w9zW#=6W_O3Eq!P9r8l{cmy*!n@{V{;OHE|%!`AnT zTddE?`N0^mc6gJjn_3)=Xa;_Bc-D|YIGk2h-bLj9!1%y#!>}NB&FA^J4Eti=eV6eA#xe|c;(8?n5 z2_Vq?fu+|vQ1b%>VM85>z4ll4uxyisYwtTWziP760L|U7bB22lW0h3qXXd55b=+M8 zrjf{{{dzhc`yBsn%d=N;8HvCsV=~x0P$}lP@kIz3S4DOP>G8xxLIQ5>*UbheoBIQ6 z5czJ#iGMdzB$iKj@8%!{h5gb7zD}x1c+bQ~dziTa4JVFGw8y3L1l%UssVq7=qK3cY z!(;s}JTGSbMuqw@6-jY=*u0V{Au19e#fRG!uiwllkq%<9A5^d{i|9f-*?$RvaHDg; zW>4P~Jns$eiSVRHb?Ysod?=+0399oL7PxxvuI^vsNQ*7om;Kz)%l&!~k|tey*ZG>oHx92fL6)PRQ<^lcFtTi;2w?1Bq z=_fxM_-8{?E;e+|WsXBl0CNMmG>%#tOhbSpd8UopCAQuLSh1Rd-kb8|<+eAZuq%Qm zWoHjghqa`Q=syA8guct3XWjW(x8f8czKd&B9)f1#q#h?*1$hMC$HTLt^9jpY$EO0?>Hv#ngp zOZ}!kKD1Sn(QwGWei2`c^ei($<;YknjKyyDH=tyv(-H5}si#^X{V^Mu5)X916!C>QP7GF_tTle8ys z{F^X+>BFZ@ZHeE|_Hea>`aFV6dH<@`+MqdtwfiT8Z3ng|8l2&Mb2yXo6`q|`puOe@ zwTmxYNBxUpl#mh}5%Rjzw)QdeB8Ce;fioc>yi{LOQc^7s=KZ@+&%mn$^s`@meUQ`- zIuLx!urS^31>2djFijaV5kyH*&gKB#plu*U^>D zG8v`zogqcXs@eZYM5e~O__h^Y6kew@j6Ph-(vVRR8i}+6-=L!T;_TPQOi#tp-QLO7 zn;hG8y83l(7V|~yJ5^BpVC`YaL?@KnBk%+9BsO@i`*=_Wa#@r%_@?_9Nkjf0%wMx7 z&xy1wSaO3;0}ugm1{wm&o16KVnKMh_kODKI+%PsXliEcKUy*SZwbLI0fhcEl5Doi@ z^_82ngB})J@4A}KMA+WACFYTRm&a|)B{U)j7piULWLwWkLWR71=l7A(b~jPc8gFns6O-OU<~w@hoz6jybS#{)5SMVcCf zKi|GN|4DS^&OfKyzNPFr!z8#!C|LT+~QQ@mnZL}DkV8zG2DVI zIuUUq6cjn2;F#I&!@PXS2W(!)l^w2SJUlDBg*qY* z6^-kf=d2w%P4L7wN=@zFIXR>r{pFDqb%BwUzSF@YX8m(8s}nrN>hEtYjau<$CRh?-@KzhWP_>{; z%1exh7#+xNZ>!9+Qh@+C)^2h<;hz$IoOk;(JRIDHngpwyMdvd*_~FtREB5bC(vv8_ zjjm)P!G&Kbkz;&2EzP-2Sr#XMH*x5wLuE+=rA0(75zCT$b_5y_$r0nl^ zukXHVO#F&sXh{rOXh9`_FAfGcyX}s=|8RB0`xV3ao3WsI zCY3%EInj2~*P}KewmP0cx=JSm*0VO$L!Cqm(>2$64d(aN7$hV_F@U7z5$(1c_fr#I z(A+9!@Y^N$6HB=(2I6}l1Z7GBvD~3Ji+Y((GCLY);gN8D?bcd{&jm@Ch~GM=9Sk<; zFCO)bc!2__uqDXM;Mt(JuIken_FMvXj$VB~)ftiB8Pexze;IKd!nBe%u9@u_JtZY2 zXb0+Mq{@W9zR@eZ{DYk>?D62^Vnu?OZBd@$BDJxNuTVOOpGW5XSvgDT`)x+9_eUWD zdRra754JiFLHuK6-ZT$Qk+wQidGIMy?LN=oBE=3Y0{*Yx!p^Z{M_O^o8bPn4>akXD zt9Udu1pCIBbSiNb|Jw^d6%_*Iw9D+SwCNNT6;T^E`)+*`?dZt*G|%{K9pnEV`D24# z*(Nl{`2aN$Q38#wBYM4}hNwv>lS50FXKTsFSjb1?5gPF&!l@p|P8at39hnxhJN$)Y zDfuc*Bf zzdEFoU@K(Qye3PGFrbwSUnk(sZqxGkpU<(nLzd1x(cw@QxsC$@+T~` z(;)QIAhcoS4=5jJNRa}BC9mmH>wqfFIJQ996J%9)QT_D4X2r&U%Df6NWR9fV zT!Z;^Qj`sc@SUxK@0c=AWw+x5K(d^^Pl>q{S^sOisLGLZ*}2b6grG? ztX;LjW!oDg1>j=aGd99_BG-|WY3b9R$*PGN9Qu=3bxF-qC;5Od{2C><*`^78gf zf@kla-wANre_{~Xuva+lZr6vG7nj2ed9u~PgOl2!&MnTOqoK4tG_|RsE+|$g-BjUb zf4{>nH^)upm|Vmw@2 zl+NVqo_lsh?OF|0ZYD#zc2ae9s337%^Uv?`b+rN#VKr2SSE}lOwo{PRQz^!xZCb+% zp}&`C4$%k?O&B@vmcDhc0#cYXRH9U=va8>7i}eq$hj4#^S971K=}IE=a?;|%=~y23 zo{uIL+MIJ#`x7-45*uS;7;aL&A3c7Rd zvIGMho%i>VXK}SIfU>l)RgJWU)CLjqgQdL%<^~^0ePt%!;n2O>Y{tZzMF(buhj;u) zgJvb1hqT~YvwJe(v)2{+X@G?JB@HDq?;4Gr8Mk`!Vu}PdZk%-ZO-rV{ha%2#~zEpa-A9LsM;zR zAOfoRDZAupsE(6O%X(u(pK&q}O*Ed>*(EmdN{vA-BIU>c%)tJ`oCN_I_UU0C*y>ks zPuk6JFl@8&!}C@eb!M$cDKmaIhMV|7-LJqgVRvFYN0Qiz>A^23XjK}m{U>c^z-#pL z1?EeSJ6Adv%DGWNK|$y|LKuL=I;N<@ZAYN&8%t8Lx7$XxyoA0~f06!ilT^NM`xd2O zo34l9`qB7eN~w)aK$kG9C`GQGp`l3LgLAx9nuk4x{QYEPON0}TaHcj$!!vS(4Zt3j zepUd@1+3liTYIbJq6p1m&OKA;_DR+|i%T>OeE!xr@ptxXC5iX`e5Mx$^iP>-@`x4@ zZtM14PKkX&Crw@74KNdbCw#Xi&Hh|m=eWf)`x)EB!qd~!K*(A|v&8(jO=Lo*OwT#K?cbj;$c?zZ26w52lM`+@d&BiZ*8HBb2i|LUlPsWug=VI0 zxgDor7U)F%kUe_W1?&zbXn1UMOhgBFRJ{W%=+&XHO)!>;P#th5ogGagY-)Yn_p!0P zHD1BornRCXWAX5?tgP(ROnR$l(XAqe(r4WnW@owdmx}=YKB+W0+d@u5rgK{>7(#UbCWD_TypX&Z(e~+_-_Xu;9`ueh}r2#^bTA_ zJW)oj-RO|R`vQ1Ulm>SJoQ;!^kd)V6!mh^Zi4P#Ef!dq90*g?7M45!CgL2)4cCGi) zz|3~6Q6QsrUSM=M`|2}!O_u&{dZf%0sVvehu<_vmet1|;!d9a)2`JR@Gwfp5!JmOM zkBJn~etz)>{b&KR*HkV^Ao=pkwvDOrdF~p$QYS7M-D(PVnRbYHJo)9NyX;6#-vp;J z`2w}}_w>bv8LSPqL@7MY9;)XCVazSSu6o5D8_9I3dYiQNNIaI+^t6UiVL`KE+ASA5 zvMS2v>-4po5ZipUUQ=o;QH68U8M;)=k6#1lMT_4-D;1g^_t-6zW3&XMo*Z% zj9%{Oh9tu16$^FrU}$5pO$)TOHgDA2qGNgnqW*YYABy5u1?z_v*Mw`=CP}m|CKV9p zTABV0P>z=Z1fep1!BB`bf=8RwpRHyBJ_^kZL~EC-k$8IYPeK%ldG%T+?3PYH*iU97 ziPqbkxKIsAJY%;fY_td}vo@7CNXohnO}GsbDZ4J(QyiCo#tiv9p9#4lKvNA+r&3YM zzU!&!_mtCak>&~IXg|%=yqeXRg`Oo2 zenTwe$oWsF|JS)gI_9PR|2pm8gyz4P!GF##Gg0MJf~FmipryrgoAqxHBLlg?n-mmsN!=m4)CIwvB46mPL5GjAWupz$9iG(lT9R0;)=+LMJ)@L@|$LZ<}l>?`R= zB9d9c(YVjUUb@0eaF(?M)kw*d)SOdG0~r0y`M3v6&jz)Y)N01~E_?|oQEutrZ#`== z-8=Fxb9i`(2em0&P^W%NWF}%?A#_j>>Mfu*fu2s=*MCicy$N|tfUt0?A7`;GEfbLx zyLbO-4>`{gXrwJIEwV$breklMBd&RcL8;@Dn$cT0F{k`q8zIxb6GwK_QybF->|jYP zpp6UFb?Wvca#!Jw&H9T}7XvqUdrpmURJO7!nZunZ7_+)w&dOn_ft3n~zzD^ER=vi@ zVeYJ1I!6LrmtKqe^{_3et#xA?3Th~nlDOtP`VZ+TNWOFpO3sr6qC8^bxyHDcz(mfE?FD)XQ+E#!10f`9-t>lUq?$LBL3CCbG6k~*&rnx3#Y-9d1E0($4!)r4x6G+RMLwBnhuk;I**m^ zL>)Q-hDS++@M|4AiZA=j&lx)kkx_=l;8-<;>amO?W7EiP5@BiR((|YhdbLTIIBAVq zrIA{k%!ivhd2;0@Vdi;7{qeG(*G)VFd_-j&?4|u=1v+?m_)QBL&nxr|OaXC2LvpZ+ zW&_=`xPd@9N3Wgwl~ZoxWEF!CCmU$?*q;Xqm54zb>c9~-{)3e zC^$tNFt$r|OiWD@$6Q=$PzCYA?weB>Z}pnFp53_A$!UfJ0nkCrR#N8t=aYp$X|YTS zv{bfzdY>gMyu{JXkbg12qrMAPBZt-!ev3g&SX~{*(6^UE+PhOxh-1%l->draio#Np zWZo2vpr)p#y(1~Z3dRP3IBXRKmiyRbKWxNeA!<9@Ei_ecnvPb+=4*;yCaQcgFz2tg zL%@V1c=9_~iMV({GYF}5ajF%UN-}4wGuZipo%TYo)LJG$=YL751hvRTy>2KDH+TIF znbiox-O5^t@juQ>l&iM4)*!`mZH-nCbC;o_Uew50U0D9uG{st|bfL@#$1_1RDrkFy zxb0>WYG-j_|6>tBuLL?n{%_?mxBEXQ$^R`7Q4-^=#~QI+B@6lxbPFELLAfy*6-aBi*GrgFyj}3S-%d*oIGJB1_D?s+YF_Um;N22&;$TEkQQ@0f6FU0( zn!ummGAw4yNr6LF?hgUg+S>||D>mu;d-M%N-=tA2C%GxhP$e7e&L z2*V%$1>E4OJlG?x9PrJaP{8`f-f>XCTSAS+6S)HV`O^`vBT3WWWDNx8p>iqcbYr%% zU6_rq4>dZnsFqLrVRJJG@U;7F{&h#;k&NyH;c5dI@2elv|3s1)>{Dp2O{u1{`KU&r zHU$;Q0iH1V_mPY^HT3s)RUb?vCFyTv=@e3hdl$OP>iK&pa`8Y-%=yK%ES^E?z7g%p z(wX(AJA^eRAE{i*IQnEI*1D>}om|fdj7$fQYO>>5X0+c~HreusQwFKb|9z=lemMxK zUyUzpzZsr>?1WH*$d8p}bNM}}I6=Mx7)eKKr4@=_&$cf*-P!U-xguXpMFn(p`f}?4 z2)aRG#KkJnzzo`&fd7X9P_H@T?Hvrv+nbox^&a%D7KDFk`wm9-s`DcQ*`pQo2#lG*YN}f1`9?;TtwX? z>o^-lTVeHS*qx)CPN6JGS+y+cJyD`O{%5y8=E#(y*r@53Xm`Xl>DCO?RAQefab(P7 z8E`Cfz9_w&@$wHlPMp#~cAppbc$FrFtU=x<%?o~ax@Wpi$M%qiTvU2k5fAKAWcd8h zHXe}?N)|;dr|>A;U{VMKo-*vehtdqXx*EO+z9}efg;~rnC!6U;MaihZ_no2CMwRZ- z>ib_zhGl7Ks8eTCiAJ=1U$9d~@}^$q!V5U>r0nzT(9zKF6rN@k*yt>%$O0>>i&v%I z2A}GhN{EZo!*1PeMS&zg-G_DyP3(j78Y-xcZz7%|dgfZ`=$RFyee_gRE`qqwQ`XkH zE-zP7y7KDk+S-CEw44rAVKNE|OnmljlY}39WffAQo1wex_XxN=h~A~M>jg#?a2<_UDj;Q)S9I8XQsPQNwJDB z(kWz~f1btf<$?TqmXnC6EIrdb3)~rlZWCy9oDV-!ocP*|CZt|-2tE#D~siC1E zXBzC^+)@pfoSf|1R0~P+yd0>1EyX})+bt*4Uu&z}y8Ux1_6Je*zlv8KSa?dv$lB>E z5S*X&dO53ILEy;ke=R0u@hqWfo65*drg4IQ?=2Y~48^?ho}bZ!eRuUm}Y!LbGpxq~sS4vn%*Znd!+ld(jWW7|$9iD(2ko7e9O9lycjDxO5(H zsnNtfq-9LxhR0k-M>l7-fc?*rL+Z0lOf6Ob5sAm7(R?K0g0a(c-|>lVK5;UezNC;D z^55kMG|4F{P8`+x!`ABCFUZ@?cpNz{5L5+H_ZXbi<0Bk_OTS54q-Y*3ta0|0FWOyu z-S0;v6!h7w{wC;0L;|<@?ygCgn-_|pl z+N@4=9}wv*X!i5yP&$*3ZT{4IJ~`Ojjs%uQG=1sVOCBRg!ApflGzc4``XI6ejH?RG zz;x01Y$O|b*Dy0|Vmcz7nLcY%CHeklt>@`-o@8bwrYbaZvObfFimJ~t_tv)A%k|7_ z^e(Hd?LONZa~$a=*Oni}7N3N~o_&0L@VAJ({CjgZ@P3E@{`St^l0pj+cVwxDuNRTp z4QeGo>FqkjP}q{DdPUYS&YOD}^g>?4!txZ1r`>1xHFj`t&^{qyY;2T5LU_ITY-FgJ z#oOI$qxd6=z5j5{%Np(F zQkQ{*%thB^{Hw2b&Ban=QdL#fHs-vFg^Uc5T{HwT(^o*1#rWxZqGMieD^Rb?O)%E8 zH!Zx7G<&_Vp+SJV>TqFxYTEP9QLy-@p+V~VdxW&>eXenzsmNk9<%xI#F^66=b8}2G zK_VAHm$1DRPma>+^=*9Y2jtr^t@_8n^;K>wt1@9<^08T=sFdo_KV$2VExtN`id0S# z>|N+qfITxa^G!ZIuV~Jv{pd0BGVx0{5X2zpeb7EV(t9$w`n{0nl<1QPNV8Qj1GIglri=L}8fs0tCnqJz%ld&e zJ6(NX#U?{c?Zd#sh`vmSiPM_>p_!Q`{Ff@@F{@jJ)uGOw*~Ot?oWiN)P%Es0N+Pt$1GvA)SqB^H8J!>I1<~YFBjb0thtS7TgxEY7YvH4 z-aHyg%7wORtuTImW(U_*9)~4uU%~8aE~{VKZ4O+IW=*CSYdCDtEDBy&bcPNSwu_WzW8C1 zc_d-vAyqW;d!z~1r$J?9(oZcbE@`DjWzwY_y0Y9UI8!+S+y0N+TkUX$l?xRTZf-R_ zhDe8cd9?>~^($440Xen)9|jkNs&!lPxYd*Jc~>h&Wj!C5SY_p9ZgyGzdw%lfD+F^+#?;b{WaHQ0imr$8)xs93@8NiHtz`3~7IHO=wo4OnXulS3ZD zDNC-k=*uOSmwE9R%|`8pZX4(3Tu!yS%1Ig74}2p70|mJ3LPJ{T7a$YuA(5Y7$@$N@ zL-F_|BqeF+c&=aeV3^+20$|2|$!S?zO*S}f>})E$tv=9$KI}i2Yci{sPP!FY1$6n$ zww@&%oN(KNe{&}m9>Q9fqouUz#t`~A+-cI&{}z@HMW!?K?Ts8{cOSTtd-T@qMaq?4 zOt^%Vd_%0O+PU(Pf7M^-j*5u5V3nPcT4ddCu+re?wX z)fk4B<6t`5gxMvjWp-h7bYdv`=kwNIc6(vFCtoC`JpXRjJ;S-eG{wh`=m=)@@{r)rVjubbj#s*|{D9Oz>H%uD%_{9i`h8t#G!6V{-mti* zyz|uBkn;gZ1%oV4Nb4DI7Oa}sd&jdLL*9@hQ@S=h7XwAjQ!&|oaOo=Lf%(J7qGpZKOn!lv6Sx6HBznxf?gf|)fm>MSllFl1C9talRUbUP3+2iXyd zc(w|6D7)r&6~F?dK|ywjG&5<*s4RxQD&611_pUtrWbD5Ix`fHv1E)biIJsV4lZEjH zJlrGm=iw(zikK(#vz0K{Mnyu71TZ3nj7<4tdX$sfw00b60BHRYgOf~1vs;5PmU@t! ziYYXWx4mlqjLWz_iexBk7Zp`96fyjnEsVs3^P*Abh8QD<`I@6Or*i}$QEnnDTiCHQ zb+{2wFFm092i9Bf5yvE3ME-eZ0DUwqALvI58)EF!)uhin{od0@Afa zFITNm078sVkkrYND~t%!p~48AcFe^`Ir7qFf2$hqAzo3Qdh zK~Y>ETz)9n9wV64Yv}8CjuYw42j0t4j2H-1^gLX`2vhYUO|l~BWj4Lcw*B#_VDVv~ z!^6jpPqCBtWlhuKw44bpUALTy+uhmucrC6!CR5}MJMjouAYdL=MDKP&M31cRRQXt* zfy4WO@H^Fd8oyHSX7v7GJBLV}IH0OTtgcn%uVexa4kuCGI`a3y-hF0D zGt!QD-G;hiim)smOwM9tc%-z9tST6RK~-I!iI!391*gY_ZM|9h%0&QV=7Tu!5QC~A zWtJhWCL9VQB?6Eb{FfO}x**l$59LJj z6A|7_&T2gYbPuoKj=q`^)=T@yPC#kzm8Sq`;EF8&p%`eXvz(Z=r~M4U2q45o5sg4D zj77~cf;?b6bn}QHV^OM#z;A_iElK`A18#ANQv=Rm{@o!gkcf23w>A75Li`V`Oq zVlO1t>Z9!}KPf1bXJ9;I)U3CebNI4I+_RSXb5=REr~=J*CULkca0yih1_wo19-KBl z>`K;^B>jK`6%yiY2?y>#!1;dP%>U;{R+Wn zT<0R=b<8lSG_wV}!i0Sgi(}^hjz1GU&V)p(rCnf1tCTA-+FMAwXm>6;9(0)30|j^G z(3ytMk424SDeLdiq!8lUyutBMzNGBf!8h_Qeb&n$_^jl0zV5qS7}%)gdyeIsP}}Xb z-oBhx&HT~S>-cZD&}{T9{e^ra{12(rUy;z##l?lZUK5hPxw*yq|DqPmb_)#2hCpyG z(S+uU=q1$j^#i*#`;m}5C8$+4_7!su=RAWW2GH?^$mT0)q3ie(7ON;_DRG2ql4$px7uCQOQQ7U>>Jm~EVKcA zPlLBUi-HA<`VrZkJQw~U_3W3!kb{oY!c+_k;jJ~RTYhm zgXRElEicKTs3k30jFVHFseC0?QE8!_KRo!TN8@6)oFYKS+mln-a#mgSt$GMUiBMPzETc6Xt9^8 zH=;N#s!bi#oNRYKd)I}UKNgQ$Wu6{6DjTb>X|E>d;<1K0+k~N+niE8`%G~C7q`0#v zyZwgR7-nrm1Dw7OzZk4z0A-;r{mg?qM0oROQub|6i}1YF-at7a}?tv|MAJa?v8X$uq})H_~O zF4#G`Wl*@@9aii_?ThQO9NCS8xK^eBw;(Y5TzOmj#_R9-INXvDly>1Bub~ZD2tbH; zLuWy#XB7AG*kxx;M$ljvTT)Xq)JQEd6UsvEk#hMP+`XaA61A0;ti9^}k?Y0vxcuYM z(;Y>7#e)V$(~4T$X{dW`uCVKNr30v}?GZ60#X^ul(R}!^tx|24FeS%^{>jiJOgDS9YP;rSC z36NG&fgYm`g}qimK|#vHIIpz-MYggcGC{YJ;Ej|gv}S$r4YotO0?|s1BctXVWN4$NCb%6r&X4|JXx19kTyj>F-=<`L-oswZU!+ib6D(SBeWF(YJ+*0v-)|l z0;Wn_Yic2oFg+z9fJgd5W>Jr3K!JoJ^j;2UWc=IO51N*vG&}73R5BMkACdGW=TF7O zO^6v{RU4XFcp?GMRC;(@-VX;>+G|tOTycDHFzrn5__UwrRF}$W6zC^5L|aNY+)ZRG z4;D_mOB9L0q7o>E;jV&J-b>LW)SGxZKnB6})rM-Y8b9|YeGuA;$5k^5dJ7K4ROzQe z<`qYe`mp^Iu!<~-;piCnQ%pbW!!{Ox7MXWo5amCI{`XugPA2HIxjJM~ML3OqQJUpr zZXtif_IA(TXKH1+@8ec9Ulz)ms+d^caBs#QI2E)&Uz9nS%x1owmyK639nx-|xKCI- z3LMh*7q)1CI8nPuZLC4Tk2}v9C6z|RWyA#8zm;ZwW(YV|y_LhwO@`^&R{B{7v*#BS z1VSe@lvGL)*ANpd`QO9eI(-uzd->%zT7}TWf_jeG#?$BZnTgx(B{LSi>vf~m@5)W@ zX|S%zXg@3dK?Cf0w-I!s=cat@ewb3DjYN_K8E^kOgeQ4Xks(W^Z3}hWcnHF#I-#5q zqJ4T^NF&H*2Z7)YDQ2AbzdAXLFweQncQEttukbSPg>r>^;RQ8*z)tT{lolUdlVEYd zZ*X>Ul*|IGP8tox=6u(BDv|R@6dw!PI*ub3Hn-tR0(-hP|9lt9I!7%S#M#nMKHP_c zE**E<%Wd~p-&)``>@u&n+^aaC0yr(;aqqEySX{^yMv1HYYV{wQKQK@D^WnwejUL(V z(&@Q=6l3e#xno*!Nr~qZ!ZUEmGWn`tpjF1f_teJu>M|i=!}M=a+#3{KN6;nK8*DK% zGKE7_x+3d81ocx}By{>5t&`QF?=e74ior3!dBb@W4|6R2euMHc6>yw>0 z5IBvF62edJY7*?6p)>1AJf9zEc2S>;iU5pAtVH9A5y7E=qx)O&uP^f-F-f7ar?`4 zmn_$Jx~6444;eb)pQVihk-Zw1EyM67u6!|g_e5<+v`lklp^!PuwQJ8OSzxMN!|8wf zC5cEekSd@3z`!tb&BM^37NE^CQ60)zvl==rX}!5~sW5kFfNs4CerjxJJOEI%&(}>I zX~(chg?L((W5+oYXnzLCNBzkZ)WC{3!C9q>YRgu{NxqHthH#Ztdy&IDGM`I zzUd>ZQ6giqT`&J}mi4+5dc06`Po-|Q=lfQQP-91egh3MZ1l$tf*B{m8BJ*7&a-kTJ z@ytyS1-yQ{=a%T?sSXW64%X}^UYze=8Bx%eZ`hcxYw@Te{*pKOmv*vb(y>UW63Dx> zx)J3Oj;y4qxd5DSIW3&p;np&a$$`poD4a8^C)N8N{{oXr#mC3X$SI{JCF!@@yvwGd zp_x#Fd6$4Y;`7F$6b!E=W@qvlrnSEqBBNq6LEbaV;egHq(TJu-LB+tYY8f>87+Fki zTJQZf&6SanXgee=EA7C<>t#&F-vs^t3FENnf6&s8Fpg({j;DkT|MX}MZqAWS#3*+b zHL1(0eh#YMombZ+h=58wZ%p#k_;{{Ui{KNoPRtM7(bCQK9slJq49ah|wF(zJLmh^D z615ITQ*q8~vP;ThT~T?lYUukF`<|8^WI{A^PPJih4C&tZNK@|qc^LDwF5QAtGBF9`9t2T z?|E}xUikkF55agGv#%q(&wks|QTb~rfj7Uts;xr247<2Xr$lng7!N?;h~u#+DiJp z{}89s1700`9Hpzq`G4a!cH>o)Xkwd9a@7M1U8pHpdiBuQ*=1xFHu8gz9v_YN&20FV zoM3C*&&b#B)d&YG3FV-`Us*y7^jiigDf!IlRyYAv>&OW!!WiwKBqZi5Tr-!G z6CQoi#SaK1%TBg-efG<^2@Y5dP&T@KKQjLo&n0%Jf4x0f54u?_8s5tSt-G`p5QvRK z$-Ie#`9DQ(=(6>!5Ox6^9bjj%=EA7Ykfw?>a+Iro~iYW?>qN;=njQ`NUb|D zlG=TFmFnGrTp}&V-r^D)GXz*jmzais6tjXm49gM!oAOE8aN1|;1@7(J@WaNLRWB*%4h7%J& z6SIHP^4}jh9|6sx9#i+%>aGixYDc-vdc@``ikhy4r+XiLE%U6jUHhDePi^_{ExUl z*rLXB_ozjdqF=|?>4&&L_@$mB7*&V1;S@4~*!`Qkp61N1T^6T+cZ0NN*X*2RrFr1_ z(#f`g!E6(p638#?W)mjhYbmVmcT}!;l{k7)gYVEs`L8U(eht;=ln3NKX?IG}ZSofq zf4YC1lbpQM4%BF^35}hw-lXH8QQBYbu2ccQ0ceo~*WK34M@A=D7#Xitju#{=Z}g=A z14q#_I$^On?>opNlb~rquj5B5omL}#{l41~I>HOZrr>dYvK)bV|frjyvjyKgD} z+WOp~vuvOC@36Mh-dd+rD>PLy30gqfPI2%1;trLfgxbn2!NIMyhQs|vg{C=IXlg1x z1)9;+UD(7H!qye(mPVg?eDLFLi;$a3L@I&P-3@JRX|b_xZi*~|A%ibJKm`Q_p$2?@ z&uI*K?|HCaAgx_K99dKx9GNP7M-s=3(Kz>0MwSN%6A{{jQ_UV@#ATJu1KIto@)E1gQM&9YSa7=5uAGX+;Zchbh}EHkd?Wy;2B!4j zqHVl3ron~ilQK2Iw4`K?D%X;dl8>Z)f0Xt0VOf*nlNV;@Hd808z?!S0eLe$NYJ4iP z71MhR%FO{P8z{7c$__g#F;}TIRB8EESS5YFV;`ZPNEE^Ip=z>kI}0mUS?(VWoRw=N zZ(-5;PMBGkBN(7bfGw5=VGf`+cRXg{)neu{NGY%rz;E!)9SFp7V9y(Y|c?9 zI#@~+N0h43f3|7361fT+=WqU)Cc*}2$J)N5FR^hg%Lp#_5U(bb3tt{V$#qT(1o_+$ zbHGO`1OCx(W`@3ag7}1=1)ODWUY-Kp*sGIkUN>G!@U>9SPPE>~B`sPWw-RMm=?Te? zJ~Wu;G^}z_OaV~`sCu-u8{Lzu!Z&7;rjx4ZWkG=Zh*_VKl<L(Of`97*1RC^Q3sNo>o3Tqwm?$v@ zvh~Mwae4knuVDQD2p+b!w(kqR5$DT)gUj=Xf zZae~EXxfQ}di2~+LMr-ZWE%MM;$c0@owjTel=DK6jAMVh*mSli2fR==G-U7dx=gmt zS0~f?ulOEMWWUT%1-r7{bXV%Dz|~Q4od*^GfY!df+I0GM)?HE2a45{kxkY=)tNfse z_d3u10A_m?p=XLzGD4+Jna4ZlddSH-x8{kuL(^LZ=7E8prmS>72 z`MYwbQX9vuv({4!;U6ve=+Z~X2kYuLk1 zZjS2ZO<(3`IT}4=3u-i(*P!*1e-nW7(H&SVt*uqzfki8WV_!;Shu#!4Qk+h3^7-mq ztBh>SBV7G>MN8yOGdAV@l~JQqj8J>8YhI+F!InKZCOp=2V=zzG@C!e!RDC-v*9->- zr=Ink`X|5Nl{UBCVbl{AHrQMP5Z!7}^`*r9$vtV*SQGQS+EL+sGO0zx z=^+D=Z3WAm#=rW9`zX0fOZT{8ZgCW*?E{|Zd&1Pm{2s6`7uEcC1>}P+GmF*b@1GO2 znAJ7#ws$Zo?gDC!dI&^K9DzGylXbGIypjIrfIl%cuQ|A4=E4OGW93<_M-j;i{He{@ zMWNK%sA%*rPjz;Lx~NBM4~*Izy^9!pC+)>`-+jwpq+j;5aIt*zf30_@u@_U764&43TcWP$XQaEOm+?MG3L%Bna_DAc0O0Ob%HCdFd1nW{z_~@ zf?q+zTy#u~j=K7C@(wWp0U@D^aO`2S>i7K0N>sM{w^s_D3B%@p=9&}d8l8zN1iUYU z?!TOBD3lgDMNYNeR=V5cy7tMH)~Z5JdOT?Evw?U|n@vZdX!a}Z5Avi{W}CNrv-V5n z`Db{MfEH}BEMG<AxzEl(DHC} zlK+^3;6kIG?or5hEQ&&}qfYO2nW2C!0e zI|~__wF&dQ%#9Nn>cvQvTO{e`{rLF%UM<{_n}+jZ3{>;;@S&u&)#)7S@pOMJrK>TEam?*Xyu_H#}=0u!BI{YEeU_$Ahf zlv~e=HQ21C#iv`^^L*DJKqs!mL~mzW$`~z|VPBq(N$9VwG+j@HWy8LATE9I;%~tf7 z%PD-GXEpyQ)yCgmQWEK#(ocWwmf86S_)!gb$-r_$q$q*Uy>(|NYR342p zW-xm}5Ax_?)b$ylO=0@0ehs7=_r)^Z{#Hm+U-cfBsWPZ76fZn1OrL>1E-qdW>RD|v zmIW?Za zU;i1y!)~rPE8lZ;M{(>pO~c(zLfYKib>gA8u(`33KweE%RasFp)EX&dNx#ke)sGX2 z3i8P83{HCLgzywebMx)|x*@(=9o>SZ_Rk?yDu;zPV+QE57}d;8ynJ&0)j3Of_C4*eOK-)*XO z8?!t9Fhf;3_UDfXLvDV)90`xKT-kbdp7r3+AokI`@yd$Lk8m$@bD|$pslh|TvWxDv znn|bIEESAKGJVgfpIr$kSWoe%<_9W~Z1C{E7#&R?@T`&g+3L4}WBT(t*S^bW1fS5K zU)LRumzS}hC%fIg@u&7S8GlTQ>5uFi5p+JL_IuI1*$eI(N3)fMuI*&G9RtV(n-nUJ zKO~IaTwisN5xm~ed%(&GQ6OJF`fRqeAm_KPM6D<&ow_D4dUl8Wl;3gY&DERl8$|)q zQedKA&Gh%lxo7FncJZaMP$(@e9d3*h>9kZjyK&-4xW9@c;Zdg)GS`MJ=9+t|Md}C` zR2cB(Eq%RPelRtm>Gs0TZfESsL}(%)I2cLgd&MSAo2b8#Qg>uD{*D#bmn}Qe40|0& ze$?l_d9qMXf&D3bl>BMTgf+}&MHV|=h2d$Bcg3GoT113`MU*v+vrDvq|7Ukk@W!vd zm47R}Lf>Zew+0EP)N%vAP&FK%YP>12;>8pw@S2t9{lG$_r>$K_46E}sTW$tda`c^^ z-v|{}RD^4d_uuGV))0#ar}jQoi?b&Bo&_CG`|yG$8U zXq9l$SE`}pV290;4jJaq*pG6(EIINlNIx3UOe-a(jVI}YF!R+Pj zC{75v#{D86CXxQa{bnb;!NW4v@5{#D9nG>3Zc)Pb(8617Pl%2EHm{q3B{!|Aw&x-tbJy%deXsJpHIh=0 z$F@6k)@p+B!-xL4Lc%Mq(^RX;=E2f3$T(96f^?x@@@G3B<+s9;^PgPP(@qz>IgC{7 zf1JCyFG;n5jmZ@Z5igY$0>v6WQRMb3*t>1Yh256R}9;L20+=fvh*((fwYdoWaqw2PW0fDtp%;kJOC`39ej8|S(T3y}ldthVZY#AVt z;m^c*v82#(Ra(SVrf>YE&X*=WEv3j=f&y+@FNTBki{hcVaUq29}#0KkAgHem$pU6WkONo1LHt}73vQXj{O5J zIk_QTQir4$0?~a(6$_fg-w1WPQ&BJ*#<<$QvqQs!0mO7|FAhD639G(i&nE8WtF1mf z=SD81CSrX(63P4SYveayB6>PYs5Da(eVY`%=H%oNlHnykQW0h>VpbhdIf`6XbkQ`rSFm$s%U4Fa>jY%D)uZwn&VpY(Z1K}onZ=aAX7w3-xxWzOZt=ddY) zI>?)E8pwEcTR`~fbiHZGHuqXh%@rKSf34FWq=#hyYO2GsayWa&ZHr@emkc$ikL!l6#U_g?q zEwt1|;_A?X?E{1Ld$!x^$UjRnKAI1s_;pz1ZiMY`_EvWnS#m0}cB6Xf)&2XC&vM%Y;MbuoM*w zL!=IK4G?C3#Q6M-F){oLi22#J)8t`zC7J+vPb9ZiQ3;KW9WK}&b4$<9%I6;N{ix1G z{``&KXjsbsd7W@{&->jw{l&bdt?X@#osrazxg6U9ArY!9cNvS#3JN-T?`LI@dn>jO zF|n=f_@lywIZaXWDSO9PWl>T6cGjyhLx6ULzM#LCMBt8_ogIa!ZO>UN@E)yaF{kIb z;^_2@DnVhx{QXLyisVn0D3sTUp6B4ZAp$^o=zL%Y4x+nD?_BkoOHnbn;Y3!(M08-+uCKORpstU>tN-h0(C6`GREG{k`h8{b2arb*h zDYAw#V669@Fy*GtPFOJ&`qgI9iCEA3?wlxnhEtkW4~6bV_Rhq@LdD2pv@VUFZ}>{K znYp=A5Mbl#DJ@ZA=-kH=?EU#n-;o*YuWOddDvf|U%2Pm?-*qNvD7=3Mc6)g8vQ64T zmzNirlVKDXEo@^VON)c}%W$fx>)+eR$Cbd-6dDoJHB?0Ifk;cV{~fhZ9gDoL6kQ7Z zY8d<<@CHa11@A1R#e?IUIN)plILeA>O)agYq$F|3D}mn~vk=f7Qh)(V$5*S*%a3vyfia-UJ@@>$j6oJ6xA&2im;r@GqIQha&|M z+~?WbGiHdH?$%NmdKFGvw<j!}A z_ovt-j1`80(}@Z_Y_LmmzgLU*NIngN{069F+!|%@xAoS-3+iLGUwTV_OaVJQ{GwL+ zS2?6P5`nu3Er!7b7Q*^{w?RB6^!yuBr5@o4rMiB*bD*%2^hR*Mkg14&I%&gr*uvhs zBzUH51aT!7_CRKOz@{{)o564-Ne;a3>ur-DmzI{<3zv7+cc=M`2>`-I1w(%POo#rM z91%fdOr3G0eZ=!^m8KpktMtOy8Ld5>2WC$HGCrb}jDW*t;A_lG+1p-Xw7Rh|Wspk}SDnTUtBEE16DhM0MM|Q$vV=V*UzOf0a8e{q9T?CXK<09?q8Bz>|ks zhh=fSrUClMIz(wzFDlc-m13_rtpfUNGoK2RrmJP=9^7QkS#I~Dq`_OC$udbjsyGir zPlp<7$mj@syL;(=Qx-W_?wnB-V`0$Y(E=NKLFAaL&v?1}ipaUcsz=W4{wp`vbfrIX zNRS7-yW%$*U{(QJiRENrp5WvRu0!@n2o57RH-64$v-=q#(UX& zo?lrwc(=9n#Xv-Az1;Q`C>(5Cu_LoCa)T^UfLI4kqJQU_kBQgoKTSPhS7Gj%x>4Jq5 ztZSTZsNq?P3tH|KN8=7l$$*mUtT_ui;_8mR^$1@Ut4ilWvr&D3$-e`6wIs00k~M)C z&yJ>#xw&(-$d;E^E?^gu8_IKwMR^}qT`bo$&a?#F-;4LtGVnkMsHODcUc)O(ll3XW zk_uO>Dnh8YHWB!{;M7&yBqK0GGy8)}=IN0w%d(-HrqVP)f~Cn*R6vc&=uAB9^uz5Q zGvx7a3C61}uK#B2!A1FNlyIv)v3Yg#LVe0Wln`sP(ro>h7!~n(>Qg|~P1qA%2(B1V z7goajU6YrPh%j8;0iVc#c8cTmY7^g;T3pZS1;55^C=CyfeW=_^LIo^POcajNa&ne~ zs2@8nUMiw*#X4I<=oEDyty#+YmRk}po<*?NUr4i~rQi`l6%QUZ{{MpqA-fs~NTs!8 zQ22uB49?iFDlu7h(~?imb3{h0%xr80 zR%zM?eC#6LYIwg_0{b1}J8-lI0oNP(qxs;H?-?(_BG)EHO?DTnE&>}@H|boY^?ZCI zfq9c;4VO^1^m(`A6@wZ_(%vWXlYrh5qd=KdA=1voE=H>Xb^LK=Xcvp9zG;?1FGH({ z{_`)097A-*T;uJ!N&a103ju*QK8s$xCr$ZJ-=EO1d;m42#0Ikzkg5WP|BJ(;wzoq**Nn#TDkL)flPmfDNqwvIDbghULUjBngvl_nwGxOj zp(Fuka2jXO$6hjpb{(W`a8%-e$q(2RW%})gp+^V=qC?cI+Rgc`rH_BpS+N zFA@_N0cy*QX2f=J4(K_BR3>u3l207<1C`g$`6h~tTmcv;Y`uD?wHplyScDi+tRikYWR_{IP_TvMuJcVzqXZ5QZcBhWN>u90>L`ced^UBctDv++vx z^T+gqS0UyBXh)XAT% z2q@0}u0CY8x7&RPj2CL($Q$fK$x4mor|>tgytIT6H}ecr{z#Jnk6Y{LwNvXB@rVk;OxNuiLK_8oN= zz0MkfEPT+#x!O`AQ%!;FqjP->je?JHQ;N*fy>tX=NzPnP0|-v14zV$6?sB|=knHc* zclURAUloUYgs2_VyMIig^n6HHkCB+QUry(B-7KqofODJU!KwuZ=S=~G=wVmp@@b!9 ztUoS+p+IrxA2X$v_=*;oc&cb=pp0|v4&|@;8wuTx*uHT+xa2cfTsp6?mC6gQy4CO+ z9@}_0KZHMLad${lr@OiamX2$^Zp+Eh15?3S&e}`NdnHpIE9$ZLXGae~K|E9qU94zK zBJ0hUBF;X7OEQQ~UFh_1JM+2!Xg-&r@_9;)yq}*J`j$GiYl=6liat6Tk6QKZI~~N? zt`BPyYCeK`wAcIdaTcHhAe=tP$u9j!L!;J!)!iu4@$|)su|ltzPrJ5Hn$ynm?GmN3 z^7x_}q?wPvLRtF6aE8e3)k^R$WR>I1q;iP;s<@yhY+b11UTyxDD4CQJBkz~Iei|V)MMp<3 zvb3zOu9hJh%~#3I%|&8*+pBa_J>PWWz^S)fh1Cs*5$^E3mIRz5^9pxR+cPbZ@mv##noRQ1ds^${cgT|s{7|* z0Y8x9U3lzQd+)0w96t~eZs`j)>tnX&=N4WHeE|;+2cMx;Jlq_C`45HElip@FZt44- z;AT8x4dEi z(I?I0kRQw4HkRW>G`&&R%(%zRME9PF`D=5a6JfHm>%0qBZu`g%w-dqd8cU6YKg#iA z{E)gs6N_mlf@3veZz}8i<%b50>WR|6G#Jg)LW=hG^7Tq36dd+vrpX%m2mTrk0#R%j zpT?*8sL#)K*Ik#w2Tuub%yP{Tb*Sj*J`8vk`THY?o7j|=65KWN;j%{3+OwBtDoI-gjgw)_$TQb+2~%Q4OsPCE!*PTmLt8_;u{69Bo53TAS!r{Z6t6413SR zqW}U$-DhPgD1H>>0{t0VZNoX{yEnjHXQI)i6BkDskB;vk%Z|Pc7x`5G(Al9e>T!YS ziUxb51bXZ>)F96IGO;L)=ot9FP$J>EiT3|PAp1|KsRW|M(WGLAz@@bRiZ#V$)$pu= zMn;wWoDs&0w0lrIhwVTY(>rNkq1m6#|Ou1Z|b%^xN>4n1CSMx}$R6b^$Y z0%_^->Boo7u|%(1J&)*>PiJmqJDV^x3|$Z8dHu+pF3uA?ZN9UYGm0wX`tf)keMKLZ zPcLuAF;9n|0~OM|AdemX+a9=aXw|J)!#S9@ilWtil*$thXxfuO?J#dQ>@ZN}FBFBt zUsXRmC@(BuiOvCmLfNQw!SHDk5fZk^%QpLR+C&YNmZ$N%mtKTHBE*{iLqzZw;kG<1 z93@{&spE8X19NlO{5A*~E-jsyP_6)cNZI2`TZjF;Ld(g8`FHofsR({=wjGQ1_HrGU zY&IeyLfG+q*geFEGhgm|$U}Nlr-75SG&5Nd$YjLwr%ABc3*3{l2kSSv267AS`}Adc za7z3ZUHESBZ^B+!6m1?4$H`ma5`Y>sO!O@Hv^7g;`S|4ySL#$w(urOX2c`@7l$Ym| zT@Y9vp4K6jlXysYPxUEjbF}+k-lyqoebWwEb>>QD=#UpF=_8!d@Amn7(R)yH-6;m$fgwKswNkIYjfY*>a`mATeBAjC0UV#3VmU>GxXP= z!o(|agxKD@4rq!Inr#g$yu1x+$fcTk4PParyQLf$Gk-&|KXD4im^+PSv`fsC*MZ7)r!T~(*EZ-gavglU{DN2=Ve733f z3$(pITJqxE)2pV_;QA$3srdEZrO@;tzxWb<6h_QuU?dL2wZiz9g^OpnPbfHXIMs5m zyRwZHjG1_9F0vWap#Am?5nfPAJrn#Yl9j$(2w`}7EujkB{@kCf&^ijv^N{LtVZ?Q2-jZRlXGyRp9mc@kT@Pd6Lg0ONzCW58#OVP?28 z@)za;4G8Ws4uNu|_NJ*mEc_%9HpAkk%DLKTKtMp8_*WN@Yi7zQTK4{!83HxTsY&e+qs~ zjQ_uBvj40CaKQdE?8RaK5;q(kHSFczKp6JJJGi)iGRylK>KG_9IXQ*V_A%2$1yF`F`CjqJ#G9QNXsG5M^sV?BIKeSteiq! zBS?6)sEF8Q-?>wP*=UrN;5aE?yGjxG1+djNdo?{%-qSeN7!(6yxwg zPwry?iC+|^R#;d&t0M5W?DjIHy`jHQVb$=3gpi}+raG;}2LgOGI5>zhAKB*36;w!!bh_@`cS5ffRc(b zzV?Bb8^Vo~SgG6~7ZluUL-|JE3oQBHPJOyJF$H6j#zBj2lt3!?C$FxAQU0;zjX#rb z(??-{$77z@5ILl&`WRY&t0|UfT@V%I=E4gj5>%Tc^GwP2`_IzwAYILY;QfJltXfx{ z?WFkhe^@4VzCj@}piA^4XMmVp1sn(kwE-kva=!gUP_?n~)_<1Nwm5TA9H^vvBd6V9 z94o3@3#AEfc0S@;_M7n9Do?pWopVfs$F)O+nw>d0XMCW7AN2vWA+d_u z#yK*7v{lmB#?Q@FSOF{BVzi(L9q=A^Cl)+fAOBkov^fyYebuDV^N%J*Wc=rUC14#Csk-rQ!jx3m8DarU7J5f3TFjO+Y#B6YB5O2|&i zm#)bSXU5olSscAxH)&dqeJta%N|O^R0C-x*tt%%xqmHvEdhq|$plsCe;zfsH_bl~U zqz=J?Ro8#5@4;7+UG}{Nbs?e`c!7BasY*wpNp_p9svW;vS-Exfi!v3agOdO2_!L6h z`1ts4hn=HvrfsLCZ0#u|SMVXyh@#Qs!EUpAm%HzW4Hze0)F!tmE4$PiuFO1cPD~qC zU%yAaxcdO1W6{lBeE@9()!N2>=2ufF6Pl@B?+C7j-P_8fK$JlQEK#Ac>C3#M5;C;u zf^P4;RNNN_GwC{j)MfmQH-D8HwyfC$mUS)6OwDcQ+ui!(>yk;V%4^anBm|fJZV^Q} z-VzfLUc>XiSL!>VEsWZ0zc6|WYTz!0`OG#tZiF$&HnjAk7g%zHyHrcS?ROZQwSzN9 zK}gZx38?+wU&i&kRhZY%N$Q9$6fWp-V4}N<@X}p;sqqKK#8pM*3ggA z(+@6@Ri+ZVFBYBHk72jS{t+)mX(ezHqN)fU~c o!E2sgUixdzHQ^29f8Om4!UIbqhK>G&7`z7oBrXpu7c~s{FCcik6aWAK diff --git a/tests/log.spec.ts-snapshots/log-oidf-noStatus-expired-1-MobileChrome-darwin.png b/tests/log.spec.ts-snapshots/log-oidf-noStatus-expired-1-MobileChrome-darwin.png deleted file mode 100644 index 8a75119a5225b8e5181dd4239b33c4213fd54745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9525 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 diff --git a/tests/storedCredView.spec.ts b/tests/storedCredView.spec.ts index 91ab9d4e..3964b1a9 100644 --- a/tests/storedCredView.spec.ts +++ b/tests/storedCredView.spec.ts @@ -2,6 +2,7 @@ import { test, expect } from "@playwright/test"; import { getTestVP } from "@/tests/fixtures/testVP"; import { LogMessages } from "@/components/ResultLog/ResultLog"; import { TestId } from "@/lib/testIds" +import { expectLogIcons } from "@/tests/helpers/resultLog"; const generalErrorMessages = { NOT_FOUND: '404 credential not found' @@ -63,10 +64,14 @@ test('a stored credential should display', async ({ request, page }) => { // check expired message matches expected await expect(page.getByText(LogMessages.NoExpirationDate)).toBeVisible(); await expect(page.getByTestId(TestId.ExpirationLogMsg)).toHaveText(LogMessages.NoExpirationDate) - // finally take a screenshot of the log area to capture the combination of checkmarks and x's - // NOTE: it is very important that this screenshot be taken when the app is working/displaying correctly - // SEE: https://playwright.dev/docs/test-snapshots - await expect(page.getByTestId(TestId.ResultLog)).toHaveScreenshot(); + // finally check the checkmarks beside the lines + await expectLogIcons(page, { + wellFormed: LogMessages.WellFormed, + signature: LogMessages.ValidSignature, + issuer: LogMessages.KnownIssuer, + revocation: LogMessages.NotRevoked, + expiry: LogMessages.NoExpirationDate, + }) // 6. now delete the credential const deleteReply = await request.delete(unshareURL) diff --git a/tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-Desktop-Chrome-darwin.png b/tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-Desktop-Chrome-darwin.png deleted file mode 100644 index f238502b52169cd912472381883ebc990da20af4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9554 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 CZLAFd diff --git a/tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-DesktopChrome-darwin.png b/tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-DesktopChrome-darwin.png deleted file mode 100644 index 04c8631b79d5a7b5d36bd60f3cf37676fb75042a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9986 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 z zC$%lDEY{CWjw)ZEe(7413oXTEiR=-3mb|=jm45h+xPqMQq-{B6{mJvQ_g*t;Aj0)( zo$ZgfI3wL~;pKv5LEl4PV7X?7GD@6{p`olCvjF!77UG05f}Wu3`rT)y^s{+qzunw@J@b)T6Oy$#y1A~4&`6cwTU%oqX)sHx^hmKACz zHPE(eVzhU-(XOMU1ewaE+}_?cLE%E_Q9?$mf)81bsLfs8d(HZrgpntW5)*;ydK){w z_wyyt63An-5~!~)XSMjq)C#$GpQ*^>8ehl>_Kbuc2#M=%_GrcoP{XtN^nR2Tj8KNH z*P8NHe~))ef8TbwW)JF{K2u3()7VBlE@>&JaC^nx(f@-{+-mQRX7O&JUOY@;wUbXP3@>*)!(TUf2+a|7d8pfae4iQnQPTC0e-WJRWcL5twX)*=%BLvr;l_ z7Mtgak<}7|3uUMOLLLklnAca+sk}buNjCVur3w~?wW2&Mg}av)dId&SQc0px>`TD^0=yoo ALI3~& diff --git a/tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-Mobile-Chrome-darwin.png b/tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-Mobile-Chrome-darwin.png deleted file mode 100644 index 8f0d99aba6d4c8f50926ca63b89a427d5d960d60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9987 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 bVBXD9v?TX;x8g#7c_$?%FIq0F=lA~rv*7C1 diff --git a/tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-MobileChrome-darwin.png b/tests/storedCredView.spec.ts-snapshots/a-stored-credential-should-display-1-MobileChrome-darwin.png deleted file mode 100644 index 8f0d99aba6d4c8f50926ca63b89a427d5d960d60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9987 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 bVBXD9v?TX;x8g#7c_$?%FIq0F=lA~rv*7C1 diff --git a/tests/vpqr.spec.ts b/tests/vpqr.spec.ts index 9ce02723..99fd6a65 100644 --- a/tests/vpqr.spec.ts +++ b/tests/vpqr.spec.ts @@ -4,8 +4,13 @@ import { getTestVPForVPQR } from '@/tests/fixtures/testVP'; import { vprQuery } from '@/app/api/exchanges/[txId]/route'; import { LogMessages } from "@/components/ResultLog/ResultLog"; import { TestId } from "@/lib/testIds" +import { expectLogIcons } from "@/tests/helpers/resultLog"; +// TEMPORARY(transaction-service): remove with the in-app exchange test('test the qr', async ({ page, request }) => { + const config = await (await request.get('/api/config')).json(); + test.skip(!config.exchanges, 'exchanges are off on this server'); + await page.goto('/'); await page.getByTestId('lcw-request-btn').click(); const qr = await page.getByTestId("lcw-qr-request") @@ -62,10 +67,14 @@ example of the value of the deeplinks 'request' parameter: // check expired message matches expected await expect(page.getByText(LogMessages.NoExpirationDate)).toBeVisible(); await expect(page.getByTestId(TestId.ExpirationLogMsg)).toHaveText(LogMessages.NoExpirationDate) - // finally take a screenshot of the log area to capture the combination of checkmarks and x's - // NOTE: it is very important that this screenshot be taken when the app is working/displaying correctly - // SEE: https://playwright.dev/docs/test-snapshots - await expect(page.getByTestId(TestId.ResultLog)).toHaveScreenshot(); + // finally check the checkmarks beside the lines + await expectLogIcons(page, { + wellFormed: LogMessages.WellFormed, + signature: LogMessages.ValidSignature, + issuer: LogMessages.KnownIssuer, + revocation: LogMessages.NotRevoked, + expiry: LogMessages.NoExpirationDate, + }) }); \ No newline at end of file diff --git a/tests/vpqr.spec.ts-snapshots/test-the-qr-1-Desktop-Chrome-darwin.png b/tests/vpqr.spec.ts-snapshots/test-the-qr-1-Desktop-Chrome-darwin.png deleted file mode 100644 index f238502b52169cd912472381883ebc990da20af4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9554 zcmaiaWmH>T*Ddbu?h>rH6)WymptvMhad$25?ohl?fgcFLfVLV;G|Kdvg#i7=T8sgEDfc>Mz%ao; znjLFsf|`Ux*_+FG*@RnqHK}3pli0-h>)E+$hs*kP?w!ws;JM(&OK!?Wo8O?C+7NFF zF$#(o;*B%P!~Z{oOR=-FKHhIDdyls=YVq1=SAR6tRZlI*zvrYL7|H9D7xH%LpIHrv zj*ga#3km|Utqm9|4IXH7S^xn4JOCuot#JL);&Wja_B{>tg3s#G@ZWCH5%o!1yAO#` zq9_rK?~hx4oc{9Qi*$3!|9-D=wKm3NC6rNjacL^9_t;xlNE63ZZQSYgyu);D3Nsw= z_(y)Yr)8IkRVed(BcLn1xFwc-xwWux`>DYXCiCbFCYJ0r+wECc^ z6uQk~Hg5RCcWYXUZp_X%9lAGJB@cJ>!R5vHH;e@Ps|!ACU?Mu)T)Cs~?Nt%~CzHlB z&GDY^K1~+CZAo8(xFVK`RescccIUCzZ~rMnW*&w~Tq9(`c5PaipI_75tn+v!-7l>q zUDU=E%}JepWKeP$`rd}laCW<1}lEUOh#`MhnqUO;6aBU6z#!#?RES3 zx;~HE69TVJvN?j@W}zokm@uH)V|Y75>F#0{N7DF#GQXL!ArHwxgcS95+i zLVpSK>^oaU%=}I&=z)zRC|GS|v40P*Ed79OlItMW}E)u~dK|$NThppd(F@vgNzV{KA2!3&2<>Jt? zdA=K;3!YHO+F)wRCRQ5tF<-9em|wEs8R1w zO+k%2pj}od;xvo~h!I`ZX}Ee|Yo0yt)oZHL5nzOQ!c~9jqMbTE_|7pneoK`6w%+n~ zgg=3FQ1NupjW8FG^pRm3(P1N!&rYw1&R#+7z*YV>WYL}PQ>8v%__&2KN&Ud!Wa!Rm zws!0#87H@Q?f1s4ERuujL||pE$j|&L;Hh5WtvIJE@c6d9(QZY+?GSD&qC_tv`-MV; z_Q6$QqnpC;{fewoW{un6dhaDNh!p>0eA(xe9J+0T9J-ur#7_%VO~-i=F=XqrfTL~O zhpeCGHn94?_0`pDebQC#9aC}$$nuLczPVSDz=nBK=kr$?r|%qVzcFo1##w9KP>B8F z;kOBrm#+C_WYm#cRn^$o7{4IrOQaG4_n_NQcVMzWkn6{{3*sM)E6j8|CIVeOnO>5$ zy3aS-Ro?ZH%P`neD99)wTU$+`MTVgt+1S|da@z&zU2v~Xwbve#k}ULEcew4Z+blTj zb_T?QG#H;)SXi=oxXxC4mDSK~$ut~R^)8=mpKkfwPwmu7@@oPOf)LBg%jMaVS&dEG zWtaf~xO?x`W^~Kn7SuixE=9|{TAG^q_4!=>rox(9T4GmSGh6wW4f8 zXTp6xjck}`p3my4%jA*zP3JvGN6+i>?6}vQpq{;XjJzAKq+fQb z)Wss6c)T7{vHBiVIa~VKTX5lia81ClFkX2WmdXMkTT&Qig1FAQOeZ-68cVYU;0M8X zM{6^S*BYA#FKo0a_*#8G1r!R~c&4|q%F|^`sb8NKkt>ul7@Ntl?>+*;39HBj+U$N) zS}2oN8`MWi)w1gG@UL{5{$BI3%5FR(<8|*@3K397M_=_J!YB-hYp-)L0;)*BtdEZC zNMyc$zl;{Z2L_i$_q9J+jVblB>qZP-7?zhnckoy1>MaZ;j#BONg$S7RwI{$(>S;=q?N zm%)W}!``D!ZBut}8z_y63-IgUi0_!szIToU|mDNDs8L&7o<#sEu zSVnrT{DZH5Pdws%_5?ygZ{JDV;L3RT4&hGJPl4RPLb@h3IG4601qG3xf=an04JN-7 zo+F#d5?A-Rh84ifV0z?+B+g*zgi4joy=Csp9VQkZ#;^blV+%{v#_j1Mo6VgF;n&UX z>G*H3lw`??rUZj3w`~;6EQwx(E6TPHJ5mbw+#P)z1vFxVuz#e2;-xwmlga`S^RfazE6%cB4z!&h-C z9zjPk0z@K8p%Hm#Qzx{b@=CpoYx64w8ZJ6yf??l;AK(2F%1Ww+KLO8KRq^sGK4$G9 zC(eG)_m&Jeo6rPwc=iOG`LpKQJ8Re2@XVHUe<%_DVDSB08MSNa2z;Ll(PNPR08F?> zLUnnO=7}{*RfEJuy{>kf9gF4oqw}Yd$fzyFKrZgKwiCNoe z3LHi@d{sHn&!^ReVGzWjMG3lbp#C1v;%QA zrSMDlR@s6Bvet9I--%dyHK(si*+%+H}L1 zyhKkxZXyuBI!uXt75&?^$6j6@$5w_ivAEVoe_U3v+2}QVrXa%kvJ@Na8y&1wo@r$& zMZ#}?8D>6SzG~=$nZ?Jsl^+Re>1fuierG6e*yy}=5;3WzSfmQs9pAjaqsOgXu3A6K zg8c`2XMBHQ-=VtK~#oRj36_t9Nc*gL= z&NjSus}Wm1HPSBJ&O6SJs}JyspFpwppAF)-I{hcaJNn1Kb4}?pC-8~^q(atj-JVSy z@1mkmraAb4flf6>4fTy7Fru&BdRbXj?K#hbUbXC^mirg34CgDP2LbAdSjx~P%B0C0 zd;k0fcFp(LYj#+7%8H}UiZV;g7CTXL>ONcK=|@&JCh;1 zaUkTbgtR`NcXAc<2o$h^;A`tIAf67mX=qpx4EB01OOTeVPLu^8^8u>J4 z=7S|MvGG1;bT}c>(9^xS)1xOH<^g`m+ODtHGix65+1Yt$GD| zbu!1htCinEy$I9A$y@KN$9(<%M+?x<&^q0o{8DhQ=Zk62CZ4b#AR#42wxds0p;wrY zR2!LngW}Ry7(_FV(mncQh3S4O6d^}GwVd7La4CQ+3m|*T5GPR%LF%GQV|quh{Za^E zm+~J>YAjN+uYBv>sHN&Un7T{nOJl3lYmyW2Vips7t8N$(9NGXduH!#BqbZ)et zW4RN?lJYv9*jAU8_o_Wp{e{>o%;8FD>bLwv`u_^C|Df>yi?ht^O$4e)Z#Oi$n>WY& zC;ET5B-9gYUg6wG_#H85QJ6@iR%IMrV z#mNM-BJ@1Y*2S_CLUO~#GEg6CuD`LA6?Z{Uya3-!VrcE@aOm<9Q#8|;AX2-fT0I?$ zW3Ab(bOQ@h1_nqJ-9T#UekKB#cP$j0&OXzjQGK}h{xG?3v68 z8mxpPDVD0wlgbaP84|6083^@DX>mL}njQMQ!ATKaM5{{oRkz`c-ONICWcjCQwRt%K zu=~{tlVaN*Icn@*0*u4G$I3HV-NEke$M|$RLsOJU3r^BuX06Sl`})4gcK4?`Z9pa- z$JuNqo_hAC3Lzc=YYy&IS99)!LpM@IHlO_udUwK>pFVHYelJHSD}`hyAXbih*kD>= z84OOyfcjP8y&neW^k{?$8(ZwuZ$@C3sRPtGCs#!S!24%ZRNWI%fZ2Qn@IyxLc!_~h zK!y{|1Df$eeMpfEE0744C{2mDumpE3aox4r=rTn%eJvc5536AKLFR8E1(hYk>gn+u zn=ITeM($`>YGmrRK}PjI2YVmDKCPILa`TDVcPt(o%X*9< z>AvvuzP#cErH+n_EX>T!&ClOnl0;(mnvMV@>0!9Ek*$(^8Q{Sfq@$+m5C({pLH171 z$$L?XS4(TAgdt+tVZGz`@`zQJ8hdk)|IN{g`$;whL0{UA2_bF7S_>x2MAC!$SD_!4 z+@jZLFK#1MNZ#Q?eifQcPZBj?sUUH}L3iW&O7>a`3bX>{?qhFkE$wtm6yW-N zLU_7`7xGgYRapDqy;m_>t_GKue=CcGj@Rv~DEsvqe2GpvYw1a*=WYwMcjpYFG+6p! zHP<~KHdY3qo$I3x5sYkiH`$|>6H|a+6~@&Vy~Z@lKkOr0yHK6u7+*vk!b(*)i((if z9D5`gu>=c4fQ4ARUq55eHXKG=)j2wa-8lDDhVBMC+H_An>B|6Ez?uS0pIkL{AjGH2 zpjCAGiN7R8AJzR0!u;Uy2X2m0G7Ar9Ahe5(mv?TGN-U{J zQz7A_UI@0EJpmE&lZS1e*HB5NkZkN%M?Pv5P5LwxROf$c`{3v(p&8c%Hz;s|T17)s z^ZsHB_KXKv1>xqr-uDKfkE1ud8TksP<^=RFyJR|3YfJb60a%Udja&jj%wt$HuI-rW zat(Ok*=?@*txt7}33HA&M>RHgU~=G0AGJ?%_-CAS6>?KKqY_5lsNhn6!P-E1u~6tdNC6?6}I z144`IahyD$%xpay&1Otz$0gE>PLO#9c0Slb2`bU8>OH`>)NRg7U~IcVw#Vjb77)UT z_GW)!MikN12WHc2JR<9l}e5$LQ7=qjQbCp=yLMYmBgQr`ZfMhKHB+}retQ}O@21xUe41kC5N$9UN%&nhj1sWP!O_;LqInD3Ge*E%{TDj16d-55UZ+pgoD(=uExw ziHd^Xoqs(4V%irJB;gDtL5-?r&jzsocIOKd0w(#l0XvklBTWA-r07RWyo$FpKvw^A z`M0?Yhu)owMc^oFv8JcSK+(gOF%@^WdOYm#-{E~MgrH9rCy}_5y$43v3RNnA# zk9>Qp*)8YaOiDgZIQ_QD4;c^0AQE&ze3Y0!j^KUr-A|uYY&^x+q+{8Xktl50zR>d) z)O1?JejOE7`zR(>@)=9^KbM#?(CV3kILRWuFpE7Jv_ zzxr6ghI^f^2gp@$Ssh{`+s!oxPFm_t5Jz48h0^wa1>)^r8p$vN%Z>GM8G>&cLU)Oj z9D>j0?&EE`8kLoLkE&Vjcm6*iV(Y1GgXIlMs*=JvC?#~u*HrfTDW$+W2G*GXhJ$g~33uj?9Ej~T z8;Bp0gZ0amrd~UY)>>VI;;pT$jg;FXb7ITWl`;=XOG{0G_9$<-+w<=|wgbO(aJUf} zlxCX_CLniUIiEf%&wi1NA?EGrXdiPhZ3k=32xU9hev{^g$ePDQb7v+CX$eh8An(P# zTf52<1VodyX0Im<#lBFz^|M|al?wrsc!nIZQ$aGpq4V9--)}rsDS-fZ*7Z`)r5eX2lV2)#QuuDbMZ+x}lu)5bjj3;KaS@P1%ugkGV zSj0?i!-^UjBAylwn_QT7btN6RZQf7a^j{LIJLcE9*Z@(??qg7uvw3=oGg5DYn9Th@ zYW|N_i9!DFK6HoIeA<+JrF%wK(#6v_$<6|q-$D}X(>=X05Vst_v0hn?`a>Em48ByV zj#%~Tc$${#fbY-#>yDkfx;c`pG`Z*)(J+tghdjL$%+#;?igFQg81Xh+>I1kvX3ppS zBp_Jlvi$rHnuzM}SZbvVAOP0E35Bn)}!K(@NusMBNM7gnpWgjLp^RPf05=Nfa{W)BT zFcyo3q-47><$evZi+%$~wSG81dXqgc*Y$A~!j#QK0&4B{J0SfF*)qDyK6P$nkA;QF z>q(_=spUIYgEfiCd!1G*7F$mN(JuqLyZ!sgQo>z>Gs;N}t9l^A=arU*ij%KHzYwJ`6dk zEdDK|c6_b%`N~C%6@)Pk>+Iq}TdGW>00w^tB^foi8mUi}PDTh84tF8BSSUR_9Uwnd zRYj*&$~dwYqrvn0L)o*{c5#xW`B0-MMTU0n)Pd-*oG$0TY=fwA*bk}cTL@+D!!aof zFg-Zc%`ZMc#XBSWut~Rk_`jg|ANVNVbOhl`N4x(u{7b3+FS~-MGV^zX!Lr0V(uZ8? zI`^55#}Kji2K3i9;KR;r&$}krl>6s&Bug{F??b=!&RLubaii7|8{{IS80A-*! zO4XJm!bzO&h%YzNTq<1;%XB``QMJPdadBWjN{Yh}glv23v5FgXc>6)T!>UJk^u?tUxF78H7 z$apN*OSl#6BiF_*mO^PP-pK`IKv#ZxZn>OYx@NtJ2OQ5$g%or8Cqpy?dKBZINzC8b za?o(7hzmjRMtst(L*hk61MuQ`DX8fPu@^F;be{41?Y}T9C&h=zwsr@n{g8k4&FNmJ z``@rOB&!jrJ1RzUm#pUWuaz zPm|v@m@}8wLWW&MG2meF*LbDFg!SAX35J;Svqet+J6;%XO~MiH&~o|G32KZ?V(f}< z-#ERW>AKYf4rc|?8vo%>b%bx0P*8B^f6oPQoM|#CV&|~a`KApz@+=kzQIR?h5q%JpDqY)k5KpgzvA8Ar{xS6oHY->n+OM|+h zWF$HtRguHpHOs+w_wpqzy2+4(0orpjb}M0n95eIFINDQXkgj?fYq&AloNI-fTq$&C z)aoA%fNdMum%h#DQRla3jGwzTyV9ku-`Q;s)@o>In8a?Rf#|-F9KF+H9WC=ZU*~Od zH*w+0HOu1VB^Dc)>1Bkv(@KaPYEGFQZZ_$+Fn);_HHNq0uA~PBu=HAZWK(G$$L(e^|}z^vq2EaEI^B zBgE>9AcKtfQ-xmgfYh(oM-Y24F)*4`(IoTn;pZJ*KDfl%YUOKt3VY8! zd*qG6M`JnskdJg@44$*Ch!_ql_u;xT11t-+Q4o_pjh%HzS_p#sn?BcB-`pNt9RsQA z;VnWE@-Kf6dgh3FKm+*;6Zb5XrN=%pt37{V4+V5kHl@+&u?9hW<$KX&XKW8_^(Y8e zL2J3mHg#C*XfVwv%cu*WpUQ}Ec!x> z^oU$`gP+XzlvH%JMov(}lmfnJrkFw!w$}0tVaCd^eoD_5J|Sjw$!Kz}#9N={z}^_- zc9;}`VVrMt+_-CP>1pG`edBHlePj^qjB~f6M(mE%si!KnC+{_l{H3EBa$myKCjn_) zyM_JCY(+uJ>w6hr3HUIg)2aumFh~bO6}6>hLxHw%53y5ol~)iQw3y>IA1eqp;meE9 zN<$OyURXy#7^ZsS6qFv;?qK2=5*quvwvTQ!A_Ra+?W4*#m}um`$iRH*RY`&Nm?tit?krje@}Q={s`U6+TX@pRw-8!nq!*kc!RP zao|EskMOhZYy10PXawk_zI@g<*k>EXr(@8)L5qPw63KKz8!#p97)ONjnc&%ERnK$JgZ>7g z=d<{GsW CZLAFd diff --git a/tests/vpqr.spec.ts-snapshots/test-the-qr-1-DesktopChrome-darwin.png b/tests/vpqr.spec.ts-snapshots/test-the-qr-1-DesktopChrome-darwin.png deleted file mode 100644 index 04c8631b79d5a7b5d36bd60f3cf37676fb75042a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9986 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 z zC$%lDEY{CWjw)ZEe(7413oXTEiR=-3mb|=jm45h+xPqMQq-{B6{mJvQ_g*t;Aj0)( zo$ZgfI3wL~;pKv5LEl4PV7X?7GD@6{p`olCvjF!77UG05f}Wu3`rT)y^s{+qzunw@J@b)T6Oy$#y1A~4&`6cwTU%oqX)sHx^hmKACz zHPE(eVzhU-(XOMU1ewaE+}_?cLE%E_Q9?$mf)81bsLfs8d(HZrgpntW5)*;ydK){w z_wyyt63An-5~!~)XSMjq)C#$GpQ*^>8ehl>_Kbuc2#M=%_GrcoP{XtN^nR2Tj8KNH z*P8NHe~))ef8TbwW)JF{K2u3()7VBlE@>&JaC^nx(f@-{+-mQRX7O&JUOY@;wUbXP3@>*)!(TUf2+a|7d8pfae4iQnQPTC0e-WJRWcL5twX)*=%BLvr;l_ z7Mtgak<}7|3uUMOLLLklnAca+sk}buNjCVur3w~?wW2&Mg}av)dId&SQc0px>`TD^0=yoo ALI3~& diff --git a/tests/vpqr.spec.ts-snapshots/test-the-qr-1-Mobile-Chrome-darwin.png b/tests/vpqr.spec.ts-snapshots/test-the-qr-1-Mobile-Chrome-darwin.png deleted file mode 100644 index f8e86d86b31e7fe684108d9e0a7ef3239709f90d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10062 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 Date: Tue, 10 Nov 2026 21:26:52 -0800 Subject: [PATCH 2/3] Run CI on ubuntu-24.04 ubuntu-latest is now Ubuntu 26.04, where Playwright 1.56 cannot install its browsers, so the lambda-shape and docker jobs failed before testing anything. Pin every job to ubuntu-24.04, which Playwright supports. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/ci.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2e3634bb..72919b35 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,10 +12,12 @@ concurrency: group: ci-${{ github.ref }} cancel-in-progress: true +# Every job runs on ubuntu-24.04, not ubuntu-latest: Playwright installs browsers +# only on the Ubuntu versions it knows, and ubuntu-latest moves ahead of it. jobs: unit: name: Unit tests and types - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 @@ -28,7 +30,7 @@ jobs: stores: name: Store contract tests (memory, MongoDB, DynamoDB Local) - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 services: mongo: image: mongo:7 @@ -54,7 +56,7 @@ jobs: # the staging deployment's tests do. lambda-shape: name: Lambda build and smoke test - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 @@ -89,7 +91,7 @@ jobs: # Proves the Docker image self-hosters run: MongoDB store, exchanges on. docker: name: Docker image with MongoDB - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 services: mongo: image: mongo:7 From 385af8f0d10f783bcba828bb64fec1b26e2a4d51 Mon Sep 17 00:00:00 2001 From: Nate Otto Date: Tue, 10 Nov 2026 21:31:52 -0800 Subject: [PATCH 3/3] Upgrade Playwright to 1.65 and run CI on ubuntu-latest again ubuntu-latest is now Ubuntu 26.04. Playwright 1.56 cannot install its browsers there; 1.65 can. Upgrading fixes the lambda-shape and docker jobs without pinning the runner, so this undoes the ubuntu-24.04 pin. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/ci.yml | 10 ++++---- package-lock.json | 49 +++++++++++++++------------------------- package.json | 2 +- 3 files changed, 23 insertions(+), 38 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 72919b35..2e3634bb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,12 +12,10 @@ concurrency: group: ci-${{ github.ref }} cancel-in-progress: true -# Every job runs on ubuntu-24.04, not ubuntu-latest: Playwright installs browsers -# only on the Ubuntu versions it knows, and ubuntu-latest moves ahead of it. jobs: unit: name: Unit tests and types - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 @@ -30,7 +28,7 @@ jobs: stores: name: Store contract tests (memory, MongoDB, DynamoDB Local) - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest services: mongo: image: mongo:7 @@ -56,7 +54,7 @@ jobs: # the staging deployment's tests do. lambda-shape: name: Lambda build and smoke test - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 @@ -91,7 +89,7 @@ jobs: # Proves the Docker image self-hosters run: MongoDB store, exchanges on. docker: name: Docker image with MongoDB - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest services: mongo: image: mongo:7 diff --git a/package-lock.json b/package-lock.json index cd01af28..56aefec9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,7 @@ "validator": "^13.15.15" }, "devDependencies": { - "@playwright/test": "^1.55.0", + "@playwright/test": "^1.65.0", "@tailwindcss/postcss": "^4", "@types/node": "^24", "@types/react": "^19", @@ -1922,18 +1922,19 @@ } }, "node_modules/@playwright/test": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz", - "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.65.0.tgz", + "integrity": "sha512-iGURLGuKDLakSEl7Pgfv8h7f+XLT+V861Wfhz0zlEl5nyFuKUopdkFBPKqTllTUp06aOwPuH8iuUEb3yp3MpbQ==", "devOptional": true, + "license": "Apache-2.0", "dependencies": { - "playwright": "1.56.1" + "playwright": "1.65.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@rolldown/binding-android-arm-eabi": { @@ -3555,19 +3556,6 @@ "node": ">=12.20.0" } }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -5216,33 +5204,32 @@ } }, "node_modules/playwright": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", - "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.65.0.tgz", + "integrity": "sha512-F3AMWcR44qMBt4kq+6Kb6mX7bjGXshktKFOPULd7reED6ZJWevjbNRqysP7q+AATE9kdPEZBibex1BYsvpVoeA==", "devOptional": true, + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.56.1" + "playwright-core": "1.65.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" + "node": ">=20" } }, "node_modules/playwright-core": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", - "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.65.0.tgz", + "integrity": "sha512-vNSKgH6YqtN7cdT/L334zo0a+YwkrpicyrHJlWWPIm/Q+Nn2SWInil01oT0mbu96U4GgoRtCYQD9CzJQgju+lA==", "devOptional": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/possible-typed-array-names": { diff --git a/package.json b/package.json index 2361f452..8f83aedc 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "validator": "^13.15.15" }, "devDependencies": { - "@playwright/test": "^1.55.0", + "@playwright/test": "^1.65.0", "@tailwindcss/postcss": "^4", "@types/node": "^24", "@types/react": "^19",